Коллекции изображений

Коллекция изображений — это набор изображений Earth Engine. Например, коллекция всех изображений Landsat 8 — это ee.ImageCollection . Как и изображение SRTM, с которым вы работали, коллекции изображений также имеют идентификатор. Как и в случае с отдельными изображениями, идентификатор коллекции изображений можно узнать, выполнив поиск в каталоге данных Earth Engine в редакторе кода и открыв страницу сведений о наборе данных. Например, выполните поиск по запросу «landsat 8 toa» и нажмите на первый результат, который должен соответствовать набору данных USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance . Либо импортируйте этот набор данных с помощью кнопки «Импорт» и переименуйте его в l8 , либо скопируйте идентификатор в конструктор коллекций изображений:

Редактор кода (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

Фильтрация коллекций изображений

Стоит отметить, что эта коллекция представляет все сцены, собранные Landsat 8 по всей Земле. Часто бывает полезно извлечь одно изображение или подмножество изображений для тестирования алгоритмов. Чтобы ограничить коллекцию по времени или пространству, можно применить фильтр. Например, чтобы отфильтровать коллекцию по изображениям, охватывающим определённое местоположение, сначала определите интересующую область точкой (линией или полигоном) с помощью инструментов рисования геометрии. Переместите курсор в интересующую область, наведите курсор на значок импорта геометрии (если у вас уже определена одна или несколько геометрий) и нажмите кнопку «+новый слой» (если у вас нет импортированных геометрий, перейдите к следующему шагу). Получите инструмент рисования точек ( ) и отметьте точку в интересующей вас области. Присвойте point импорта имя . Теперь отфильтруйте коллекцию l8 , чтобы получить только изображения, пересекающие эту точку, а затем добавьте второй фильтр, чтобы ограничить коллекцию только изображениями, полученными в 2015 году:

Редактор кода (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

Здесь filterBounds() и filterDate() — это сокращённые методы для более общего метода filter() для коллекций изображений, который принимает в качестве аргумента объект ee.Filter() . Подробнее об этих методах можно узнать на вкладке «Документация» в редакторе кода. Аргумент filterBounds() — это оцифрованная точка, а аргументы filterDate() — две даты, выраженные строками.

Обратите внимание, что вы можете print() . Нельзя распечатать более 5000 элементов одновременно, поэтому, например, вы не сможете распечатать всю коллекцию l8 . После выполнения метода print() вы можете просмотреть распечатанные коллекции в консоли. Обратите внимание, что при распаковке ImageCollection с помощью zippy ( ), затем разверните список features , и вы увидите список изображений, каждое из которых также можно развернуть и изучить. Это один из способов узнать идентификатор отдельного изображения. Другой, более программный способ получить отдельные изображения для анализа — отсортировать коллекцию, чтобы получить самое последнее, самое старое или оптимальное изображение относительно некоторого свойства метаданных. Например, изучая объекты изображений в коллекциях распечатанных изображений, вы могли заметить свойство метаданных CLOUD_COVER . Вы можете использовать это свойство, чтобы получить наименее облачное изображение в 2015 году в интересующей вас области:

Редактор кода (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

Теперь вы готовы отобразить изображение!

Отступление: Отображение RGB-изображений

При добавлении многоканального изображения на карту Earth Engine выбирает первые три канала изображения и отображает их по умолчанию как красный, зелёный и синий, растягивая их в соответствии с типом данных, как описано ранее . Обычно это не работает. Например, если добавить на карту снимок Landsat ( scene из предыдущего примера), результат будет неудовлетворительным:

Редактор кода (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

Обратите внимание, что сначала карта центрируется на изображении с масштабом 9. Затем изображение отображается с пустым объектом ( {} ) для параметра visParams (подробности см. в документации Map.addLayer() ). В результате изображение отображается с визуализацией по умолчанию: первые три канала соответствуют R, G, B соответственно и растянуты до [0, 1], поскольку каналы имеют тип данных float . Это означает, что полоса прибрежного аэрозоля ('B1') отображается красным цветом, синяя полоса ('B2') отображается зеленым цветом, а зеленая полоса ('B3') отображается синим цветом. Чтобы отобразить изображение как композитное в истинной цветовой гамме, необходимо указать Earth Engine использовать каналы Landsat 8: 'B4', 'B3' и 'B2' для R, G и B соответственно. Укажите, какие каналы использовать, с помощью свойства bands объекта visParams . Дополнительную информацию о диапазонах Landsat можно найти по этой ссылке .

Также необходимо указать min и max значения, подходящие для отображения коэффициента отражения от типичных объектов на поверхности Земли. Хотя для каждого диапазона можно использовать списки, в данном случае достаточно указать max 0.3 и использовать значение по умолчанию (ноль) для min параметра. Объединение параметров визуализации в один объект и отображение:

Редактор кода (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

Результат должен выглядеть примерно так, как показано на рисунке 5. Обратите внимание, что этот код присваивает объект параметров визуализации переменной для возможного использования в будущем. Как вы скоро обнаружите, этот объект пригодится при визуализации коллекций изображений!

Tutorial_api_05_true_color.png
Рисунок 5. Изображение отражения Landsat 8 TOA в виде композитного изображения с истинными цветами, растянутого до [0, 0,3].

Попробуйте поэкспериментировать с визуализацией разных полос. Ещё одна излюбленная комбинация — «B5», «B4» и «B3», которая называется композитом с ложными цветами. Некоторые другие интересные композиты с ложными цветами описаны здесь .

Поскольку Earth Engine предназначен для масштабного анализа, вы не ограничены работой только с одной сценой. Теперь пришло время отобразить целую коллекцию в виде RGB-композиции!

Отображение коллекций изображений

Добавление коллекции изображений на карту аналогично добавлению изображения на карту. Например, используя изображения 2016 года из коллекции l8 и объект visParams , определённый ранее,

Редактор кода (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

Обратите внимание, что теперь вы можете уменьшить масштаб и увидеть непрерывную мозаику, где собраны снимки Landsat (т.е. над сушей). Также обратите внимание, что при нажатии на изображение на вкладке «Инспектор» в разделе «Пиксели» вы увидите список значений пикселей (или диаграмму), а в разделе «Объекты» инспектора — список объектов изображения.

Если вы достаточно уменьшили масштаб, вы, вероятно, заметили облака на мозаике. При добавлении ImageCollection на карту она отображается как составная карта с последними значениями, то есть отображаются только самые последние пиксели (как при вызове mosaic() для коллекции). Именно поэтому вы можете видеть разрывы между траекториями , полученными в разное время. Именно поэтому многие области могут выглядеть облачными. На следующей странице вы узнаете, как изменить способ композиции изображений, чтобы избавиться от этих надоедливых облаков!