- Комбинирование светотеневой отмывки и цветовой карты рельефа с помощью GDAL
- Содержание
- Исходные данные
- Теневая отмывка
- Цветовой рельеф
- Комбинирование
- Метод 1: «в HSV и обратно»
- Метод 2: «Прозрачность как в ГИС»
- Метод 3: «Взять прозрачность из RGBA»
- Вспомогательные операции
- ArcMap
- Общий обзор
- Параметры
- Более подробно о том, как работает инструмент отмывки
- Тип отмывки
- Азимут и высота
- Масштабирование и размер пиксела
- Коэффициент Z
- Конвертация единиц измерения
- Масштабирование и размер пиксела
- Вертикальное преувеличение
- Удалить эффект ребер
Комбинирование светотеневой отмывки и цветовой карты рельефа с помощью GDAL
Создание слоя сочетающего теневую отмывку и цветовую ЦМР в нескольких вариантах
Мы все очень любим красивый рельеф. Эта статья рассказывает про то как получить подобный результат в виде единого комбинированного слоя с помощью GDAL и вдается в некоторые нюансы применения прозрачности.
Обычно эффект комбинирования в ГИС (таких как QGIS) достигается использованием двух слоёв. Берется сама ЦМР (цифровая модель рельефа) в виде растра, где высоты сгруппированы в пояса и каждому задан свой цвет и берется теневая отмывка рельефа. Слой цветового рельефа располагается поверх теневого и цветовому рельефу задается определенный процент прозрачности (в примере выше — 30%). В результате получается картинка показанная выше.
Все хорошо и красиво, но есть одна проблема. Этот вариант работает пока вы находитесь в локальной ГИС, умеющей работать со слоями. Что если вам нужен комбинированный рельеф единым слоем? Для использования в веб, графических редакторах или просто для удобства управления.
Разберем как получается изображение выше с помощью GDAL. GDAL — это швейцарский нож специалиста в области ГИС, набор кросс-платформенных консольных утилит позволяющих выполнять большее количество различных операций (подробнее с примерами).
Содержание
Исходные данные
В качестве единственного источника выступает ЦМР, растровая матрица, где каждому пикселю соответствует значение его высоты над уровнем моря. Это может быть SRTM, ASTER GDEM и другие источники.
Посмотреть на эти матрицы можно в QGIS в сером или цветном представлении.
Теневая отмывка
Создадим теневую отмывку на основе нашей ЦМР. Для многих операций с данными о рельефе в GDAL используется инструмент gdaldem. Результатом операции является 8-битный растр, где каждому пикселю назначается интенсивность освещенности в зависимости от его положения. Также можно указывать высоту (-alt) солнца над горизонтом 0-90 и угол (-az) освещения солнца 0-360.
Цветовой рельеф
Теперь необходимо сделать еще одну матрицу, где назначить каждому ее пикселю определенный цвет. Это очень удобно сделать в пользовательской ГИС, где посредством интерфейса можно задать количество высотных поясов, выбрать цвет, оценить результат.
Для GDAL результат такого раскрашивания нужно преобразовать в текстовый файл следующего формата, пример:
Где первая цифра — высота, а 2-3-4, ее цвет в RGB. В данном примере, все пиксели от 0 до 200 будут закрашены одним цветом, от 200 до 400 другим и так далее. Сохраним файл под названием ramp.txt
Дальше, выполним команду, которая на основе ЦМР создаст RGB изображение (информация о высотах таким образом будет потеряна, останется только цвет):
Комбинирование
Метод 1: «в HSV и обратно»
Один из методов сложения цветового рельефа и теневой отмывки — преобразование через HSV и обратно. В рамках этого метода, цветовой рельеф из RGB (red-green-blue) преобразуется в HSV (hue-saturation-value), получившаяся компонента V заменяется целиком на теневую отмывку, результирующий HSV преобразуется обратно в RGB.
Осуществить такое преобразование можно с помощью скрипта hsv_merge.py использующего возможности GDAL (автор: Frank Warmerdam, подробнее о скрипте).
Скрипт запускается следующим образом:
Метод 2: «Прозрачность как в ГИС»
Как можно видеть результат предыдущего метода и то, что мы получаем в пользовательских ГИС (самая первая иллюстрация) несколько различается. Мы также не можем в предыдущем методе менять прозрачность, чтобы достигнуть необходимого результата.
Чтобы получить точно такой же результат, нужно конвертировать не через HSV, а действовать простым сложением компонент по следующему принципу (подсмотрено на Stackoverflow, спасибо Дмитрию Барышникову за наводку!):
Где, r,g,b — каналы исходного изображения, h — растр теневой отмывки, а R,G,B — каналы результирующего изображения, alpha — значение прозрачности от 0 до 1, 0 — верхний растр непрозрачен (нижний, отмывка, просто не будет виден), 1 — верхний растр полностью прозрачен, результат будет идентичен слою теневой отмывки.
Выполнить эти манипуляции можно с помощью скрипта transparent_merge.py (адаптирован автором статьи, скачать), следующим образом:
Таким образом, синтаксис у скрипта такой же, как и у hsv_merge.py, за исключением добавления параметра alpha, который указывает, сколько прозрачность добавить к цветовому рельефу (relief.tif). Результат будет такой же, как и наложение двух растров в пользовательской ГИС:
Метод 3: «Взять прозрачность из RGBA»
Исследование исходников hsv_merge.py показывает, что в качестве исходного растра может использовать не только RGB, но и RGBA, т.е. растр с заданной прозрачностью. Хотя это похоже на то, что нам нужно, на самом деле это не оно, так как никакого учета канала прозрачности при цветовой трансформации не происходит, а канал прозрачности (альфа-канал) просто переносится с исходного изображения на результат перевода через HSV и обратно.
Чтобы воспользоваться этим методов, нужно сначала создать из RGB — RGBA, самый простой способ это сделать (не разобрался как это сделать в GDAL) следующий, нужно просто загрузить растр цветового рельефа в QGIS, задать ему прозрачность и щелкнув правой кнопки мыши по нему выбрать «Сохранить как» и далее «Rendered image». Растр сохранится с учетом прозрачности в RGBA.
Вспомогательные операции
Часто встречающиеся задачи по доделке результата — обрезка по контуру и создание альфа-канала.
Обрезка по существующему сложному (необязательно прямоугольному контуру) может быть выполнена с помощью следующей команды:
Создать и назначить определенное значение альфа-каналу можно с помощью следующей команды:
Источник
ArcMap
Общий обзор
Функция Отмывка создает это 3D представление поверхности рельефа в оттенках серого при относительном положении солнца, учитываемом при затенении изображения. Отмывка является способом визуализации рельефа, при котором учитываются источник света, а также уклон и экспозиция поверхности высот. Это качественный метод визуализации топографии, который не дает абсолютных значений высот. Данная функция предоставляет два способа создания отмывки: традиционный и многонаправленный. При традиционном способе отмывка вычисляется с использованием источника света из одного направления, с применением свойств высоты и азимута для определения местоположения солнца. При многонаправленном способе для получения рельефа с отмывкой комбинируется свет из нескольких источников. Преимущество многонаправленного метода отмывки заключается в том, что в областях, обычно подверженных перенасыщению и глубоким теням, отображается больше деталей, чем при использовании традиционного метода.
По умолчанию, цветовая схема оттенков серого используется для отображения модели рельефа с отмывкой. На следующих рисунках показаны модели рельефа с использованием традиционного и многонаправленного методов отмывки.
Это пример изображения с традиционной отмывкой рельефа.
Это пример изображения с многонаправленной отмывкой рельефа.
Параметры
Функция Отмывка имеет следующие параметры:
Входной набор данных высот.
Управляет источником освещения для отмывки:
- Традиционная — Отмывка вычисляется с использованием источника света из одного направления. Можно задать Азимут и Высоту , чтобы контролировать местоположение источника света.
- Многонаправленная — Комбинирует свет из нескольких источников, чтобы улучшить визуализацию рельефа.
По умолчанию используется Традиционная
Азимут – это относительное положение источника освещения вдоль горизонта (в градусах). Это положение указано углом источника освещения, измеряемое по часовой стрелке с севера. Азимут 0 градусов указывает на север, 90 градусов – на восток, 180 градусов – на юг, 270 градусов – на запад.
Этот параметр доступен только при условии, что Типом отмывки является Традиционная . Значение по умолчанию – 315 градусов (с северо-запада).
Высота – это угол превышения источника света над горизонтом в диапазоне от 0 до 90 градусов. Значение 0 градусов указывает, что источник освещения находится на горизонте, т.е. на той же горизонтальной плоскости, что и фрейм привязки. Значение 90 градусов указывает, что солнце находится прямо над головой.
Этот параметр доступен только при условии, что Типом отмывки является Традиционная . Значение по умолчанию — 45 градусов над горизонтом.
Результат отмывки рельефа может быть динамически масштабирован путем изменения коэффициента Z. Для этого существует две опции:
- Нет – Масштабирование не применяется. Эта опция удобна при наличии одного набора растровых данных, покрывающего небольшую территорию. Не рекомендуется для глобальных наборов данных с большими колебаниями высот или мультимасштабных карт, так как будет создаваться рельеф местности с небольшими перепадами для небольших масштабов.
- Уравненное – Применяется нелинейная корректировка с использованием значений по умолчанию для Степень размера пиксела и Коэффициент размера пиксела , что позволяет учитывать широкий спектр изменений высоты (масштаб по высоте) при приближении и удалении изображения. Опция Уравненное рекомендуется при использовании глобального набора данных.
По умолчанию – NONE.
Коэффициент z является коэффициентом масштабирования, используемым для конвертации значений высоты для двух целей:
- Конвертация единиц измерения высоты (метров или футов) в единицы измерения горизонтальных координат набора данных, это могут быть футы, метры или градусы.
- Добавление вертикального преувеличения для визуального эффекта.
Значение по умолчанию равно 1.
Степень размера пиксела учитывает изменения высоты (или масштаба) по мере увеличения и уменьшения масштаба просмотра карты. Это экспонента, примененная к значениям размера пикселей в выражении, управляющем степенью изменения Z коэффициента , что позволяет избежать значительных потерь рельефа.
Этот параметр доступен только если типом Масштабирования является Уравненное . Значение по умолчанию равно 0.664.
Коэффициент размера пиксела учитывает изменения масштаба по мере увеличения и уменьшения отображения карты. Он управляет скоростью изменения Коэффициента Z .
Этот параметр доступен только если типом Масштабирования является Уравненное . Значение по умолчанию равно 0.024.
Использование этой опции позволит избежать каких-либо артефактов пересчета, которые могут возникнуть вдоль ребер. Выходные пикселы вдоль края растра или рядом с пикселами NoData будут заполнены значением NoData, поэтому рекомендуется использовать этот параметр только с наборами данных мозаики высот, имеющими перекрытие. При наличии перекрывающихся пикселей, области NoData будут отображаться со значениями перекрывающихся пикселов, вместо пустых.
- Не отмечено — Билинейная интерполяция будет равным образом применяться для пересчета отмывки. Используйте эту опцию, если набор данных мозаики, содержащий растровые данные высот, состыкован по краям. Используется по умолчанию.
- Выбрано – билинейная интерполяция будет выполняться с отмывкой, исключая ребра растров или пикселы NoData. Эти пикселы будут заполняться значениями NoData и отображаться с использованием значений перекрывающихся пикселей, что позволяет снизить возможный эффект острых ребер. Используйте эту опцию, если набор данных мозаики, содержащий растровые данные высот, состоит из пересекающихся элементов или листов.
Результаты работы функции могут зависеть от данных. Если в выходных данных вы наблюдаете артефакты по краям листов, измените состояние этой опции.
Более подробно о том, как работает инструмент отмывки
Тип отмывки
Многонаправленная отмывка улучшает визуализацию рельефа. Она сочетает свет с шести различных направлений для создания расширенной визуализации рельефа и улучшения визуализации регионов со слабым рельефом. Это улучшает баланс между переэкспонированными и затененными областями карты. Выходные данные подходят для добавления рельефа в качестве фона на топографических, почвенных, гидрологических, почвенно-растительных или других тематических картах, качество которых улучшается при использовании дополнительной топографической информации.
На следующем изображении показаны два типа отмывки:
- На верхнем рисунке показан результат традиционной отмывки рельефа.
- На нижнем рисунке показан результат многонаправленной отмывки рельефа.
Традиционная отмывка рельефа. Исходная ЦМР предоставлена Geological Survey (USGS) США.
Многонаправленная отмывка рельефа. Исходная ЦМР предоставлена Geological Survey (USGS) США.
Для получения дополнительной информации о многонаправленной отмывке рельефа см. раздел Многонаправленная отмывка рельефа улучшает ваши карты.
Азимут и высота
Свойства высота и азимут вместе указывают на относительное местоположение источника освещения, который будет использоваться для создания 3D модели (отмывка или цветная отмывка). Высота – это угол превышения источника света над горизонтом в диапазоне от 0 до 90 градусов. Значение 0 градусов указывает, что источник освещения находится на горизонте, т.е. на той же горизонтальной плоскости, что и фрейм привязки. Значение 90 градусов указывает, что солнце находится прямо над головой.
Азимут – это относительное положение источника освещения вдоль горизонта (в градусах). Это положение указано углом источника освещения, измеряемое по часовой стрелке с севера. Азимут 0 градусов указывает на север, 90 градусов – на восток, 180 градусов – на юг, 270 градусов – на запад.
Масштабирование и размер пиксела
Результат отмывки рельефа может быть динамически масштабирован путем изменения коэффициента Z. Для этого существует две опции:
- Нет – масштабирование не применяется. Эта опция удобна при наличии отдельного набора растровых данных, покрывающего небольшую территорию. Для наборов данных, покрывающих обширную территорию, а также для карт со множеством масштабов эта опция не рекомендуется, так как в мелких масштабах рельеф будет выглядеть плоским.
- Уравненное – в этом случае масштабирование происходит нелинейно, с использованием параметров Степень размера пиксела и Коэффициент размера пиксела , что отражает непропорциональное изменение высоты (масштаба по высоте) при приближении и удалении изображения. Эти значения рекомендуются при использовании набора данных на весь мир.
Коэффициент z изменяется с использованием следующего выражения:
Уклон является фактором размера пиксела. При использовании больших пикселов значение уклона становится меньше, поскольку уклон представляет собой усредненный уклон на протяжении большого расстояния. В результате, в мелких масштабах объекты кажутся плоскими. В картографическом смысле результатом является существенная потеря рельефности. Чтобы это компенсировать, параметр Коэффициент Z может быть изменен в зависимости от масштаба. Отношение является не линейным, а экспоненциальным. При изменении Степени размера пиксела и Фактора размера пиксела будет изменены уровни, на которых изменяется Коэффициент Z . Это означает, что z-коэффициент следует задать в соответствии с масштабом.
Коэффициент Z
Коэффициент z является коэффициентом масштабирования, используемым для конвертации значений высоты для двух целей:
- Конвертация единиц измерения высоты (метров, футов. ) в единицы измерения горизонтальных координат набора данных, это могут быть футы, метры или градусы.
- Придание визуального эффекта преувеличения рельефа.
Конвертация единиц измерения
Если единицы измерения для z (высоты) единиц являются теми же, что и для x,y (линейных) единиц, то коэффициент z равен 1. Если набор данных находится в системе координат проекции, для масштабирования указано значение Нет и единицы измерения высот и линейные единицы измерения различны, то необходимо определить Z-коэффициент для вычисления различия.
Для конвертации из футов в метры или наоборот, см. таблицу ниже. Например, если единицы высоты ЦМР – футы, а единицы набора данных мозаики – метры, вы будете использовать значение 0,3048 для конвертации единиц высоты из футов в метры (1 фут = 0,3048 метра).
Масштабирование и размер пиксела
Тип преобразования | Коэффициент преобразования |
---|---|