Я получаю элегантные прозрачные горки с помощью комбинации gdal
и convert
. По сравнению с обычно используемыми оттенками серого, такие прозрачные оттенки очень крутые, потому что их можно разместить между фоном карты и другими верхними слоями (дороги, здание), чтобы обеспечить трехмерное ощущение независимо от типа и цвета фона.
Как это работает
Уловка. Начиная с оттенка серого, полученного с gdal hillshade
помощью трюка, уловка состоит в том, чтобы взять значения серого канала, инвертировать каждое значение и передать этот результат в новый канал непрозрачности. Черный пиксель [0,0,0] становится [0,0,0,255] (непрозрачность = 255), серый пиксель [120,120,120] становится меньше, становясь [120,120,120,135] (непрозрачность = 135, он же 255-120), белый пиксель [255,255,255] стать прозрачным [255,255,255,0] (непрозрачность = 0, он же 255-255) и так далее. Оттенки холмов непрозрачные и черные , равнины постепенно становятся (белыми) прозрачными . Концептуально, уравнение полосы пикселя является чем-то таким:
alpha_value([0]) = 255-0 = 255; // black pixels get full opacity
alpha_value([Grey]) = 255-Grey;
// grey pixels get 255-GreyValue opacity.
alpha_value([255]) = 255-255 = 0 // white pixels get null opacity !
Для непринужденного видео об этом подходе, объясненного дизайнером Photoshop, см. Добавление затененного рельефа в Photoshop (16 минут).
Вопрос
Принимая ETOPO или SRTM , полученный на основе серой отмывки ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
, файл доступны для скачивания здесь ) в качестве входных данных ...
... Как сделать трюк, процитированный выше, через gdal или другим не ГИС-разрушительным способом для таких файлов .tif?
Обратите внимание, что я хочу сохранить свойства ГИС (геолокализация).
gdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdal_tranlate
с комбинацией -b band , -mask band , -expand grey | rgb | rgba вместе с формулойopacity=-(px_grey_value)+255
может быть путь, но я никогда не трогал группы, и я все еще совершенно невежественен.Ответы:
ореховая скорлупа
Каждый набор из 3 изображений ниже должен читаться как «серый (полоса) + непрозрачность (полоса) = прозрачный результат» . Вы можете протестировать эти процессы в течение нескольких минут через соответствующий make-файл, размещенный на github . Я рекомендую процесс № 3 с порогом от 170 (сохраняет сильные тени) до 220 (сохраняет все тени). Процесс 3 обеспечивает самые сильные тени и позволяет избежать эффекта седения. При необходимости измените общую непрозрачность полученного слоя. Уравнения в
--calc="<equation>"
могут быть улучшены по мере необходимости, используяgdal_calc
.Для непринужденного видео об этом подходе, объясненного дизайнером Photoshop, см. Добавление затененного рельефа в Photoshop (16 минут).
Задний план
gdaldem hillshade
создает однополосный файл в градациях серого с диапазоном значений пикселей = [1-255], то есть от самых темных теней до самых просвечивающих пикселей. Для плоских областей px = 221 (#DDDDDD).NoDataValue
пиксели по умолчанию получают nodatavalue0
, также самый темный черный цвет на входе и на выходе есть и должен быть1
. Если полоса непрозрачности не определена, непрозрачность равна 100% .Мы хотим определить и контролировать 2-ую полосу непрозрачности!
Цели
Мы хотим одну полосу серого
-b 1
, это горка. Вне gdal это серая полоса с непрерывным диапазоном, такая как px = [1-255]. Мы можем обрезать нерелевантные области (# 2) или почернить его до px = 1 и положиться на полосу непрозрачности (# 3).Мы хотим одну полосу непрозрачности
-b 2
, обычно инвертирование тени или связанная с этим функция. Мы можем вырезать не относящиеся к делу области (# 2). Это должен быть непрерывный диапазон непрозрачности, такой как px = [1-255], иначе элегантность отсутствует.gdal_calc
можно использовать как для вычисления по пикселям из входных файлов A, B, C ..., так и для проверки логических значений, таких какA<220
, который возвращает 1 (true) или 0 (false). Это позволяет условное исчисление. Если условие ложно, соответствующая часть уравнения обнуляется.1. Серая горка сделана прозрачной
Ниже приведены очень хорошие двухполосные результаты со стандартными
gdal hillshade
серыми и белыми областями, которые становятся все более прозрачными:2. Оптимизация с помощью псевдообрезки (-b 1 и -b 2)
2/3 пикселей
-b 1
(с оттенками серого) становятся невидимыми для невооруженных глаз при-b 2
добавлении непрозрачности , однако эти пиксели сохраняют различные значения белизны-b 1
и низкой непрозрачности-b 2
. Из них можно сделать все белые прозрачные[255,1]
пиксели, обеспечивающие лучшую степень сжатия:3. Далее оптимизация -b 1 (обрезка + чернение)
Поскольку у нас есть прогрессивная полоса непрозрачности,
-b 2
на которую можно положиться, мы можем сделать-b 1
пиксели либо белыми px = 255 via255*(A>220)
, либо черными px = 1 via1*(A>220)
.Этот результат показывает более сильные тени .
Результат
Создание прозрачной горки имеет целью для немедленной цели удалить бывшие серые области равнины и связанный с ней нежелательный, но вездесущий эффект выцветания серого . Желаемый побочный продукт - это усиленный контроль над конечным визуальным продуктом. Описанный процесс удаляет большинство серых и все белые пиксели. Цветное фоновое простое изображение сохранит выбранные цвета при наложении прозрачных на черные склоны, только затемненные области будут затемнены. Сравнение процесса № 2 (слева) и № 3 (справа) ниже.
Обзор:
Увеличьте, пожалуйста, обратите внимание на тени (до и после):
Дальнейшая оптимизация
Белые области : Можно также пожелать сохранить наиболее просвещенные области для увеличения ощущений в 3D. Это было бы буквально симметрично этому текущему подходу с небольшими изменениями пороговых значений, а затем объединением обоих выходов через gdal_calc. Равнина будет на 100% прозрачной, а самые темные тени и самые светлые области будут непрозрачными.
Сглаживание: входной склон может быть предварительно сглажен, чтобы получить лучший конечный результат, см. Сглаживание матрицы высот с использованием GRASS?
Композитная горка ( Как создать композитную горку? ).
Ударенная горка тоже интересна ( описание )
Заметки
gdal hillshade
выходе ПВ = 221 (#DDDDDD = [221221221]), маркировки плоских участков. Кроме того, px = 221 от Hillshade делит изображения между пикселями с наклонами в тени (A <221) и склонами в условиях освещения (A> 221).источник
Еще один способ получить тот же результат для не серого холста, более подходящего для объединения с другими слоями, - это опция «комбинированный» в gdaldem.
Он выполняет наклон и тень холма и объединяет два в одной операции. Участки с наклоном 0 белые. Области с углом наклона 90 градусов являются черными для оттенка наклона, при этом слой горной тени добавляет некоторое освещение.
gdaldem hillshade -combined -compute_edges infile outfile.tif
Затем используйте режим наложения многослойных слоев, чтобы «наложить» это на другие слои.
Стандартное / Комбинированное затенение
Комбинированное затенение, умноженное на базовый уровень OSM (непрозрачность около 50%)
источник
gdal
+convert
основанный рабочий процессСуществует
gdal
+convert
решение, которое дает хорошие визуальные результаты. Проблема с этим решением заключается в том, что онconvert
уничтожает географическую информацию, которую затем необходимо восстановить. Это увеличивает количество действий для запуска.Описание команды 4 см .: https://stackoverflow.com/a/23018544/1974961.
источник