Tạo ngọn đồi trong suốt?


34

Tôi có được những ngọn đồi trong suốt thanh lịch thông qua một sự kết hợp gdalconvert. So với các loại đồi dựa trên màu xám thường được sử dụng, các loại đồi này trong suốt như vậy rất tuyệt vì chúng có thể được đặt giữa nền bản đồ và các lớp trên khác (đường, buiding) để tạo cảm giác 3D bất kể loại và màu nền.

Làm thế nào nó hoạt động

Bí quyết: Bắt đầu với một ngọn đồi quy mô màu xám được tạo ra bởi gdal hillshade, mẹo là lấy các giá trị của kênh màu xám, đảo ngược từng giá trị và chuyển kết quả này thành một kênh độ mờ mới. Pixel đen [0,0,0] trở thành [0,0,0,255] (opacity = 255), pixel xám [120,120,120] trở nên thấp hơn [120,120,120,135] (opacity = 135, còn gọi là 255-120), pixel trắng [255,255,255] trở nên trong suốt [255,255,255,0] (opacity = 0, còn gọi là 255-255), v.v. Các sắc thái của Hills là mờ đục và đen , đồng bằng dần dần trở nên trong suốt (trắng) . Về mặt khái niệm, phương trình dải của pixel là một cái gì đó như:

alpha_value([0])    = 255-0 = 255;   // black pixels get full opacity
alpha_value([Grey]) = 255-Grey;
// grey pixels get 255-GreyValue opacity.
alpha_value([255])  = 255-255 = 0  // white pixels get null opacity !

Đối với một video nằm ngửa về cách tiếp cận này, được giải thích bởi một nhà thiết kế Photoshop, hãy xem Thêm phần bóng mờ trong Photoshop (16 phút).

Câu hỏi

Lấy một ngọn đồi dựa trên màu xám có nguồn gốc từ ETOPO hoặc SRTM ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges, tệp có sẵn để tải xuống ở đây ) làm đầu vào ...

... Làm thế nào để thực hiện thủ thuật được trích dẫn qua gdal hoặc một cách không phá hủy GIS khác trên các tệp .tif như vậy?

Lưu ý rằng tôi muốn giữ các thuộc tính của GIS (định vị địa lý).

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


1
Tùy thuộc vào cách dữ liệu tham chiếu được lưu trữ trong tiff, nó có thể dễ dàng như đổi tên tệp thế giới được liên kết với tiff.
Steve

@Steve: dành cho các tệp .tif được tạo từ raster như SRTM hoặc ETOPO saugdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
Hugolpz

Tôi nghĩ rằng gdal_tranlatevới sự kết hợp của -b ban nhạc , -mask ban nhạc , -expand xám | rgb | rgba cùng witht công thức opacity=-(px_grey_value)+255có thể là cách để đi, nhưng tôi không bao giờ chạm vào ban nhạc và I'am vẫn khá tránh khỏi thất bại.
Hugolpz

đã thêm
Hillshade

Bạn đã thử gdal_edit.py để viết lại tọa độ, kích thước ô và hệ thống tham chiếu chưa?
radouxju

Câu trả lời:


42

Tóm lại

Mỗi bộ 3 hình ảnh dưới đây nên được đọc như "màu xám (dải) + độ mờ (dải) = kết quả trong suốt" . Bạn có thể kiểm tra các quy trình này trong vòng vài phút thông qua tệp github được lưu trữ liên quan . Quy trình số 3 là quy trình mà tôi đề xuất, với ngưỡng giữa 170 (giữ bóng mạnh) và 220 (giữ tất cả bóng). Quy trình 3 cung cấp các bóng mạnh nhất và tránh hiệu ứng làm trắng xám. Điều chỉnh độ mờ tổng thể của lớp kết quả khi cần thiết. Các phương trình trong --calc="<equation>"có thể được cải thiện khi cần thiết, sử dụng gdal_calc.

Đối với một video nằm ngửa về cách tiếp cận này, được giải thích bởi một nhà thiết kế Photoshop, hãy xem Thêm phần bóng mờ trong Photoshop (16 phút).

Lý lịch

gdaldem hillshadetạo ra một tệp tỷ lệ xám một dải với các giá trị pixel phạm vi = [1-255], còn gọi là từ bóng tối nhất đến pixel sáng nhất. Đối với các khu vực bằng phẳng, px = 221 (#DDDDDD). NoDataValuepixel nhận được gật đầu mặc định 0, đồng thời, màu đen tối nhất ở đầu vào và đầu ra là và nên có 1. Không có dải độ mờ được xác định, độ mờ là 100% .

gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges

hillshade.tmp.tif

Chúng tôi muốn xác định và kiểm soát một dải độ mờ thứ 2!

Mục tiêu

Chúng tôi muốn một ban nhạc thang độ xám -b 1 , đó là ngọn đồi. Ngoài gdal, đó là một dải màu xám với phạm vi liên tục như px = [1-255]. Chúng ta có thể cắt các khu vực không liên quan (# 2) hoặc bôi đen nó thành px = 1 và dựa vào dải độ mờ (# 3).

Chúng tôi muốn có một dải độ mờ -b 2 , nói chung là đảo ngược của ngọn đồi hoặc một chức năng liên quan của điều đó. Chúng tôi có thể cắt bỏ các khu vực không liên quan (# 2). Nó phải là một phạm vi liên tục của các opacity như px = [1-255], khác là không có sự thanh lịch.

gdal_calccó thể được sử dụng để thực hiện phép toán trên các pixel từ các tệp đầu vào A, B, C ... và kiểm tra các giá trị boolean như A<220, trả về 1 (đúng) hoặc 0 (sai). Điều này cho phép tính toán có điều kiện. Nếu điều kiện là sai, phần liên quan của phương trình bị vô hiệu hóa.

1. Đồi xám làm trong suốt

Phần sau đây cung cấp kết quả hai dải rất tốt với các gdal hillshademàu xám tiêu chuẩn và các vùng trắng hơn được làm ngày càng trong suốt:

# hillshade px=A, opacity is its invert: px=255-A
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity.tif --calc="255-A"
# assigns to relevant bands -b 1 and -b 2
gdalbuildvrt -separate ./final.vrt ./hillshade.tmp.tif ./opacity.tif

hillshade.tmp.tif # 1, opacity.tif # 1, Final.tif

2. Tối ưu hóa thông qua giả hành (-b 1 & -b 2)

2/3 pixel trên -b 1(thang độ xám) trở nên vô hình với mắt trần khi độ mờ -b 2được thêm vào, tuy nhiên, các pixel này giữ các giá trị -b 1độ mờ khác nhau và độ mờ thấp khác nhau -b 2. Chúng có thể được tạo ra tất cả các [255,1]pixel trong suốt màu trắng , cho phép tốc độ nén tốt hơn:

# filter the color band, keep greyness of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./color_crop.tmp.tif \
    --calc="255*(A>220) +      A*(A<=220)"
# filter the opacity band, keep opacity of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity_crop.tmp.tif \
    --calc="  1*(A>220) +(256-A)*(A<=220)"
# gdalbuildvrt -separate ./final.vrt ./color_crop.tmp.tif ./opacity_crop.tmp.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final_crop.tif

# 2, color.tif (cắt) # 2, opacity.tif (cắt) # 2, Final_crop.tif

3. Tối ưu hóa -b 1 (cắt + đen)

Vì chúng ta có một dải độ mờ liên -b 2tục để dựa vào, chúng ta có thể tạo các -b 1pixel màu trắng px = 255 qua 255*(A>220)hoặc đen px = 1 qua 1*(A>220).

gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./color.tmp.tif \
   --calc="255*(A>220) + 1*(A<=220)"
# gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity_crop.tmp.tif \
#  --calc="  1*(A>220) +(256-A)*(A<=220)".
# gdalbuildvrt -separate ./final.vrt ./color.tmp.tif ./opacity_crop.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final.tif

# 3, màu.tif # 2, opacity.tif (cắt) # 3, Final.tif

Kết quả này cho thấy bóng mạnh hơn .

Kết quả

Tạo một ngọn đồi trong suốt có mục tiêu ngay lập tức để loại bỏ các khu vực màu xám trước đây của đồng bằng và liên quan đến hiệu ứng làm mờ màu xám không mong muốn nhưng có mặt khắp nơi . Sản phẩm phụ mong muốn là một sự kiểm soát gia tăng đối với sản phẩm hình ảnh cuối cùng. Quá trình được mô tả loại bỏ hầu hết các màu xám và tất cả các pixel trắng. Hình ảnh nền đơn giản đầy màu sắc sẽ giữ các màu đã chọn khi được che phủ bởi các ngọn đồi trong suốt đến đen, chỉ các vùng bị bóng sẽ bị tối. So sánh quá trình # 2 (trái) và # 3 (phải) bên dưới.

Tổng quan:

So sánh quá trình # 2 (trái) và # 3 (phải), quan điểm chung.

Thu phóng, vui lòng chú ý các bóng (trước so với sau):

So sánh quá trình # 2 (trái) và # 3 (phải), xem chi tiết.

Tối ưu hóa hơn nữa

Các khu vực màu trắng : Người ta cũng có thể muốn giữ các khu vực giác ngộ nhất để tăng cảm giác 3D. Nó thực sự sẽ là đối xứng của phương pháp hiện tại này với các thay đổi ngưỡng nhỏ, sau đó là sự hợp nhất của cả hai đầu ra thông qua gdal_calc. Đồng bằng sẽ trong suốt 100%, bóng tối nhất và các khu vực khai sáng nhẹ nhất mờ đục.

Làm mịn: Hillshade đầu vào có thể được làm mịn trước để có kết quả cuối cùng tốt hơn, xem Làm mịn DEM bằng GRASS?

Hillshade composite ( Làm thế nào để tạo ra hillshade composite? ).

Bumped hillshade cũng thú vị ( mô tả )

Ghi chú

  • Các ngưỡng khu vực bằng phẳnggdal hillshadeđầu ra là px = 221 (#DDDDDD = [221.221.221]), đánh dấu khu vực bằng phẳng. Ngoài ra, px = 221 của hillshade phân chia hình ảnh giữa các độ dốc trong bóng tối (A <221) và độ dốc trong ánh sáng (A> 221) pixel.
  • Một ngưỡng xử lý tại px = [170-220] như đã được chứng minh tốt, nó giữ gần 100% so với bóng mắt-đáng chú ý, mà mình chỉ đứng cho 15-35% diện tích nhẹ nhõm.
  • Kích thước tệp > Nén: Final.tif trong số 1, # 2, # 3 là ~ 1,3 MB mà không nén, sau đó ~ 0,3-0,16 MB sau khi nén, tiết kiệm 80%!
  • Kích thước tệp > cắt xén: Từ .326KB ở # 1, cắt màu & độ mờ (# 2) lên 310kb, tô màu đen (# 3) lên 160kb. Hiệu ứng cắt xén trên kích thước tệp giảm từ 5 ~ 50% với ngưỡng tại px = 220 và đầu vào của tôi.

2
Khuyến khích +1 chào mừng.
Hugolpz

2
Hướng dẫn xong. Tiếng Anh của tôi có thể bị hỏng, hãy thoải mái cải thiện.
Hugolpz

3
Trong khi bạn đã phải tự trả lời thì chủ đề này là một hướng dẫn tuyệt vời liên quan đến rất nhiều câu hỏi liên quan đến leo đồi. Làm tốt!
Kersten

Hướng dẫn của bạn chỉ là công việc. Công việc tuyệt vời Bạn có thể vui lòng xem xét trả lời câu hỏi của tôi => ở đây ? Có thể tạo .ovr cho loại GeoTIFF, thang độ xám với dải alpha không?
Sandthorn

1
Xin chào @sandthorn, mặc dù tình yêu của tôi dành cho nó Tôi không còn ở trong lĩnh vực này nữa. Chi phí để tìm câu trả lời có thể sẽ cao hơn đối với tôi-2018 so với bạn-2018. Hy vọng công cụ của tôi chỉ ra đúng hướng cho vấn đề của bạn!
Hugolpz

7

Một cách khác để có được kết quả tương tự của một khung vẽ không màu xám phù hợp hơn để kết hợp với các lớp khác là tùy chọn 'kết hợp' trong gdaldem.

Nó thực hiện một độ dốc và bóng đồi và kết hợp cả hai trong một hoạt động. Khu vực có độ dốc 0 có màu trắng. Các khu vực có độ dốc 90 độ có màu đen cho bóng dốc, với một số chiếu sáng được thêm vào bởi lớp vỏ đồi.

gdaldem hillshade -combined -compute_edges infile outfile.tif

Sau đó, sử dụng chế độ tổng hợp nhiều lớp để 'treo' lớp này lên các lớp khác.

Tiêu chuẩn / kết hợp leo đồi

Tiêu chuẩn Hillshading

Tạo bóng kết hợp nhân với lớp cơ sở OSM (độ mờ khoảng 50%) Tạo bóng kết hợp nhân với lớp cơ sở OSM


2

gdal+ convertquy trình làm việc dựa trên

Có một giải pháp gdal+ convertcho kết quả hình ảnh tốt. Vấn đề với giải pháp này là convertphá hủy thông tin địa lý mà sau đó bạn phải khôi phục. Nó tăng số lượng hành động để chạy.

# Basic crop
gdal_translate -projwin 67 35.92 99 5 ../data/noaa/ETOPO1_Ice_g_geotiff.tif crop_xl.tmp.tif
# Grey-based hillshade
gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
# create a transparent hillshade:
convert shadedrelief.tmp.tif -fuzz 7% -fill "#FFFFFF" -opaque "#DDDDDD"  whited.jpg # makes all grey values white to lighten the filesize
convert whited.jpg -alpha copy -channel alpha -negate +channel trans.png # <=== TRICK HERE.
# Restore georeferencing & reproject            
gdal_translate -a_ullr 67 35.92 99 5 trans.png trans.tmp.gis.tif
gdalwarp -s_srs EPSG:4326 -t_srs ESPG:3857 ./trans.tmp.gis.tif ./trans_reproj.tmp.gis.tif
# Compress from 11MB to 2MB:
gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./trans_reproj.tmp.gis.tif ./trans.gis.tif

Để biết giải thích về lệnh 4, hãy xem: https://stackoverflow.com/a/23018544/1974961

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.