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 hillshade
tạ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). NoDataValue
pixel 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
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_calc
có 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 hillshade
mà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
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
3. Tối ưu hóa -b 1 (cắt + đen)
Vì chúng ta có một dải độ mờ liên -b 2
tục để dựa vào, chúng ta có thể tạo các -b 1
pixel 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
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:
Thu phóng, vui lòng chú ý các bóng (trước so với sau):
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ẳng ở
gdal 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.