Спутник ДЗЗ
3.44K subscribers
2.64K photos
145 videos
202 files
2.39K links
Человеческим языком о дистанционном зондировании Земли.

Обратная связь: @sputnikDZZ_bot
加入频道
Карты лугов мира 2000–2022 гг.

Лаборатория Land & Carbon Lab создала исследовательский консорциум Global Pasture Watch для подготовки данных, которые помогут в мониторинге лугов и пастбищ.

Уже доступны 📸 карты лугов мира с 2000 г. по 2022 г. — 🗺 Annual 30-m maps of global grassland class and extent (2000–2022). В будущем планируется ежегодно пополнять эти данные.

🌍 Данные на Google Earth Engine
🖥 Исходный код для создания карт на GitHub
📖 Статья с описанием методики

Land & Carbon Lab собирается создать еще три набора данных:

GLD-1km: Глобальные карты плотности поголовья скота c разрешением 1 км
GSVH-30m: Глобальные карты высоты короткой растительности (разрешение 30 м)
GGPP-30m: Глобальные карты валовой первичной продуктивности (30 м).

#данные #луга #растительность #GEE
This media is not supported in your browser
VIEW IN TELEGRAM
Свертка или пространственная фильтрация изображений в GEE

Линейная свертка изображения 📸 — это обработка изображения с помощью скользящей маски, которая представляет собой заданную квадратную матрицу. После свертки, каждый пиксель изображения представляет собой линейную комбинацию значений маски и пикселей исходного изображения, покрытых маской. Матрицу-маску называют также фильтром, ядром, окном или шаблоном. Элементы маски принято называть коэффициентами. Операцию свертки называют также пространственной фильтрацией изображения.

“Пространственная фильтрация” и “фильтр”, на наш взгляд, самые удачные термины. Но в Google Eearth Engine вместо них приняты “свертка” и “ядро”. Термины эти используются в названиях функций GEE, так что вместо сглаживающего фильтра будет сглаживающее ядро, а вместо фильтрации — свертка.

Теорию можно найти в 📖 Гонсалес Р., Вудс Р. Цифровая обработка изображений (любое издание, раздел 3.4. “Основы пространственной фильтрации”).

А мы продолжим так как будто всем все известно.

#GEE
GEE-47. Свертка (пространственная фильтрация)

Линейная свертка изображений выполняется функцией image.convolve(). Единственным аргументом convolve является ядро свертки ee.Kernel, которое задается 1) формой и 2) коэффициентами (весами).

Ядра применяются по отдельности к каждому слою изображения.

Применим сглаживающее (низкочастотное) ядро 15x15 для удаления высокочастотной информации со снимка Landsat 8:

// Загружаем снимок.
var image = ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318');
Map.setCenter(-121.9785, 37.8694, 11);
Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'input image');

// Задаем ядро (фильтр) - boxcar.
var boxcar = ee.Kernel.square({
radius: 7, units: 'pixels', normalize: true
});

// Выполняем свертку (фильтрацию).
var smooth = image.convolve(boxcar);
Map.addLayer(smooth, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'smoothed');


📸 Снимок Landsat 8 (ложноцветовой композит) после свертки со сглаживающим ядром. Бухта Сан-Франциско, шт. Калифорния (США).

Аргументы ядра определяют его размер и коэффициенты. В частности, если параметр units установлен в pixels, то radius задает количество пикселей от центра, которое будет покрыто ядром. Если параметр normalize имеет значение true, то коэффициенты ядра будут равны единице. Если задан параметр magnitude, то коэффициенты ядра будут умножены на значение этого параметра (если при этом normalize равен true, то коэффициенты ядра будут равны magnitude). Если в каком-либо из коэффициентов ядра есть отрицательное значение, то установка normalize в true приведет к тому, что коэффициенты будут равны нулю.

#GEE
GEE-47. Свертка (продолжение)

Чтобы достичь нужного эффекта для обработки изображений используют разные ядра. Так, оператор Лапласа (ee.Kernel.laplacian8) применяется для обнаружения изотропных краев:

// Задаем ядро для детектирования краев изрображения.
var laplacian = ee.Kernel.laplacian8({ normalize: false });

// Применяем свертку.
var edgy = image.convolve(laplacian);
Map.addLayer(edgy,
{bands: ['B5', 'B4', 'B3'], max: 0.5, format: 'png'},
'edges');


📸 Снимок Landsat 8 после свертки с ядром обнаружения краев.

Обратите внимание на спецификатор формата в параметрах визуализации. GEE отправляет тайлы для отображения в Code Editor в формате JPEG. Однако краевые тайлы отправляются в формате PNG, для обработки прозрачности пикселей за границами изображения. Установка формата в PNG позволит сгладить “швы” на границах тайлов.

Существуют анизотропные ядра для обнаружения краев, направление которых можно изменить с помощью функции kernel.rotate(). Низкочастотные ядра включают гауссово ядро и ядра различной формы с равномерными весами.

Чтобы создать ядро с произвольно заданными весами и формой, используйте ee.Kernel.fixed(). Следующий код создает ядро 9x9 из единиц с нулем в центре:

// Список весов для ядра 9x9.
var row = [1, 1, 1, 1, 1, 1, 1, 1, 1];
// В центре ядра - 0.
var centerRow = [1, 1, 1, 1, 0, 1, 1, 1, 1];
// Создаем список списков - матрицу ядра 9x9.
var rows = [row, row, row, row, centerRow, row, row, row, row];
// Создаем ядро по готовым весам.
var kernel = ee.Kernel.fixed(9, 9, rows, -4, -4, false);
print(kernel);


#GEE
Открытые гиперспектральные данные Wyvern

Wyvern Open Data (https://opendata.wyvern.space) предоставляет бесплатные гиперспектральные снимки, сделанные спутниковой группировкой канадской компании Wyvern. Данные предоставляются на условиях лицензии Creative Commons (CC BY 4.0), что обеспечивает неограниченный доступ к ним при надлежащем указании авторства.

В настоящее время доступны избранные снимки спутника Dragonette-001 — 23 канала в видимом и ближнем инфракрасном диапазоне. Уровень обработки данных: L1B.

В Центре знаний Wyvern (https://knowledge.wyvern.space/) опубликованы учебные пособия по работе с данными Wyvern в ENVI, QGIS и ArcGIS, а также на языке Python.

🌍 Данные Wyvern на Google Earth Engine
🌍 Wyvern Open Data Explorer — приложение Google Earth Engine. Можно посмотреть разные комбинации каналов и спектральные сигнатуры классов земной поверхности.

📝Awesome Hyperspectral (https://github.com/Nrevyw/awesome-hyperspectral) — коллекция программ, статей, источников данных и учебных пособий для работы с гиперспектральными снимками.

#гиперспектр #данные #GEE
This media is not supported in your browser
VIEW IN TELEGRAM
ESA CCI Global Forest Above Ground Biomass v5.01

Обновились открытые данные о надземной биомассе лесов — ESA CCI Global Forest Above Ground Biomass. Добавлены оценки биомассы (AGB) за 2015, 2016 и 2021 годы, соответствующие им карты стандартных отклонений AGB, а также карты изменений AGB между двумя последовательными годами.

Данные находятся:

🛢 в архиве CEDA
🌍 на Google Earth Engine: ESA CCI Global Forest Above Ground Biomass v5.01

📖 Santoro, M.; Cartus, O. (2024): ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2015, 2016, 2017, 2018,
2019, 2020 and 2021, v5.01. NERC EDS Centre for Environmental Data Analysis, 22 August 2024. doi:10.5285/bf535053562141c6bb7ad831f5998d77.

#AGB #лес #данные #GEE
This media is not supported in your browser
VIEW IN TELEGRAM
Открытые данные тепловой стратосферной съемки Urban Sky

Компания Urban Sky предоставила свободный доступ к избранным данным тепловой инфракрасной съемки высокого разрешения, полученным со стратосферной платформы Microballoon во время пожаров в Лос-Анджелесе.

Платформа Microballoon работает на высоте 15–21 км. Данные содержат RGB-снимки в видимом диапазоне с пространственным разрешением 10 см и снимки в длинноволновом инфракрасном диапазоне (LWIR) с разрешением 3 м.

🌍 Данные Urban Sky на Google Earth Engine

#данные #LST #пожары #GEE #псевдоспутник
This media is not supported in your browser
VIEW IN TELEGRAM
Global Long-term Microwave Vegetation Optical Depth Dataset Archive VODCA v2

Оптическая толщина растительности (Vegetation Optical Depth, VOD) — величина, которая характеризует ослабление электромагнитного излучения в растительном пологе за счет его поглощения и рассеяния. Обычно VOD измеряется в микроволновом диапазоне.

VOD зависит от многих факторов. В частности, она напрямую связана с содержанием воды в растительном пологе.

Данные VODCA v2 содержат два набора данных: VODCA CXKu и VODCA L.

🔹 VODCA CXKu объединяет данные наблюдений датчиков в C-, X- и Ku-диапазонах, включая SSM/I F08, F11, F13, F17, TRMM TMI, AMSR-E, Windsat, AMSR2 и GPM GMI. Это ежедневные данные с пространственным разрешением 0,25° и временным охватом 1987–2021 гг.
🔹 VODCA L объединяет наблюдения VOD со SMOS MIRAS и радиометра SMAP. Периодичность данных 10 суток, пространственное разрешение — 0,25°, временной охват — 2010–2021 гг..

В VODCA v2 маскированы ошибки наблюдений, вызванные замерзшей землей, снегом и радиочастотными помехами. Данные созданы с использованием новой схемы взвешенного слияния, основанной на автокорреляции первого порядка исходных наборов данных.

🌍 На Google Earth Engine данные представлены в виде двух коллекций: VODCA CXKu и VODCA L.

#данные #GEE
Бесшовные композиты данных Landsat 7 и Landsat 8, охватывающие Амазонию

В статье предложен метод создания бесшовных безоблачных композитов спутниковых данных на основе медоидов и созданы композиты данных Landsat 7 и Landsat 8, покрывающие территорию Амазонии в 2013–2021 гг. Данные получены и обработаны с помощью Google Earth Engine (GEE).

🛢 Данные: Amazonian Landsat 7 ETM+ and Landsat 8 OLI composites July to October 2013 to 2021

📊 Схема обработки данных Landsat

🌍 Код GEE для обработки данных:

🔹 Landsat 7
🔹 Landsat 8

#данные #бразилия #GEE #landsat
EU Deforestation Regulation и Whisp

Правила ЕС по борьбе с обезлесением, EU Deforestation Regulation (EUDR), требуют от компаний, торгующих крупным рогатым скотом, какао, кофе, масличной пальмой, каучуком, соей и древесиной, а также продукцией, полученной из этих товаров, проверять цепочки создания стоимости, чтобы убедиться, что товары не являются результатом недавнего (после 31 декабря 2020 года) обезлесения, деградации лесов или нарушения местного экологического и социального законодательства.

Под обезлесением (deforestation) в EUDR понимается перевод лесов в сельскохозяйственные угодья. Деградация леса (forest degradation) означает превращение первичных лесов или естественно восстанавливающихся лесов в плантационные леса или в другие лесные угодья.

EUDR вступают в силу 30 декабря 2025 года (для крупных и средних компаний). С этого момента компании, размещающие соответствующую продукцию на рынке ЕС, берут на себя ответственность за соответствие продукции требованиям EUDR.

Оставим в стороне “узкие места” EUDR, а также возможную политизированность этих правил (компании из списка стран, который должна составить Еврокомиссия, будут проходить проверку соответствия требованиям EUDR по упрощенной процедуре). Ясно, что для проверки требований EUDR понадобятся данные дистанционного зондирования.

Так, для проверки deforestation (будем писать так, имея в виду определение обезлесения, принятое в EUDR) понадобится карта лесов по состоянию на 31 декабря 2020 года. Такая карта позволит показать, что продукция не была получена из районов, которые были покрыты лесом до указанной даты. Для проверки forest degradation понадобится карта первичных и естественно восстанавливающихся лесов на 31 декабря 2020 года. Кроме того, понадобятся регулярно обновляемые карты нарушений лесного покрова.

Подобных карт существует много и все они содержат ошибки. Чтобы уменьшить число ошибок, был предложен подход Whisp (“What is in that plot”), в котором выводы делаются на основании взвешенной суммы оценок, полученных из всех имеющихся открытых наборов данных (карт).

🖥 Whisp — открытое решение, разработанное под зонтиком Open Foris (https://openforis.org).

📖 Описание: D’Annunzio, R. et al. 2024. Towards a digital public infrastructure for deforestation-related trade regulations - What is in that plot? (Whisp) solution to implement convergence of evidence. Rome, FAO. https://doi.org/10.4060/cd0957en

🌍 📸 Демка: Whisp on EarthMap

📊 Whisp в табличном виде: Whisp Dashboards

Ну и конечно:

🔗 Данные, которые использует Whisp для оценки риска обезлесения.

#лес #данные #GEE
This media is not supported in your browser
VIEW IN TELEGRAM
Непрерывные спутниковые данные о ночной освещенности

Регулярные измерения ночной освещенности из космоса проводились спутниками американской военной метеорологической программы Defense Meteorological Satellite Program (приборы Operational Linescan System) и продолжили осуществляться с помощью приборов Visible Infrared Imaging Radiometer Suite (VIIRS) уже на гражданских метеоспутниках NOAA.

1️⃣ Кросс-сенсорная калибровка двух этих наборов данных позволила получить непрерывные данные о ночной освещенности Global NPP-VIIRS-like nighttime light (2000–2023), которые можно использовать для мониторинга динамики демографической и социально-экономической активности.

🌍 Global NPP-VIIRS-like nighttime light (2000–2023) на GEE

📖 Chen Z. et al. An extended time series (2000–2018) of global NPP-VIIRS-like nighttime light data from a cross-sensor calibration, Earth Syst. Sci. Data, 13, 889–906, https://doi.org/10.5194/essd-13-889-2021, 2021.

2️⃣ В данных Global Annual Simulated NPP-VIIRS Nighttime Light Dataset (1992–2023) кросс-сенсорная калибровка выполнялась с помощью нейросети архитектуры U-Net (NTLSRU-Net). В результате удалось получить данные, охватывающие 32 года наблюдений, с пространственным разрешением 15’’ (~500 м). Они обеспечивает глобальное покрытие от -180° до 180° долготы и от 65° ю.ш. до 75° с.ш. широты.

🌍 Global Annual Simulated NPP-VIIRS Nighttime Light Dataset (1992–2023) на GEE

📖 Chen X. et al. Q. (2024). A global annual simulated VIIRS nighttime light dataset from 1992 to 2023. Scientific Data, 11(1380). https://doi.org/10.1038/s41597-024-04228-6

#GEE #данные #dnb
GEE-48. Функциональное программирование в Earth Engine

Google Earth Engine (GEE) использует параллельную обработку данных на большом количестве машин. Чтобы обеспечить такую обработку, GEE использует приемы, принятые в функциональном программировании.

Основная концепция, которая отличает функциональное программирование от процедурного, — функции без побочных эффектов. Такие функции не используют данные, находящиеся за пределами функции, и не обновляют их.

Посмотрим как можно переработать задачу так, чтобы она решалась с помощью функций без побочных эффектов.

Циклы for. В GEE не рекомендуется использовать циклы for. Вместо циклов используем операцию map(). Внутри map() указываем функцию, которая независимо применяется к каждому элементу коллекции. Это позволит GEE распределять обработку по разным машинам.

Ниже показано, как при помощи map() создать из списка чисел список с квадратами этих чисел:

// Создаем список чисел от 1 до 10.
var myList = ee.List.sequence(1, 10);

// Задаем функцию, которая будет применяться
// к каждому числу из списка.
var computeSquares = function(number) {
// Возведение в степень с помощью GEE API.
return ee.Number(number).pow(2);
};

// Применим функцию computeSquares к каждому
// элементу списка myList с помощью map().
var squares = myList.map(computeSquares);

print(squares); // [1, 4, 9, 16, 25, 36, 49, 64, 81]


Условный оператор if. Другой распространенной проблемой, с которой сталкиваются пользователи, привыкшие процедурному программированию, является применение условного оператора if в GEE. Он как бы есть (ee.Algorithms.If()), но его лучше не использовать.

Вместо условного оператора рекомендуется использовать фильтры и map().

Допустим, в приведенном выше примере нужно вычислить квадраты только нечетных чисел. Рассмотрим функциональный подход к решению этой задачи:

// Функция-фильтр, разделяющая четные и нечетные числа.
var getOddNumbers = function(number) {
// Преобразуем число в ee.Number,
// чтобы потом применить mod.
number = ee.Number(number);
// Возвращает 0 если число четное и 1, если оно нечетное.
var remainder = number.mod(2);
// Вместо четных чисел возвращаются нули,
// а вместо нечетных - сами эти числа.
return number.multiply(remainder);
};

// Преобразуем myList в список,
// где четные числа заменены нулями.
var newList = myList.map(getOddNumbers);

// Удалим из списка нули.
var oddNumbers = newList.removeAll([0]);

var squares = oddNumbers.map(computeSquares);

print(squares); // [1, 9, 25, 49, 81]


Если вы хотите применить к коллекции алгоритм, основанный на некотором условии, нужно отфильтровать коллекцию по этому условию, а затем для каждого из полученных подмножеств использовать свою функцию map(). Это позволит системе распараллелить операцию.

// Импортируем коллекцию снимков Landsat 8 TOA за 2018 год.
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterDate('2018-01-01', '2019-01-01');

// Разделим ее на два подмножества,
// в зависимости от угла возвышения Солнца.
var subset1 = collection.filter(ee.Filter.lt('SUN_ELEVATION', 40));
var subset2 = collection.filter(ee.Filter.gte('SUN_ELEVATION', 40));

// Применим к каждому подмножеству свою функцию:
// снимки из subset1 умножим на 2;
// снимки subset2 оставим без изменений.
var processed1 = subset1.map(function(image) {
return image.multiply(2);
});
var processed2 = subset2;

// Объединим коллекции в одну.
var final = processed1.merge(processed2);

print('Original collection size', collection.size());
print('Processed collection size', final.size());


#GEE
GEE-48. Функциональное программирование в Earth Engine (продолжение)

Кумулятивная итерация. Чтобы выполнить последовательность операций, в которой результат каждой итерации используется последующей итерацией, можно использовать метод iterate().

❗️ iterate() выполняется последовательно и, следовательно, для "больших" операций будет работать медленно. Используйте его только тогда, когда не можете применить map() и фильтры.

Создадим с помощью iterate() последовательность чисел Фибоначчи. Каждое число в этой последовательности является суммой двух предыдущих чисел. iterate() принимает два аргумента: функцию (алгоритм) и начальное значение. Самой функции также передаются два значения — текущее значение в итерации и результат предыдущей итерации.

var Fibonacci = function(current, previous) {
previous = ee.List(previous);
var n1 = ee.Number(previous.get(-1));
var n2 = ee.Number(previous.get(-2));
return previous.add(n1.add(n2));
};

// Вычислим 10 итераций.
var numIteration = ee.List.repeat(1, 10);
var start = [0, 1];
var sequence = numIteration.iterate(Fibonacci, start);

print(sequence);
// [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]


Примеры взяты отсюда.

#GEE