Объекты изображения представляют собой наборы связанных пикселей, имеющих одно и то же целочисленное значение. Категориальные, группированные и логические данные изображения подходят для анализа объектов.
Earth Engine предлагает методы для маркировки каждого объекта уникальным идентификатором, подсчета количества пикселей, составляющих объекты, и вычисления статистики для значений пикселей, пересекающих объекты.
-
connectedComponents()
: пометьте каждый объект уникальным идентификатором. -
connectedPixelCount()
: вычисляет количество пикселей в каждом объекте. -
reduceConnectedComponents()
: вычислить статистику для пикселей в каждом объекте.
Термальные точки доступа
В следующих разделах представлены примеры объектно-ориентированных методов, применяемых к температуре поверхности Landsat 8, причем каждый раздел основан на первом. Запустите следующий фрагмент, чтобы создать базовое изображение: тепловые точки (> 303 градусов Кельвина) для небольшого региона Сан-Франциско.
Редактор кода (JavaScript)
// Make an area of interest geometry centered on San Francisco. var point = ee.Geometry.Point(-122.1899, 37.5010); var aoi = point.buffer(10000); // Import a Landsat 8 image, subset the thermal band, and clip to the // area of interest. var kelvin = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi); // Display the thermal band. Map.centerObject(point, 13); Map.addLayer(kelvin, {min: 288, max: 305}, 'Kelvin'); // Threshold the thermal band to set hot pixels as value 1, mask all else. var hotspots = kelvin.gt(303) .selfMask() .rename('hotspots'); // Display the thermal hotspots on the Map. Map.addLayer(hotspots, {palette: 'FF0000'}, 'Hotspots');
import ee import geemap.core as geemap
Колаб (Питон)
# Make an area of interest geometry centered on San Francisco. point = ee.Geometry.Point(-122.1899, 37.5010) aoi = point.buffer(10000) # Import a Landsat 8 image, subset the thermal band, and clip to the # area of interest. kelvin = ( ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi) ) # Threshold the thermal band to set hot pixels as value 1, mask all else. hotspots = kelvin.gt(303).selfMask().rename('hotspots') # Define a map centered on Redwood City, California. map_objects = geemap.Map(center=[37.5010, -122.1899], zoom=13) # Add the image layers to the map. map_objects.add_layer(kelvin, {'min': 288, 'max': 305}, 'Kelvin') map_objects.add_layer(hotspots, {'palette': 'FF0000'}, 'Hotspots')

Рисунок 1. Температура в районе Сан-Франциско. Пиксели с температурой выше 303 градусов Кельвина выделяются красным цветом (термальные точки).
Маркировать объекты
Маркировка объектов часто является первым шагом в анализе объектов. Здесь функция connectedComponents()
используется для идентификации объектов изображения и присвоения каждому уникального идентификатора; всем пикселям, принадлежащим объекту, присваивается одно и то же целочисленное значение идентификатора. Результатом является копия входного изображения с дополнительной полосой «меток», связывающей пиксели со значением идентификатора объекта на основе связности пикселей в первой полосе изображения.
Редактор кода (JavaScript)
// Uniquely label the hotspot image objects. var objectId = hotspots.connectedComponents({ connectedness: ee.Kernel.plus(1), maxSize: 128 }); // Display the uniquely ID'ed objects to the Map. Map.addLayer(objectId.randomVisualizer(), null, 'Objects');
import ee import geemap.core as geemap
Колаб (Питон)
# Uniquely label the hotspot image objects. object_id = hotspots.connectedComponents( connectedness=ee.Kernel.plus(1), maxSize=128 ) # Add the uniquely ID'ed objects to the map. map_objects.add_layer(object_id.randomVisualizer(), None, 'Objects')
Обратите внимание, что максимальный размер патча установлен на уровне 128 пикселей; объекты, состоящие из большего количества пикселей, маскируются. Соединение определяется ядром ee.Kernel.plus(1)
, которое определяет соединение с четырьмя соседями; используйте ee.Kernel.square(1)
для восьми соседей.

Рисунок 2. Объекты тепловых точек, помеченные и оформленные уникальным идентификатором.
Размер объекта
Количество пикселей
Подсчитайте количество пикселей, составляющих объекты, с помощью метода изображения connectedPixelCount()
. Знание количества пикселей в объекте может быть полезно для маскировки объектов по размеру и расчета площади объекта. Следующий фрагмент применяет connectedPixelCount()
к полосе «метки» изображения objectId
, определенного в предыдущем разделе.
Редактор кода (JavaScript)
// Compute the number of pixels in each object defined by the "labels" band. var objectSize = objectId.select('labels') .connectedPixelCount({ maxSize: 128, eightConnected: false }); // Display object pixel count to the Map. Map.addLayer(objectSize, null, 'Object n pixels');
import ee import geemap.core as geemap
Колаб (Питон)
# Compute the number of pixels in each object defined by the "labels" band. object_size = object_id.select('labels').connectedPixelCount( maxSize=128, eightConnected=False ) # Add the object pixel count to the map. map_objects.add_layer(object_size, None, 'Object n pixels')
connectedPixelCount()
возвращает копию входного изображения, где каждый пиксель каждой полосы содержит количество подключенных соседей в соответствии с правилом соединения с четырьмя или восемью соседями, определяемым логическим аргументом, передаваемым в параметр eightConnected
. Обратите внимание, что связность определяется независимо для каждого канала входного изображения. В этом примере в качестве входных данных было предоставлено одноканальное изображение ( objectId
), представляющее идентификатор объекта, поэтому одноканальное изображение было возвращено с полосой «меток» (присутствующей как таковая во входном изображении), но теперь значения представляют количество пикселей, составляющих объекты; каждый пиксель каждого объекта будет иметь одинаковое значение количества пикселей.

Рисунок 3. Объекты тепловых точек с маркировкой и стилем по размеру.
Область
Вычислите площадь объекта, умножив площадь одного пикселя на количество пикселей, составляющих объект (определяется методом connectedPixelCount()
). Площадь пикселя предоставляется изображением, сгенерированным с помощью ee.Image.pixelArea()
.
Редактор кода (JavaScript)
// Get a pixel area image. var pixelArea = ee.Image.pixelArea(); // Multiply pixel area by the number of pixels in an object to calculate // the object area. The result is an image where each pixel // of an object relates the area of the object in m^2. var objectArea = objectSize.multiply(pixelArea); // Display object area to the Map. Map.addLayer(objectArea, {min: 0, max: 30000, palette: ['0000FF', 'FF00FF']}, 'Object area m^2');
import ee import geemap.core as geemap
Колаб (Питон)
# Get a pixel area image. pixel_area = ee.Image.pixelArea() # Multiply pixel area by the number of pixels in an object to calculate # the object area. The result is an image where each pixel # of an object relates the area of the object in m^2. object_area = object_size.multiply(pixel_area) # Add the object area to the map. map_objects.add_layer( object_area, {'min': 0, 'max': 30000, 'palette': ['0000FF', 'FF00FF']}, 'Object area m^2', )
В результате получается изображение, где каждый пиксель объекта соотносит площадь объекта в квадратных метрах. В этом примере изображение objectSize
содержит один канал. Если бы оно было многоканальным, операция умножения была бы применена к каждому каналу изображения.
Фильтровать объекты по размеру
Размер объекта можно использовать в качестве условия маски, чтобы сосредоточить анализ на объектах определенного размера (например, замаскировать слишком маленькие объекты). Здесь изображение objectArea
рассчитанное на предыдущем шаге, используется в качестве маски для удаления объектов, площадь которых меньше одного гектара.
Редактор кода (JavaScript)
// Threshold the `objectArea` image to define a mask that will mask out // objects below a given size (1 hectare in this case). var areaMask = objectArea.gte(10000); // Update the mask of the `objectId` layer defined previously using the // minimum area mask just defined. objectId = objectId.updateMask(areaMask); Map.addLayer(objectId, null, 'Large hotspots');
import ee import geemap.core as geemap
Колаб (Питон)
# Threshold the `object_area` image to define a mask that will mask out # objects below a given size (1 hectare in this case). area_mask = object_area.gte(10000) # Update the mask of the `object_id` layer defined previously using the # minimum area mask just defined. object_id = object_id.updateMask(area_mask) map_objects.add_layer(object_id, None, 'Large hotspots')
Результатом является копия изображения objectId
, где замаскированы объекты площадью менее одного гектара.
![]() | ![]() |
---|---|
Рисунок 4а. Объекты тепловых точек, помеченные и стилизованные по уникальному идентификатору. | Рисунок 4б. Объекты тепловых точек, отфильтрованные по минимальной площади (1 га). |
Зональная статистика
Метод reduceConnectedComponents()
применяет редуктор к пикселям, составляющим уникальные объекты. В следующем фрагменте он используется для расчета средней температуры объектов горячей точки. Для reduceConnectedComponents()
требуется входное изображение с полосой (или полосами), которую нужно уменьшить, и полосой, определяющей метки объектов. Здесь полоса изображения «меток» objectID
добавляется к изображению температуры kelvin
для создания подходящего входного изображения.
Редактор кода (JavaScript)
// Make a suitable image for `reduceConnectedComponents()` by adding a label // band to the `kelvin` temperature image. kelvin = kelvin.addBands(objectId.select('labels')); // Calculate the mean temperature per object defined by the previously added // "labels" band. var patchTemp = kelvin.reduceConnectedComponents({ reducer: ee.Reducer.mean(), labelBand: 'labels' }); // Display object mean temperature to the Map. Map.addLayer( patchTemp, {min: 303, max: 304, palette: ['yellow', 'red']}, 'Mean temperature' );
import ee import geemap.core as geemap
Колаб (Питон)
# Make a suitable image for `reduceConnectedComponents()` by adding a label # band to the `kelvin` temperature image. kelvin = kelvin.addBands(object_id.select('labels')) # Calculate the mean temperature per object defined by the previously added # "labels" band. patch_temp = kelvin.reduceConnectedComponents( reducer=ee.Reducer.mean(), labelBand='labels' ) # Add object mean temperature to the map and display it. map_objects.add_layer( patch_temp, {'min': 303, 'max': 304, 'palette': ['yellow', 'red']}, 'Mean temperature', ) display(map_objects)
Результатом является копия входного изображения без полосы, используемой для определения объектов, где значения пикселей представляют собой результат уменьшения для каждого объекта в каждой полосе.

Рисунок 5. Пиксели объекта «Тепловая горячая точка», суммированные и стилизованные по средней температуре. ,
Объекты изображения представляют собой наборы связанных пикселей, имеющих одно и то же целочисленное значение. Категориальные, группированные и логические данные изображения подходят для анализа объектов.
Earth Engine предлагает методы для маркировки каждого объекта уникальным идентификатором, подсчета количества пикселей, составляющих объекты, и вычисления статистики для значений пикселей, пересекающих объекты.
-
connectedComponents()
: пометьте каждый объект уникальным идентификатором. -
connectedPixelCount()
: вычисляет количество пикселей в каждом объекте. -
reduceConnectedComponents()
: вычислить статистику для пикселей в каждом объекте.
Термальные точки доступа
В следующих разделах представлены примеры объектно-ориентированных методов, применяемых к температуре поверхности Landsat 8, причем каждый раздел основан на первом. Запустите следующий фрагмент, чтобы создать базовое изображение: тепловые точки (> 303 градусов Кельвина) для небольшого региона Сан-Франциско.
Редактор кода (JavaScript)
// Make an area of interest geometry centered on San Francisco. var point = ee.Geometry.Point(-122.1899, 37.5010); var aoi = point.buffer(10000); // Import a Landsat 8 image, subset the thermal band, and clip to the // area of interest. var kelvin = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi); // Display the thermal band. Map.centerObject(point, 13); Map.addLayer(kelvin, {min: 288, max: 305}, 'Kelvin'); // Threshold the thermal band to set hot pixels as value 1, mask all else. var hotspots = kelvin.gt(303) .selfMask() .rename('hotspots'); // Display the thermal hotspots on the Map. Map.addLayer(hotspots, {palette: 'FF0000'}, 'Hotspots');
import ee import geemap.core as geemap
Колаб (Питон)
# Make an area of interest geometry centered on San Francisco. point = ee.Geometry.Point(-122.1899, 37.5010) aoi = point.buffer(10000) # Import a Landsat 8 image, subset the thermal band, and clip to the # area of interest. kelvin = ( ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi) ) # Threshold the thermal band to set hot pixels as value 1, mask all else. hotspots = kelvin.gt(303).selfMask().rename('hotspots') # Define a map centered on Redwood City, California. map_objects = geemap.Map(center=[37.5010, -122.1899], zoom=13) # Add the image layers to the map. map_objects.add_layer(kelvin, {'min': 288, 'max': 305}, 'Kelvin') map_objects.add_layer(hotspots, {'palette': 'FF0000'}, 'Hotspots')

Рисунок 1. Температура в районе Сан-Франциско. Пиксели с температурой выше 303 градусов Кельвина выделяются красным цветом (термальные точки).
Маркировать объекты
Маркировка объектов часто является первым шагом в анализе объектов. Здесь функция connectedComponents()
используется для идентификации объектов изображения и присвоения каждому уникального идентификатора; всем пикселям, принадлежащим объекту, присваивается одно и то же целочисленное значение идентификатора. Результатом является копия входного изображения с дополнительной полосой «меток», связывающей пиксели со значением идентификатора объекта на основе связности пикселей в первой полосе изображения.
Редактор кода (JavaScript)
// Uniquely label the hotspot image objects. var objectId = hotspots.connectedComponents({ connectedness: ee.Kernel.plus(1), maxSize: 128 }); // Display the uniquely ID'ed objects to the Map. Map.addLayer(objectId.randomVisualizer(), null, 'Objects');
import ee import geemap.core as geemap
Колаб (Питон)
# Uniquely label the hotspot image objects. object_id = hotspots.connectedComponents( connectedness=ee.Kernel.plus(1), maxSize=128 ) # Add the uniquely ID'ed objects to the map. map_objects.add_layer(object_id.randomVisualizer(), None, 'Objects')
Обратите внимание, что максимальный размер патча установлен на уровне 128 пикселей; объекты, состоящие из большего количества пикселей, маскируются. Соединение определяется ядром ee.Kernel.plus(1)
, которое определяет соединение с четырьмя соседями; используйте ee.Kernel.square(1)
для восьми соседей.

Рисунок 2. Объекты тепловых точек, помеченные и оформленные уникальным идентификатором.
Размер объекта
Количество пикселей
Подсчитайте количество пикселей, составляющих объекты, с помощью метода изображения connectedPixelCount()
. Знание количества пикселей в объекте может быть полезно для маскировки объектов по размеру и расчета площади объекта. Следующий фрагмент применяет connectedPixelCount()
к полосе «метки» изображения objectId
, определенного в предыдущем разделе.
Редактор кода (JavaScript)
// Compute the number of pixels in each object defined by the "labels" band. var objectSize = objectId.select('labels') .connectedPixelCount({ maxSize: 128, eightConnected: false }); // Display object pixel count to the Map. Map.addLayer(objectSize, null, 'Object n pixels');
import ee import geemap.core as geemap
Колаб (Питон)
# Compute the number of pixels in each object defined by the "labels" band. object_size = object_id.select('labels').connectedPixelCount( maxSize=128, eightConnected=False ) # Add the object pixel count to the map. map_objects.add_layer(object_size, None, 'Object n pixels')
connectedPixelCount()
возвращает копию входного изображения, где каждый пиксель каждой полосы содержит количество подключенных соседей в соответствии с правилом соединения с четырьмя или восемью соседями, определяемым логическим аргументом, передаваемым в параметр eightConnected
. Обратите внимание, что связность определяется независимо для каждого канала входного изображения. В этом примере в качестве входных данных было предоставлено одноканальное изображение ( objectId
), представляющее идентификатор объекта, поэтому одноканальное изображение было возвращено с полосой «меток» (присутствующей как таковая во входном изображении), но теперь значения представляют количество пикселей, составляющих объекты; каждый пиксель каждого объекта будет иметь одинаковое значение количества пикселей.

Рисунок 3. Объекты тепловых точек с маркировкой и стилем по размеру.
Область
Вычислите площадь объекта, умножив площадь одного пикселя на количество пикселей, составляющих объект (определяется методом connectedPixelCount()
). Площадь пикселя предоставляется изображением, сгенерированным с помощью ee.Image.pixelArea()
.
Редактор кода (JavaScript)
// Get a pixel area image. var pixelArea = ee.Image.pixelArea(); // Multiply pixel area by the number of pixels in an object to calculate // the object area. The result is an image where each pixel // of an object relates the area of the object in m^2. var objectArea = objectSize.multiply(pixelArea); // Display object area to the Map. Map.addLayer(objectArea, {min: 0, max: 30000, palette: ['0000FF', 'FF00FF']}, 'Object area m^2');
import ee import geemap.core as geemap
Колаб (Питон)
# Get a pixel area image. pixel_area = ee.Image.pixelArea() # Multiply pixel area by the number of pixels in an object to calculate # the object area. The result is an image where each pixel # of an object relates the area of the object in m^2. object_area = object_size.multiply(pixel_area) # Add the object area to the map. map_objects.add_layer( object_area, {'min': 0, 'max': 30000, 'palette': ['0000FF', 'FF00FF']}, 'Object area m^2', )
В результате получается изображение, где каждый пиксель объекта соотносит площадь объекта в квадратных метрах. В этом примере изображение objectSize
содержит один канал. Если бы оно было многоканальным, операция умножения была бы применена к каждому каналу изображения.
Фильтровать объекты по размеру
Размер объекта можно использовать в качестве условия маски, чтобы сосредоточить анализ на объектах определенного размера (например, замаскировать слишком маленькие объекты). Здесь изображение objectArea
рассчитанное на предыдущем шаге, используется в качестве маски для удаления объектов, площадь которых меньше одного гектара.
Редактор кода (JavaScript)
// Threshold the `objectArea` image to define a mask that will mask out // objects below a given size (1 hectare in this case). var areaMask = objectArea.gte(10000); // Update the mask of the `objectId` layer defined previously using the // minimum area mask just defined. objectId = objectId.updateMask(areaMask); Map.addLayer(objectId, null, 'Large hotspots');
import ee import geemap.core as geemap
Колаб (Питон)
# Threshold the `object_area` image to define a mask that will mask out # objects below a given size (1 hectare in this case). area_mask = object_area.gte(10000) # Update the mask of the `object_id` layer defined previously using the # minimum area mask just defined. object_id = object_id.updateMask(area_mask) map_objects.add_layer(object_id, None, 'Large hotspots')
Результатом является копия изображения objectId
, где замаскированы объекты площадью менее одного гектара.
![]() | ![]() |
---|---|
Рисунок 4а. Объекты тепловых точек, помеченные и стилизованные по уникальному идентификатору. | Рисунок 4б. Объекты тепловых точек, отфильтрованные по минимальной площади (1 га). |
Зональная статистика
Метод reduceConnectedComponents()
применяет редуктор к пикселям, составляющим уникальные объекты. В следующем фрагменте он используется для расчета средней температуры объектов горячей точки. Для reduceConnectedComponents()
требуется входное изображение с полосой (или полосами), которую нужно уменьшить, и полосой, определяющей метки объектов. Здесь полоса изображения «меток» objectID
добавляется к изображению температуры kelvin
для создания подходящего входного изображения.
Редактор кода (JavaScript)
// Make a suitable image for `reduceConnectedComponents()` by adding a label // band to the `kelvin` temperature image. kelvin = kelvin.addBands(objectId.select('labels')); // Calculate the mean temperature per object defined by the previously added // "labels" band. var patchTemp = kelvin.reduceConnectedComponents({ reducer: ee.Reducer.mean(), labelBand: 'labels' }); // Display object mean temperature to the Map. Map.addLayer( patchTemp, {min: 303, max: 304, palette: ['yellow', 'red']}, 'Mean temperature' );
import ee import geemap.core as geemap
Колаб (Питон)
# Make a suitable image for `reduceConnectedComponents()` by adding a label # band to the `kelvin` temperature image. kelvin = kelvin.addBands(object_id.select('labels')) # Calculate the mean temperature per object defined by the previously added # "labels" band. patch_temp = kelvin.reduceConnectedComponents( reducer=ee.Reducer.mean(), labelBand='labels' ) # Add object mean temperature to the map and display it. map_objects.add_layer( patch_temp, {'min': 303, 'max': 304, 'palette': ['yellow', 'red']}, 'Mean temperature', ) display(map_objects)
Результатом является копия входного изображения без полосы, используемой для определения объектов, где значения пикселей представляют собой результат уменьшения для каждого объекта в каждой полосе.

Рисунок 5. Пиксели объекта «Тепловая горячая точка», суммированные и стилизованные по средней температуре.