Bildobjekte sind Gruppen verbundener Pixel mit demselben Ganzzahlwert. Kategorische, gebatchte und boolesche Bilddaten eignen sich für die Objektanalyse.
Earth Engine bietet Methoden, um jedes Objekt mit einer eindeutigen ID zu versehen, die Anzahl der Pixel zu zählen, aus denen Objekte bestehen, und Statistiken für Pixelwerte zu berechnen, die sich mit Objekten überschneiden.
connectedComponents()
: jedes Objekt mit einer eindeutigen Kennung versehen.connectedPixelCount()
: Anzahl der Pixel in jedem Objekt berechnen.reduceConnectedComponents()
: Eine Statistik für Pixel in jedem Objekt berechnen.
Thermische Hotspots
In den folgenden Abschnitten finden Sie Beispiele für objektbasierte Methoden, die auf die Oberflächentemperatur von Landsat 8 angewendet werden. Dabei baut jeder Abschnitt auf dem vorherigen auf. Führen Sie das nächste Snippet aus, um das Basisbild zu generieren: Wärmehotspots (über 303 Kelvin) für eine kleine Region in San Francisco.
Code-Editor (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
Colab (Python)
# 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')

Abbildung 1. Temperatur für eine Region in San Francisco. Pixel mit einer Temperatur von über 303 Kelvin sind rot hervorgehoben (thermische Hotspots).
Labelobjekte
Das Beschriften von Objekten ist oft der erste Schritt bei der Objektanalyse. Hier wird die Funktion connectedComponents()
verwendet, um Bildobjekte zu identifizieren und ihnen jeweils eine eindeutige ID zuzuweisen. Allen Pixeln, die zu einem Objekt gehören, wird derselbe ganzzahlige ID-Wert zugewiesen. Das Ergebnis ist eine Kopie des Eingabebilds mit einem zusätzlichen Band „Labels“, in dem Pixel basierend auf der Konnektivität von Pixeln im ersten Band des Bilds mit einem Objekt-ID-Wert verknüpft werden.
Code-Editor (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
Colab (Python)
# 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')
Die maximale Patchgröße ist auf 128 Pixel festgelegt. Objekte, die aus mehr Pixeln bestehen, werden ausgeblendet. Die Konnektivität wird durch einen ee.Kernel.plus(1)
-Kern angegeben, der eine Konnektivität mit vier Nachbarn definiert. Verwenden Sie ee.Kernel.square(1)
für eine Konnektivität mit acht Nachbarn.

Abbildung 2. Thermische Hotspot-Objekte, die mit einer eindeutigen ID gekennzeichnet und formatiert sind.
Objektgröße
Anzahl der Pixel
Berechnen Sie mit der Bildmethode connectedPixelCount()
die Anzahl der Pixel, aus denen Objekte bestehen. Die Anzahl der Pixel in einem Objekt kann hilfreich sein, um Objekte nach Größe zu maskieren und den Objektbereich zu berechnen. Im folgenden Snippet wird connectedPixelCount()
auf den Band „labels“ des im vorherigen Abschnitt definierten objectId
-Bilds angewendet.
Code-Editor (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
Colab (Python)
# 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()
gibt eine Kopie des Eingabebilds zurück, in der jedes Pixel jedes Bandes die Anzahl der verbundenen Nachbarn gemäß der Regel für vier oder acht Nachbarn enthält, die durch ein boolesches Argument bestimmt wird, das an den Parameter eightConnected
übergeben wird. Die Konnektivität wird für jeden Band des Eingabebilds unabhängig bestimmt. In diesem Beispiel wurde ein einbandiges Bild (objectId
) als Objekt-ID angegeben. Daher wurde ein einbandiges Bild mit einem Labels-Band zurückgegeben, das im Eingabebild vorhanden war. Die Werte repräsentieren jetzt die Anzahl der Pixel, aus denen Objekte bestehen. Jedes Pixel jedes Objekts hat denselben Pixelanzahlwert.

Abbildung 3. Thermische Hotspot-Objekte, die nach Größe beschriftet und formatiert sind.
Gebiet
Berechnen Sie die Objektfläche, indem Sie die Fläche eines einzelnen Pixels mit der Anzahl der Pixel multiplizieren, aus denen ein Objekt besteht (wird von connectedPixelCount()
bestimmt). Die Pixelfläche wird von einem Bild bereitgestellt, das aus ee.Image.pixelArea()
generiert wurde.
Code-Editor (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
Colab (Python)
# 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', )
Das Ergebnis ist ein Bild, in dem jedes Pixel eines Objekts den Flächeninhalt des Objekts in Quadratmetern darstellt. In diesem Beispiel enthält das objectSize
-Bild einen einzelnen Band. Bei einem mehrbändigen Bild würde die Multiplikation auf jeden Band des Bildes angewendet.
Objekte nach Größe filtern
Die Objektgröße kann als Maskenbedingung verwendet werden, um die Analyse auf Objekte einer bestimmten Größe zu konzentrieren (z.B. Objekte ausblenden, die zu klein sind). Hier wird das im vorherigen Schritt berechnete objectArea
-Bild als Maske verwendet, um Objekte zu entfernen, deren Fläche weniger als ein Hektar beträgt.
Code-Editor (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
Colab (Python)
# 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')
Das Ergebnis ist eine Kopie des objectId
-Bilds, bei der Objekte mit einer Fläche von weniger als einem Hektar ausgeblendet sind.
![]() |
![]() |
---|---|
Abbildung 4a. Thermische Hotspot-Objekte, die anhand der eindeutigen ID gekennzeichnet und formatiert sind. | Abbildung 4b. Thermische Hotspot-Objekte, gefiltert nach Mindestfläche (1 Hektar). |
Zonale Statistiken
Die Methode reduceConnectedComponents()
wendet einen Reduzierer auf die Pixel an, aus denen einzelne Objekte bestehen. Im folgenden Snippet wird damit die durchschnittliche Temperatur von Hotspot-Objekten berechnet. Für reduceConnectedComponents()
ist ein Eingabebild mit einem oder mehreren zu reduzierenden Bändern und einem Band erforderlich, das Objektlabels definiert. Hier wird dem Temperaturbild kelvin
das Bildband objectID
„Labels“ hinzugefügt, um ein geeignetes Eingabebild zu erstellen.
Code-Editor (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
Colab (Python)
# 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)
Das Ergebnis ist eine Kopie des Eingabebilds ohne den zum Definieren von Objekten verwendeten Band. Die Pixelwerte stellen das Ergebnis der Reduzierung pro Objekt und Band dar.

Abbildung 5. Pixel von Objekten mit Wärmehotspots, zusammengefasst und nach durchschnittlicher Temperatur gestaltet.