Спутник ДЗЗ
3.69K subscribers
2.79K photos
153 videos
210 files
2.55K links
Человеческим языком о дистанционном зондировании Земли.

Обратная связь: @sputnikDZZ_bot
加入频道
Обложка журнала, посвященная космическому полёту Валентины Терешковой
GEE-17. Температура земной поверхности по данным Landsat

Снимки USGS Landsat 8 Level 2, Collection 2, Tier 1 дают температуру поверхности Земли в градусах Кельвина (канал "ST_B10"). Данные о температуре поверхности используется в исследованиях глобального энергетического баланса, гидрологическом моделировании, для мониторинга состояния сельскохозяйственных культур и растительности, а также в анализе экстремальных тепловых явлений — стихийных бедствий (извержений вулканов, лесных пожаров) и городских островов тепла.

Детали алгоритма расчета температуры земной поверхности можно найти в разделе 4.7 Landsat 8-9 Calibration and Validation (Cal/Val) Algorithm Description Document (ADD).

Код примера: https://code.earthengine.google.com/104898cddab0dc7b560556fc5bf44b95

Для заданного района bbox отберем самый малооблачный снимок:

var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(bbox)
.filterDate('2021-05-01', '2021-08-01')
.sort('CLOUD_COVER');
var image = dataset.first();


Применим к значениям каналов масштабирование с коэффициентами Scale и Offset (для каждого канала они указаны здесь). После этого, канал "ST_B10" даст температуру в Кельвинах, а мы переведем ее в градусы Цельсия. Все описанное выполняет функция:

  
function applyScaleFactors(image) {
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
thermalBands = thermalBands.subtract(273.15);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true);
}


Дальше отобразим результат на карте. Он показан ниже.

#GEE #LST
Температура земной поверхности на территории штата Невада, по снимку Landsat 8 LC08_040033_20210613.
Тренинги NASA ARSET

NASA Applied Remote Sensing Training Program (ARSET) проводит тренинги для начинающих и опытных специалистов в области дистанционного зондирования Земли.

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

Очные тренинги большинству из нас вряд ли светят, а вот онлайновые могут очень даже пригодится. Тренинги рассчитаны на разные уровни подготовки: beginner, intermediate, advanced. На странице выбранного тренинга описано, что нужно знать или сделать перед началом занятий (в разделе Prerequisites, пример).

Список доступных онлайновых тренингов. В каждом есть видео и слайды. Часто есть упражнения. Языки: английский (всегда) и испанский.

Все тренинги ARSET на YouTube.

В отличие от RUS Copernicus Training, у ARSET не предоставляют виртуальных машин, зато:

* тренинги рассчитаны на разные уровни подготовки специалистов. У RUS Copernicus они больше ориентированы на начинающих;
* тренинги сгруппированы в микрокурсы, то есть можно сразу увидеть направление развития;
* данные, порталы и софт, которые используют на тренингах, не обязательно имеют отношение к NASA. В RUS Copernicus ограничивались данными европейских спутников Sentinel.

Никакого отношения к NASA ARSET наш канал не имеет. Просто мы не раз использовали их материалы, и они нам были полезны. Вот, делимся.

#обучение
Милые дамы!
Поздравляем с Международным женским днем.
Сегодня праздник и думать о серьезном не хочется. Хочется просто поделится красотой.

Вот два композитных снимка одного региона: оптический и радарный. Красный канал каждого составлен из данных апреля, зеленый — июня, синий — августа.

Оптика: Sentinel-2, канал B8 (ближний инфракрасный), код.

Радар: Sentinel-1, VV-поляризация, код.

Внимание! На создание и экспорт композита может понадобиться 15–20 минут.
Forwarded from the Glimpses
🦉 Длинохвостая неясыть пережидает снегопад.
Чем заняться в снегопад, если ты неясыть? Дремать, стряхивать снежинки и, конечно же, кривляться для фотографов 🙂
📍 Санкт-Петербург, Елагин остров, ЦПKиО
📷 @the_glimpses
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
GEE-18. Маскирование облаков: первое знакомство

До сих пор облака на снимках мы игнорировали. Старались выбирать снимки, где облаков мало или нет совсем. Но при таком подходе пропадает много данных, которые можно было бы использовать, удалив из них облака. Этим мы сейчас и займемся.

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

Вместе со снимками Sentinel-2 Surface Reflectance поставляется сразу два вида масок. Их мы и рассмотрим.

Код примера: https://code.earthengine.google.com/467bda21cbbfe7030597c8f242ef9cd8

Маска качества данных QA60 досталась в наследство от данных 1-го уровня обработки (Sentinel-2 L1C). Алгоритм ее построения описан здесь. “60” в имени маски — это ее пространственное разрешение (60 м). Маска QA60 — битовая. Бит 10 в ней отвечает за непрозрачные облака: если он равен 0, то облаков нет, если 1 — облака есть. Бит 11 отвечает за тонкие перистые облака или cirrus (с разными видами облаков можно познакомиться здесь).

Возьмем маску качества и построим слои clouds и cirrus, состоящие только из чистых пикселей, в которых облака и cirrus отсутствуют (по “мнению” QA60, разумеется). Используя полученные слои в качестве масок, удалим оба вида облаков:

var QA = image.select("QA60");

var clouds = QA.bitwiseAnd(Math.pow(2, 10)).eq(0);
var cirrus = QA.bitwiseAnd(Math.pow(2, 11)).eq(0);

// Снимок с удаленными облаками.
var image_qa60 = image.updateMask(clouds).updateMask(cirrus);

Чтобы показать на карте только облака, инвертируем маску clouds (напомним, что она состоит из безоблачных пикселей):

Map.addLayer(clouds.not().selfMask(),{palette: ['blue']}, "QA60 Cloud mask", false);

Маска QA60 — простая, считается быстро, но дает посредственное качество удаления облаков.

#GEE
Облака показаны синим цветом, а cirrus — оранжевым.

Справа на снимке находятся две горы, покрытые снегом. Они помогают проверить способность алгоритмов удаления облачности различать облака и снег.
Маски MSK_CLDPRB (Cloud Probability Map) и SCL (ScenCLassification Table) появились уже в продуктах Sentinel-2 SR, то есть в данных 2-го уровня обработки (подробности здесь). Значения MSK_CLDPRB дают вероятность того, что в соответствующем пикселе находится облако.

Выделим пиксели, вероятность облачности которых меньше 5%:

var cloudProb = image.select('MSK_CLDPRB');
var cloudsSR = cloudProb.lt(5);

Расположение сirrus описано в маске SCL. Это — карта, разбивающая пиксели снимка на классы. Каждому классу соответствует свое значение https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR#bands на карте SCL. Перистым облакам соответствует значение SCL=10, теням от облаков — SCL=3. В QA60 теней облаков не было, сейчас отмаскируем и их:

var scl = image.select('SCL');
var cirrusSR = scl.eq(10); // 10 = cirrus
var shadowSR = scl.eq(3); // 3 = cloud shadow

// Маскируем облака, cirrus и тени.
var image_SR = image.updateMask(cloudsSR).updateMask(cirrusSR.not()).updateMask(shadowSR.not());

#GEE
Облака показаны фиолетовым, cirrus — красным, а тени облаков — желтым цветом.

Видно, что эта маска работает гораздо лучше прежней, хотя до совершенства ей далеко.

Например, порог вероятности облачности взят слишком агрессивным — удалено много лишних пикселей. Это — типичная проблема работы с масками облачности: нельзя указать глобальное значение порога. Порог подбирается локально, для конкретной сцены, так что бы разделить облака и бликующие объекты на земной поверхности.

Эту маску уже можно применять на практике. Есть более совершенные маски, и с одной из них мы позже познакомимся. Но они считаются гораздо дольше.

Код примера: https://code.earthengine.google.com/467bda21cbbfe7030597c8f242ef9cd8