Зв'язане джерело згадує "змінити режим злиття на <Помножити>" , тому операція, яку потрібно виконати, не є простим середнім показником вхідних схилів (про це див. Також Як середнє значення gdal_hillshades? ). Це щось інше. І все-таки давайте створимо 3 різних сходи сонячних променів:
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
Зберігайте найнижчі значення A, B, C
Перший алгоритм, який я збираюся, - це фільтрувати та зберігати найтемніші пікселі, також пікселі з нижчими значеннями серед вхідних A, B, CA булевих:
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))"
Площа, де панують тіні, тепер складає більше, ніж протилежна сторона одного центрального лігменту, збільшується на 40 ° з кожної сторони. Як не надано посилання, цей поточний алгоритм, здається, втратив занадто багато області просвітлення.
Кут 315±30⁰
(менша зміна кута), а не струм 315±40⁰
зробив би приємніше.
Наведена нижче схема є основою рівняння. Він показує джерела світла A, B, C та булеві порівняння для пікселів значень A, B, C у кожній частині. Лінії рівності потребують особливої уваги, щоб вони були включені в булеві. Середні лінії мають значення 221
для перпендикулярного джерела світла. Подумайте про райони впливу , найближчим джерелом світла є основний вплив, а найвищий вплив - найвищий.
Зберігайте крайні значення для A, B, C
Іншим булевим алгоритмом може бути збереження найекстремальніших значень, як самих темних, так і самих темних пікселів. Наступна діаграма допомагає зрозуміти булеву формулу. Для кожного шостого кола він визначає значення, яке слід утримувати від A, B, C та булевого вибору, щоб вибрати трикутну область плюс лінію рівності за годинниковою стрілкою, і лише це . Він дає (зверху і за годинниковою стрілкою):
--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)"
Якщо коливання кутів не надто важливі, це може дати хороші результати.
Інші булеви
Ви можете створити більш складні булеві, щоб охопити цілі кола, використовуючи будь-яку комбінацію межових сегментів. Важливо, щоб для одного сегмента зберігалося лише одне значення A, B, C.
Помножте
Я зробив кілька спроб failled до multiply
значень пікселів без доведеною формули , ні кінцевого успіху. @Radouxju вказував, що (a*b*c)^(1/3)
(середнє значення GEOMETRIC ) замість значення ARITHMETIC (a*b*c)/(255*255)
може працювати. Середнє геометричне значення нижче або дорівнює середньому арифметичному, що підкреслює темряву затінених областей. Я ще цього не перевіряв.