Вычисления с использованием изображений

Теперь, когда вы знаете, как загружать и отображать изображение, пора применить к нему вычисление. Например, вы можете вычислить уклон рельефа, передав изображение рельефа SRTM методу slope пакета ee.Terrain .

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

// Load the SRTM image.
var srtm = ee.Image('CGIAR/SRTM90_V4');

// Apply an algorithm to an image.
var slope = ee.Terrain.slope(srtm);

// Display the result.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.
Map.addLayer(slope, {min: 0, max :60}, 'slope');

Обратите внимание, что в коде ee.Terrain.slope(srtm) изображение srtm передается в качестве аргумента алгоритму уклона. Результат должен выглядеть примерно так, как показано на рисунке 3.

Tutorial_api_03_slope.png
Рисунок 3. Изображение склона.

Математика изображений

В классе ee.Image также есть методы, которые можно вызывать для объекта изображения. Например, предположим, что вы хотите выполнить математические операции с полосами изображения (иногда называемыми полосовой математикой или алгеброй карт ). Например, вас могут заинтересовать тригонометрические операции над изображением с соотношением сторон. Для этого сначала преобразуйте изображение с соотношением сторон в радианы, а затем вызовите для него функцию sin() . Повторное использование нашего изображения srtm

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

// Get the aspect (in degrees).
var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.
var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.
Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

Результат должен выглядеть примерно так, как показано на рисунке 4. Стоит подробнее рассмотреть код aspect.divide(180).multiply(Math.PI).sin() . Объединяя несколько методов таким образом, код выполняет команду: «разделить аспект на 180, умножить результат на π и, наконец, вычислить синус». Комбинируя методы таким образом, можно выполнять сложные математические операции с изображениями. Полный список математических операций ( add() , subtract() , multiply() см. в документации по Image .

Tutorial_api_04_sin.png
Рисунок 4. Грех ориентации рельефа местности.

Статистика изображений

Другой полезный класс операций с изображениями включает вычисление статистики пикселей в областях изображения или наложений растр-вектор. Для вычисления статистики в Earth Engine используйте редуктор , представленный классами пакета ee.Reducer . Например, предположим, что вам нужно узнать среднюю высоту в некоторой области. Вы можете определить область, нарисовав многоугольник с помощью инструментов рисования геометрии . Для интерактивного рисования области используйте инструмент рисования многоугольников ( ), затем оцифруйте полигон, соответствующий интересующей вас области, и нажмите кнопку «Выход» по завершении. Обратите внимание, что полученный объект ee.Geometry автоматически получает имя geometry и добавляется в качестве импорта в начало вашего скрипта. Переименуйте эту переменную в «polygon», щёлкнув по имени переменной в списке импортов и введя новое имя.

Затем получите среднее значение пикселя в полигоне, используя следующий код:

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

// Compute the mean elevation in the polygon.
var meanDict = srtm.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: polygon,
  scale: 90
});

// Get the mean from the dictionary and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);

Здесь следует отметить несколько моментов. Во-первых, обратите внимание, что reduceRegion() — это метод, доступный для объектов Image ( узнайте больше о сокращении областей здесь ). Во-вторых, аргументы метода предоставляются в объекте JavaScript, который передаётся как один аргумент. (В частности, ключи объекта — это имена параметров метода. Значения — это аргументы метода). В-третьих, параметр reducer указывает тип вычисляемой статистики, а параметр geometry — область, в которой она вычисляется. Параметр scale — это размер пикселя в метрах. Во избежание неоднозначности всегда следует указывать scale при сокращении, так как Earth Engine может не иметь возможности автоматически определить подходящий масштаб на основе входных данных. ( Узнайте больше о scale в Earth Engine ).

Наконец, возвращаемое значение reduceRegion() — это словарь, в котором ключи — названия полос, а значения — пиксельная статистика для этих полос. Метод get() словаря возвращает значение, соответствующее ключу, переданному в качестве аргумента. В данном случае изображение srtm содержит одну полосу, «высота», поэтому пример кода извлекает эту статистику из словаря и выводит её.

Если при запуске этого кода вы получите ошибку, похожую на:

Не бойтесь! Есть несколько способов исправить эту ошибку. Метод reduceRegion() проверяет, действительно ли вы хотите включить так много пикселей в вычисления. Это сделано для того, чтобы вы случайно не совершили глупость, например, не попытались вычислить среднее значение каждого пикселя с шагом в один метр в мире (не делайте этого). Чтобы исправить ошибку, либо установите параметр bestEffort в true , добавив bestEffort: true в словарь параметров, либо установите параметр maxPixels в значение больше значения по умолчанию (10 миллионов пикселей), или сделайте и то, и другое. Если bestEffort имеет значение true, Earth Engine автоматически пересчитает масштаб так, чтобы maxPixels не был превышен.

Отступление: Масштаб в Earth Engine

В предыдущем примере scale был установлен приблизительно равным собственному разрешению изображения SRTM. Собственное разрешение изображения можно узнать с помощью:

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

var scale = srtm.projection().nominalScale();
print('SRTM scale in meters', scale);

Если указать масштаб меньше исходного разрешения, Earth Engine автоматически переснимет входное изображение, используя метод ближайших соседей, а затем включит все пиксели меньшего размера в вычисления. Если указать больший масштаб, Earth Engine будет использовать пиксели из агрегированной версии входных данных (т.е. пиксели с более высокого уровня пирамиды изображения). Подробнее о том, как Earth Engine обрабатывает масштаб, читайте в этом документе .

До сих пор вы работали с одним изображением с одним каналом. На следующей странице вы узнаете о многоканальных изображениях и коллекциях изображений.