Połączone źródło wspomina „zmień tryb syntezy na <Mnożenie>” , więc operacja, którą należy wykonać, nie jest zwykłą średnią wejściowych odcieni wzgórza (w tym celu zobacz także Jak uśrednić gdal_hillshades? ). To coś innego. Jednak stwórzmy 3 odcienie wzgórz o różnych kierunkach nasłonecznienia:
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
Zachowaj najniższą wartość A, B, C.
Pierwszy algorytm, o którym myślałem, to filtrowanie i zatrzymywanie najciemniejszych pikseli, czyli piksele o niższych wartościach spośród wartości wejściowych A, B, CA, boolean, mogą to zrobić:
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))"
Obszar zdominowany przez cienie tworzy teraz więcej niż przeciwną stronę jednego centralnego lignta, został zwiększony o 40⁰ z każdej strony. Wydaje się, że nie w podanym linku obecny algorytm zbyt mocno utracił obszar oświecenia.
Kąt 315±30⁰
(mniejsza zmiana kąta) zamiast tego prądu315±40⁰
byłby ładniejszy.
Poniższy schemat stanowi podstawę równania. Pokazuje źródła światła A, B, C i porównania boolowskie dla wartości pikseli A, B, C w każdej części. Linie równości wymagają szczególnej uwagi, aby zostały uwzględnione w logice. Linie środkowe mają wartość 221
dla prostopadłego źródła światła. Pomyśl o obszarach wpływów , najbliższe źródło światła jest głównym wpływem, a najbliższe najsłabszym.
Zachowaj wartości ekstremalne dla A, B, C
Innym algorytmem logicznym może być zachowanie najbardziej ekstremalnych wartości, zarówno najciemniejszych, jak i najbardziej białych pikseli. Poniższy diagram pomaga zrozumieć formułę boolowską. Dla każdej szóstej okręgu określa wartość, którą należy zachować z A, B, C i logiczną, aby wybrać obszar trójkątny plus linię równości zgodnie z ruchem wskazówek zegara i tylko to . Daje (od góry i zgodnie z ruchem wskazówek zegara):
--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)"
Jeśli zmiany kątów nie są zbyt ważne, może dać dobre wyniki.
Inne booleany
Możesz utworzyć bardziej złożoną wartość logiczną, aby objąć całe koła za pomocą dowolnej kombinacji segmentów obramowania. Ważne jest, aby tylko jedna wartość zachować z A, B, C dla jednego segmentu.
Zwielokrotniać
Zrobiłem kilka prób failled do multiply
pikseli wartości bez sprawdzonej formuły ani ostatecznego sukcesu. @Radouxju wskazał, że (a*b*c)^(1/3)
(średnia GEOMETRYCZNA) zamiast średniej ARITMETYCZNEJ (a*b*c)/(255*255)
może działać. Średnia geometryczna jest mniejsza lub równa średniej arytmetycznej, która podkreśla ciemność zacienionych obszarów. Jeszcze tego nie testowałem.