GEE-10. Библиотека Awesome Spectral Indices
Код примера
В прошлый раз мы вычисляли вегетационные индексы. Есть способ сделать это еще проще — с помощью библиотеки Awesome Spectral Indices (документация).
Создадим коллекцию снимков Sentinel-2 L2A, покрывающих интересующий район (ROI — region of interest):
Зададим параметры для расчета индексов. Мы хотим рассчитать NDVI, NDWI и EVI. Для этого понадобится несколько каналов и числовых констант.
Список спектральных индексов можно посмотреть здесь. В списке приведена формула, каждой букве которой мы сопоставим канал или число.
2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))
А вот как она выглядит в списке:
g * ((N - R) / (N + C1 * R - C2 * B + L))
Думаю, принцип понятен. Зеленый канал нужен нам для расчета NDWI.
#GEE #индексы
Код примера
В прошлый раз мы вычисляли вегетационные индексы. Есть способ сделать это еще проще — с помощью библиотеки Awesome Spectral Indices (документация).
Создадим коллекцию снимков Sentinel-2 L2A, покрывающих интересующий район (ROI — region of interest):
var col = ee.ImageCollection('COPERNICUS/S2_SR')Вычислим медиану коллекции и обрежем ее по границам ROI. Медиана коллекции — снимок, каналы которого являются медианами соответствующих каналов коллекции (вычисления в каждом канале происходят попиксельно). В итоге получим некий типичный летний снимок Небраски.
.filterDate('2021-06-01', '2021-09-01')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10))
.filter(ee.Filter.bounds(ROI))
.select('B.*');
var image = col.median().clip(ROI);Загружаем библиотеку Awesome Spectral Indices. Путь к ней указан в параметре функции
require
.var spectral = require("users/dmlmont/spectral:spectral");Awesome Spectral Indices — сторонняя библиотека. Она создана не разработчиками Earth Engine, а пользователем с ником
dmlmont
. Вы можете создать свою библиотеку и загрузить ее на GEE, но об этом поговорим позже. Сейчас же масштабируем значения пикселей.var image = spectral.scale(image, "COPERNICUS/S2_SR");Помните, у нас была функция
applyScaleFactors
для масштабирования значений пикселей? scale
из библиотеки spectral
делает то же самое.Зададим параметры для расчета индексов. Мы хотим рассчитать NDVI, NDWI и EVI. Для этого понадобится несколько каналов и числовых констант.
Список спектральных индексов можно посмотреть здесь. В списке приведена формула, каждой букве которой мы сопоставим канал или число.
var parameters = {Вот формула для расчета EVI:
"N": image.select("B8"),
"R": image.select("B4"),
"G": image.select("B3"),
"B": image.select("B2"),
"L": 1,
"g": 2.5,
"C1": 6,
"C2": 7.5
};
2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))
А вот как она выглядит в списке:
g * ((N - R) / (N + C1 * R - C2 * B + L))
Думаю, принцип понятен. Зеленый канал нужен нам для расчета NDWI.
spectral.computeIndex
вычисляет индексы по списку и добавляет к снимку.var image = spectral.computeIndex(image, ["NDVI","NDWI","EVI"], parameters);Для GEE Python API есть несколько библиотек, реализующих расчет спектральных индексов.
#GEE #индексы