This media is not supported in your browser
VIEW IN TELEGRAM
Анимация площадки строительства АЭС Аккую (Турция: 36.1444 с.ш., 33.5411 в.д.) по снимкам Sentinel-2 2016–2023 гг. (естественные цвета; снимки 2016–2018 гг. — Level 1C, 2019–2023 гг. — Level 2A).
#снимки
#снимки
Сегодня мы продолжим рассказ о применении языка R для работы с растровыми данными.
This media is not supported in your browser
VIEW IN TELEGRAM
Арифметические и логические действия с растровыми данными
Рассмотрим арифметические и логические действия с растровыми данными:
Каждый раз действие применяется ко всем пикселам растра. В результате получится растр, геометрически равный исходному, но с изменившимися значениями пикселей.
Покажем равенство геометрий исходного и одного из получившихся растров:
Чтобы выполнять арифметические и логические действия с несколькими растрами, эти растры должны иметь одинаковую геометрию, то есть одинаковое число строк и столбцов, одинаковые размеры пикселей (res), и относится к одной и той же системе координат (Coordinate Reference System, CRS).
Возьмем изображения, полученные 4-м и 5-м каналами прибора Landsat 8 OLI
Рассчитаем с их помощью нормализованный разностный вегетационный индекс (NDVI):
Загрузим изображение с зеленого канала, и объединим все каналы в изображение с комбинацией каналов “5-4-3” (NIR, Red, Green):
#R
Рассмотрим арифметические и логические действия с растровыми данными:
r <- rast(matrix(1:16, ncol = 4, nrow = 4))
r+1
r^2
r*0.3
r > 5
s <- r+1
s[s > 5] <- NA
s[is.na(s)] <- 5
Каждый раз действие применяется ко всем пикселам растра. В результате получится растр, геометрически равный исходному, но с изменившимися значениями пикселей.
Покажем равенство геометрий исходного и одного из получившихся растров:
compareGeom(r, r+1)
Чтобы выполнять арифметические и логические действия с несколькими растрами, эти растры должны иметь одинаковую геометрию, то есть одинаковое число строк и столбцов, одинаковые размеры пикселей (res), и относится к одной и той же системе координат (Coordinate Reference System, CRS).
Возьмем изображения, полученные 4-м и 5-м каналами прибора Landsat 8 OLI
red <- rast("LC08_044034_20170614_B4.tif")
nir <- rast("LC08_044034_20170614_B5.tif")
# Проверим равенство геометрий
compareGeom(red, nir)
Рассчитаем с их помощью нормализованный разностный вегетационный индекс (NDVI):
ndvi <- (nir - red) / (nir + red)
names(ndvi) <- "LC08_044034_20170614_NDVI"
plot(ndvi)
Загрузим изображение с зеленого канала, и объединим все каналы в изображение с комбинацией каналов “5-4-3” (NIR, Red, Green):
green <- rast("LC08_044034_20170614_B3.tif")
img <- rast(list(nir, red, green))
plotRGB(img, stretch="lin")
#R
Имя файла данных Landsat содержит массу полезной информации. Например,
*
*
*
*
#R
LC08_044034_20170614_B3.tif
сообщает нам, что:*
LC08
— снимок Landsat-8 OLI/TIRS (The Operational Land Imager/Thermal Infrared Sensor).*
20170614
— сделан 14 июня 2017 г.*
044034
— расположение снимка: Worldwide Reference System (WRS) Path 44, Row 34*
B3
— номер спектрального канала (band 3, зеленый)#R
Landsat Science
The Worldwide Reference System
A map of the Worldwide Reference System-2. (click to enlarge) The Worldwide Reference System (WRS) is a global notation system for Landsat data. It enables a user to inquire about satellite imagery over any portion of the world by specifying a nominal scene…
Комбинация каналов 5-4-3 (NIR, Red, Green) применяется для изучения состояния растительного покрова, мониторинга дренажа и почвенной мозаики, а также изучения сельскохозяйственных культур. Растительность в этой комбинации имеет оттенки красного, городская застройка — зелено-голубые цвета, почва — от темно до светло коричневого или серого, лед, снег и облака — белые или светло голубые. Насыщенные оттенки красного являются индикаторами здоровой и/или широколиственной растительности. Более светлые оттенки характеризуют травянистую растительность или редколесья/кустарники. Хвойные леса по сравнению с лиственными имеют более темно-красную или даже коричневую окраску. Подробнее — см. здесь.
#комбинация #R
#комбинация #R
Многослойные растровые данные
Загрузим тестовый снимок КА “Канопус-В-ИК” и переименуем его каналы (слои):
Для выделения подмножества слоев растра используют двойные квадратные скобки
На выходе всякий раз получаем новый растровый объект (SpatRaster).
Первый аргумент — исходный растр, второй — вектор заданных слоев.
Рассчитаем два спектральных индекса — NDVI (Normalized Difference Vegetation Index) и NDWI (Normalized Difference Water Index):
NDVI характеризует количество фотосинтетически активной биомассы. NDWI — это, по сути, перевернутый NDVI: водные объекты имеют высокие значения этого индекса, а растительность — низкие (отрицательные). На снимке водных объектов нет, зато есть дороги и городская застройка, получающие положительные значения NDWI.
Арифметические и логические операции применяются отдельно к каждому слою растровых данных:
В последнем случае значения каждого пикселя однослойного растра
Арифметические операции над растровыми данными с разным числом слоев выполняются по обычному правилу: растр с меньшим числом слоев циклически повторяется до тех пор, пока число его слоев не сравняется с числом слоев “более многослойного” растра, после чего выполняется нужная операция. Например:
Фактически, s (4 слоя) складывается не с s1 (два слоя), а с комбинацией
#R
Загрузим тестовый снимок КА “Канопус-В-ИК” и переименуем его каналы (слои):
r <- rast("KANOPUS_20190829.tif")
names(r) <- c("blue","green","red","nir")
# class : SpatRaster
# dimensions : 1440, 2052, 4 (nrow, ncol, nlyr)
# resolution : 2.1, 2.1 (x, y)
# extent : 624695.4, 629004.6, 6086649, 6089673 (xmin, xmax, ymin, ymax)
# coord. ref. : WGS 84 / UTM zone 44N (EPSG:32644)
# source : KANOPUS_20190829.tif
# names : blue, green, red, nir
Для выделения подмножества слоев растра используют двойные квадратные скобки
[[]]
или функцию subset
. Аргументами служат индексы или имена интересующих слоев:# Канал 1 (синий)
r[[1]]
# Снова канал 1 (синий)
r[["blue"]]
# Все каналы, кроме 1 (2:4)
r[[-1]]
# Каналы красный и NIR (3:4)
r[[c("red","nir")]]
На выходе всякий раз получаем новый растровый объект (SpatRaster).
subset()
работает аналогично:subset(r, c(3,2,3,1))
subset(r, 2:3)
subset(r, c("red","blue"))
Первый аргумент — исходный растр, второй — вектор заданных слоев.
Рассчитаем два спектральных индекса — NDVI (Normalized Difference Vegetation Index) и NDWI (Normalized Difference Water Index):
ndvi <- (r[[4]] - r[[3]]) / (r[[4]] + r[[3]])
ndwi <- (r["green"] - r["nir"]) / (r["green"] + r["nir"])
NDVI характеризует количество фотосинтетически активной биомассы. NDWI — это, по сути, перевернутый NDVI: водные объекты имеют высокие значения этого индекса, а растительность — низкие (отрицательные). На снимке водных объектов нет, зато есть дороги и городская застройка, получающие положительные значения NDWI.
Арифметические и логические операции применяются отдельно к каждому слою растровых данных:
r <- rast(matrix(1:16, ncol = 4, nrow = 4))
# Составим многослойный растр,
# комбинируя исходный
s <- rast(list(r,2*r,r^2,r+1))
names(s) <- paste("Layer",1:4)
s
# class : SpatRaster
# dimensions : 4, 4, 4 (nrow, ncol, nlyr)
# resolution : 1, 1 (x, y)
# extent : 0, 4, 0, 4 (xmin, xmax, ymin, ymax)
# coord. ref. :
# source(s) : memory
# names : Layer 1, Layer 2, Layer 3, Layer 4
# min values : 1, 2, 1, 2
# max values : 16, 32, 256, 17
s+10
s > 5
s + r
В последнем случае значения каждого пикселя однослойного растра
r
прибавляются к значениям соответствующих пикселей для каждого слоя s
.Арифметические операции над растровыми данными с разным числом слоев выполняются по обычному правилу: растр с меньшим числом слоев циклически повторяется до тех пор, пока число его слоев не сравняется с числом слоев “более многослойного” растра, после чего выполняется нужная операция. Например:
s1 <- rast(list(r,2*r))
# class : SpatRaster
# dimensions : 4, 4, 2 (nrow, ncol, nlyr)
# resolution : 1, 1 (x, y)
# extent : 0, 4, 0, 4 (xmin, xmax, ymin, ymax)
# coord. ref. :
# source(s) : memory
# names : lyr.1, lyr.1
# min values : 1, 2
# max values : 16, 32
s + s1
# class : SpatRaster
# dimensions : 4, 4, 4 (nrow, ncol, nlyr)
# resolution : 1, 1 (x, y)
# extent : 0, 4, 0, 4 (xmin, xmax, ymin, ymax)
# coord. ref. :
# source(s) : memory
# names : Layer 1, Layer 2, Layer 3, Layer 4
# min values : 2, 4, 2, 4
# max values : 32, 64, 272, 49
Фактически, s (4 слоя) складывается не с s1 (два слоя), а с комбинацией
rast(list(s1,s1))
, содержащей 4 слоя.#R
“Канопус-В-ИК” МСС (Многозональная Съемочная Система):
* Канал 1 (синий): 0,46 – 0,52 мкм
* Канал 2 (зеленый): 0,51 – 0,60 мкм
* Канал 3 (красный): 0,63 – 0,69 мкм
* Канал 4 (ближний ИК): 0,75 – 0,84 мкм
Основные характеристики целевой аппаратуры КА “Канопус-В-ИК” — ссылка.
* Канал 1 (синий): 0,46 – 0,52 мкм
* Канал 2 (зеленый): 0,51 – 0,60 мкм
* Канал 3 (красный): 0,63 – 0,69 мкм
* Канал 4 (ближний ИК): 0,75 – 0,84 мкм
Основные характеристики целевой аппаратуры КА “Канопус-В-ИК” — ссылка.
This media is not supported in your browser
VIEW IN TELEGRAM
Охват (экстент)
Равенство геометрий двух растров означает, что у них одинаковое число строк и столбцов, одинаковые размеры пикселей в одной и той же системе координат. Наверное, и охват у таких растров тоже одинаков? А вот здесь не все так просто.
Создадим тестовый растр
(Мы показываем только нужные нам сведения про
Функция
Давайте немного уменьшим охват
Заметим, что произошло не просто вычитание числа — произошло именно сокращение охвата: нижние границы увеличились, тогда как верхние уменьшились.
Теперь обрежем
Геометрии снова одинаковы! Выясняется, что и охват
Оказывается, что пока центр ячейки (пиксела) не окажется за пределами нового охвата никакой обрезки растра не происходит. Может сами проверить это, сокращая охват
Как только центр ячейки окажется за пределами сократившегося охвата, эта ячейка исчезнет их растра:
Исходный растр 4 х 4, потеряв граничные ячейки, превратился в растр размера 2 х 2.
#R
Равенство геометрий двух растров означает, что у них одинаковое число строк и столбцов, одинаковые размеры пикселей в одной и той же системе координат. Наверное, и охват у таких растров тоже одинаков? А вот здесь не все так просто.
Создадим тестовый растр
r <- rast(matrix(1:16, ncol = 4, nrow = 4))
# class : SpatRaster
# dimensions : 4, 4, 1 (nrow, ncol, nlyr)
# resolution : 1, 1 (x, y)
# extent : 0, 4, 0, 4 (xmin, xmax, ymin, ymax)
# name : lyr.1
# min value : 1
# max value : 16
(Мы показываем только нужные нам сведения про
r
).Функция
ext
возвращает объект класса SpatExtentclass(ext(r))
Давайте немного уменьшим охват
r
new_ext <- ext(r) - 0.25
# SpatExtent : 0.25, 3.75, 0.25, 3.75 (xmin, xmax, ymin, ymax)
Заметим, что произошло не просто вычитание числа — произошло именно сокращение охвата: нижние границы увеличились, тогда как верхние уменьшились.
Теперь обрежем
r
по уменьшенному охвату и сравним геометрии до и после обрезки:r_crp <- crop(r, new_ext)
compareGeom(r, r_crp)
# [1] TRUE
Геометрии снова одинаковы! Выясняется, что и охват
r_crp
не уменьшился:# class : SpatRaster
# dimensions : 4, 4, 1 (nrow, ncol, nlyr)
# resolution : 1, 1 (x, y)
# extent : 0, 4, 0, 4 (xmin, xmax, ymin, ymax)
Оказывается, что пока центр ячейки (пиксела) не окажется за пределами нового охвата никакой обрезки растра не происходит. Может сами проверить это, сокращая охват
r
на значения, меньшие 0.5.Как только центр ячейки окажется за пределами сократившегося охвата, эта ячейка исчезнет их растра:
new_ext <- ext(r) - 0.51
r_crp <- crop(r, new_ext)
# class : SpatRaster
# dimensions : 2, 2, 1 (nrow, ncol, nlyr)
# resolution : 1, 1 (x, y)
# extent : 1, 3, 1, 3 (xmin, xmax, ymin, ymax)
# name : lyr.1
# min value : 6
# max value : 11
compareGeom(r, r_crp)
# Ошибка: [compareGeom] extents do not match
Исходный растр 4 х 4, потеряв граничные ячейки, превратился в растр размера 2 х 2.
#R
На всякий случай напомним, что в закрепе есть ссылка на пост Работа с пространственными данными в R. Там собираются все наши публикации по этой теме.
Суда, проходящие через Баб-эль-Мандебский пролив, показаны на снимке Sentinel-1A, сделанном 18 декабря 2022 года (относительная орбита 116, поляризация VV).
#снимки
#снимки
Forwarded from Space Energy
💫 Компания Space Energy провела успешные летные испытания прототипа суборбитальной ракеты «Чайка» 🚀
Прототип представляет собой одноступенчатую твердотопливную ракету для тестирования телеметрии, парашютных систем спасения ступени и системы связи для поиска. Все системы отработали штатно.
В процессе полета бортовые телеметрические системы производили сбор всех параметров непрерывно и без сбоев. Корпус ракеты, двигатель, стабилизаторы, внутренние компоненты выполнены из легких и сверхпрочных композитных материалов.
Это первый запуск частной космической компании на Дальнем Востоке. Дальнейшие испытания запланированы на весну 2024 года.
Прототип представляет собой одноступенчатую твердотопливную ракету для тестирования телеметрии, парашютных систем спасения ступени и системы связи для поиска. Все системы отработали штатно.
В процессе полета бортовые телеметрические системы производили сбор всех параметров непрерывно и без сбоев. Корпус ракеты, двигатель, стабилизаторы, внутренние компоненты выполнены из легких и сверхпрочных композитных материалов.
Это первый запуск частной космической компании на Дальнем Востоке. Дальнейшие испытания запланированы на весну 2024 года.