Nguồn được liên kết đề cập "thay đổi chế độ hợp nhất của nó thành <Multiply>" , do đó, thao tác cần thực hiện không phải là một mức trung bình đơn giản của các cảnh báo đầu vào (đối với điều này, xem thêm Làm thế nào để trung bình gdal_hillshades? ). Đó là một cái gì đó khác. Tuy nhiên, hãy tạo ra 3 ngọn đồi hướng ánh sáng mặt trời khác nhau:
gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges
Giữ giá trị thấp nhất của A, B, C
Thuật toán đầu tiên tôi nghĩ là lọc và giữ các pixel tối nhất, còn gọi là các pixel có giá trị thấp hơn trong số boolean A, B, CA có thể làm điều đó:
gdal_calc.py -A hillshades_A.tmp.tif -B hillshades_B.tmp.tif -C hillshades_C.tmp.tif --outfile=./hillshades_xl.tmp.tif \
--calc="(A*(A<=B)*(A<=C)+ B*(B<A)*(B<=C)+ C*(C<A)*(C<B))"
Khu vực bị chi phối bởi bóng tối hiện chiếm nhiều hơn phía đối diện của một dây chằng trung tâm, nó được tăng thêm 40⁰ mỗi bên. Không phải là liên kết được cung cấp, thuật toán hiện tại này dường như mất quá nhiều khu vực khai sáng.
Góc của 315±30⁰
(biến đổi góc nhỏ hơn) thay vì hiện tại 315±40⁰
sẽ đẹp hơn.
Sơ đồ dưới đây là một cơ sở của phương trình. Nó hiển thị các nguồn sáng A, B, C và so sánh Boolean cho các giá trị pixel A, B, C trong mỗi phần. Các dòng bằng cần một sự chú ý đặc biệt để được đưa vào Boolean. Các đường trung tuyến có giá trị 221
cho nguồn sáng vuông góc. Hãy nghĩ về các khu vực ảnh hưởng , nguồn ánh sáng gần nhất là ảnh hưởng chính và ảnh hưởng yếu nhất.
Giữ các giá trị cực trị cho A, B, C
Một thuật toán Boolean khác có thể là giữ các giá trị cực đoan nhất, cả các pixel tối nhất và trắng nhất. Sơ đồ sau đây giúp điều về công thức Boolean. Đối với mỗi thứ sáu của vòng tròn, nó xác định giá trị cần giữ từ A, B, C và Boolean để chọn diện tích hình tam giác cộng với đường đẳng thức theo chiều kim đồng hồ, và chỉ có thế . Nó cho (từ trên và theo chiều kim đồng hồ):
--calc="A*(A>B)*(A>=C) + C*(C>A)*(A>=221) + B*(C>A)*(C>=221) + A*(A<B)*(B<=221) + C*(B>A)*(A<=221) + B*(B>A)*(C<=221)"
Nếu các biến thể góc không quá quan trọng, nó có thể cho kết quả tốt.
Booleans khác
Bạn có thể tạo Boolean phức tạp hơn để bao phủ toàn bộ vòng tròn bằng cách sử dụng bất kỳ kết hợp nào các phân đoạn viền. Điều quan trọng là chỉ có một giá trị trong số A, B, C được giữ cho một phân khúc.
nhân
Tôi đã thực hiện một số nỗ lực hoàn thành multiply
các giá trị pixel mà không có công thức đã được chứng minh cũng như thành công cuối cùng. @Radouxju chỉ ra rằng (a*b*c)^(1/3)
(ý nghĩa GEOMETRIC) thay vì ý nghĩa ARITHMETIC có (a*b*c)/(255*255)
thể hoạt động. Giá trị trung bình hình học thấp hơn hoặc bằng trung bình số học, làm nổi bật bóng tối của các khu vực bóng mờ. Tôi chưa thử nó.