Як створити композитний схил?


10

Концепція композитного схилу гори полягає в поєднанні декількох схилів з різною орієнтацією сонячного світла, щоб уникнути сліпої плями. Для цього потрібно об'єднати 3 знімки на схилах з 315⁰ (NW сонячного світла, шаром за замовчуванням), + 355⁰ шаром, + 275⁰ сонячних променів відповідно. Це збільшує деталі та елегантність, як показано нижче. Повний опис, що не стосується ГІС, є тут .

введіть тут опис зображення

Використовуючи будь-який srtm-файл, 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

Відповіді:


9

Зв'язане джерело згадує "змінити режим злиття на <Помножити>" , тому операція, яку потрібно виконати, не є простим середнім показником вхідних схилів (про це див. Також Як середнє значення 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)може працювати. Середнє геометричне значення нижче або дорівнює середньому арифметичному, що підкреслює темряву затінених областей. Я ще цього не перевіряв.


Я спробував підсумувати своє концептуальне навчання на композиті і як хтось міг це налаштувати. Справжня формула «множити» залишається мені невідомою.
Гюгольпз

Чому б не просто помножити значення і змінити масштаби результатів?
whuber

Не пробували! Яка формула це зробила б (A*B*C)/(255*255)?
Гюгольпз

1
Це було б гарним початком :-).
whuber

1
не "множиться", використовуючи середнє значення GEOMETRIC замість середнього значення ARITHMETIC. (a b c) ^ (1/3). Середнє геометричне значення нижче або дорівнює середньому арифметичному, що підкреслює темряву затінених областей.
radouxju

0

Здається , що в numd Gdal_calc є більше операторів :

+ addition 
- subtraction 
/ division 
* multiplication 
= equals to 
< less than 
> larger than 
! not equal to 
? if clause 
M maximum of two values 
m minimum of two values 
B bit level operator

Я не знайшов чітких і правильних прикладів того, як слід використовувати екзотичні оператори. Якщо у вас є щось, сміливо поділіться.


0

Інструментом, який може це зробити (серед інших), є візуалізація на основі фактора Sky-View ( http://iaps.zrc-sazu.si/en/svf#v ). Обчисліть кілька параметрів місцевості. Чорт добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.