Как создать композитную горку?

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
Hugolpz
источник

Ответы:

9

В связанном источнике упоминается «изменить его режим слияния на <Multiply>» , поэтому выполняемая операция не является простым средним значением входных теней (для этого см. Также Как усреднить 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 boolean:

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.

Умножение

Я сделал несколько неудачных попыток получить multiplyзначения пикселей без проверенной формулы или окончательного успеха. @Radouxju указал, что (a*b*c)^(1/3)(среднее геометрическое ) вместо среднего арифметического (a*b*c)/(255*255)может работать. Среднее геометрическое ниже или равно среднему арифметическому, что подчеркивает темноту затененных областей. Я еще не проверял это.

Hugolpz
источник
Я попытался подвести итог моего концептуального изучения композитов и того, как кто-то может их настроить. Настоящая формула для «умножения» остается мне неизвестной.
Hugolpz
Почему бы просто не умножить значения и не изменить их масштаб?
whuber
Не пробовал! Какая формула сделает это (A*B*C)/(255*255)?
Hugolpz
1
Это будет хорошим началом :-).
whuber
1
не «умножать», используя среднее геометрическое вместо среднего арифметического. (а б в) ^ (1/3). Среднее геометрическое ниже или равно среднему арифметическому, что подчеркивает темноту затененных областей.
Радучжу
0

Инструментом, который может сделать это (среди прочего), является визуализация на основе фактора неба ( http://iaps.zrc-sazu.si/en/svf#v ). Рассчитайте несколько параметров местности. Это чертовски хорошо.

Димитрис Пурсанидис
источник
-1

Кажется , в numpy 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

Я не нашел четких и правильных примеров того, как следует использовать экзотические операторы. Если у вас есть что-то, не стесняйтесь поделиться.

Hugolpz
источник