Как стать автором
Обновить

Создание трехмерных карт рельефа с Rayshader

Rayshader - это пакет с открытым исходным кодом для 2D- и 3D-визуализации данных в R, автором которого является Тайлер Морган-Уолл. Он может быть использован для создания реалистичных карт рельефа и трехмерных графиков.

С помощью пакета Rayshader можно создавать интерактивные 3D-модели, которые можно вращать и рассматривать с разных углов. Кроме того, эти модели можно экспортировать в формат, подходящий для 3D-печати.

Весь процесс создания 3D-визуализации рельефа в R хорошо описан в пошаговом туториале и подходит даже для начинающих пользователей, так что рекомендуем ознакомиться с ним. В этой статье показана краткая версия работы с пакетом на своем примере. С помощью этого алгоритма я попробую создать свою 3D-карту горы Арарат.

Первое, что мне нужно – скачать спутниковый снимок местности и цифровую модель рельефа. Бесплатно скачать ЦМР на эту территорию можно на странице 30-Meter SRTM Elevation Data Downloader, а спутниковый снимок мы возьмем из EarthExplorer (как советует автор, беру Landsat 8). По мнению автора алгоритма, скачать снимки – самое сложное в этом процессе. Но для меня, новичка в R, самое сложное начнется дальше).

Второй шаг – это запуск R и подключение библиотек (в этом примере я работаю с RStudio). Необходимо установить и подключить:

library(rayshader)

library(sp)

library(raster)

library(scales)

Теперь необходимо загрузить данные. Для загрузки файлов SRTM HGT используем функцию raster::raster(). Далее строим график высоты с помощью функции rayshader::height_shade()

Результат работы функции height_shade(). 
Результат работы функции height_shade(). 

После этого загрузим наши спутниковые снимки с привязкой к местности. Нам необходимы красный, синий и зеленый каналы Landsat 8 (B4, B2, B3). После этого, можно построить график, используя функцию raster::plotRGB(). К необработанным данным нужно применить гамма-коррекцию.

Необработанные спутниковые данные
Необработанные спутниковые данные
Гамма-корректированные спутниковые данные
Гамма-корректированные спутниковые данные

Объединяем два набора данных – необходимо, чтобы слой ЦМР и снимок имели одну систему координат. Для этого мы используем функцию crs(). После этого обрезаем наборы данных до горы Арарат и создаем трехслойный RGB-массив интенсивности изображений. Для обрезки необходимы координаты левого нижнего и правого верхнего угла области обрезки. Это то, что нужно rayshader в качестве входных данных для наложения значений высоты. С помощью функции aperm() транспонируем массив, так как растры и массивы ориентированы по-разному в R. 

Полностью обработанный снимок горы Арарат
Полностью обработанный снимок горы Арарат

Теперь – самое интересное. Вводим изображение в plot_3d() вместе с данными о высоте. Для реалистичного ландшафта мы должны установить zscale = 30, но я установила zscale = 15, так как в этом случае гора выделялась сильнее. Так появилась 3D-визуалицация, которую можно сохранить, а также можно открыть окно rgl, в котором можно рассмотреть изображение со всех сторон. Если следовать алгоритму и дальше, можно даже создать видео!

3D-карта горы Арарат
3D-карта горы Арарат

Rayshader имеет ряд функций для работы с рельефным изображением: можно направить свет для расчета теней для ЦМР, создавать теневой слой ambient occlusion, обнаружить воду на изображении при помощи алгоритма flood-fill, создавать текстурные карты, преобразовать данные библиотеки ggplot2 в красивые 3D-визуализации и многое другое.

Статья написана автором блога Картетики

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.