Đối tượng hình ảnh là tập hợp các pixel được kết nối có cùng giá trị số nguyên. Dữ liệu hình ảnh theo danh mục, được phân loại và boolean phù hợp với việc phân tích đối tượng.
Earth Engine cung cấp các phương thức để gắn nhãn cho từng đối tượng bằng mã nhận dạng duy nhất, tính số lượng pixel tạo nên đối tượng và tính toán số liệu thống kê cho các giá trị của pixel giao nhau với đối tượng.
connectedComponents()
: gắn nhãn cho mỗi đối tượng bằng một giá trị nhận dạng duy nhất.connectedPixelCount()
: tính số pixel trong mỗi đối tượng.reduceConnectedComponents()
: tính toán số liệu thống kê cho các pixel trong mỗi đối tượng.
Điểm nóng nhiệt
Các phần sau đây cung cấp ví dụ về các phương thức dựa trên đối tượng được áp dụng cho nhiệt độ bề mặt Landsat 8, trong đó mỗi phần dựa trên phần trước. Chạy đoạn mã tiếp theo để tạo hình ảnh cơ sở: các điểm nóng nhiệt (> 303 độ Kelvin) cho một khu vực nhỏ ở San Francisco.
Trình soạn thảo mã (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')

Hình 1. Nhiệt độ của một khu vực ở San Francisco. Các pixel có nhiệt độ lớn hơn 303 độ Kelvin được phân biệt bằng màu đỏ (điểm nóng nhiệt).
Nhãn đối tượng
Việc gắn nhãn đối tượng thường là bước đầu tiên trong quá trình phân tích đối tượng. Ở đây, hàm connectedComponents()
được dùng để xác định các đối tượng hình ảnh và chỉ định một mã nhận dạng duy nhất cho mỗi đối tượng; tất cả các pixel thuộc một đối tượng đều được chỉ định cùng một giá trị mã nhận dạng số nguyên. Kết quả là một bản sao của hình ảnh đầu vào có thêm một dải "nhãn" liên kết các pixel với giá trị mã nhận dạng đối tượng dựa trên khả năng kết nối của các pixel trong dải đầu tiên của hình ảnh.
Trình soạn thảo mã (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')
Xin lưu ý rằng kích thước bản vá tối đa được đặt thành 128 pixel; các đối tượng bao gồm nhiều pixel hơn sẽ được che. Khả năng kết nối được chỉ định bằng hạt nhân ee.Kernel.plus(1)
, hạt nhân này xác định khả năng kết nối với 4 hàng xóm; sử dụng ee.Kernel.square(1)
cho 8 hàng xóm.

Hình 2. Các đối tượng điểm nóng nhiệt được gắn nhãn và tạo kiểu bằng mã nhận dạng duy nhất.
Kích thước đối tượng
Số pixel
Tính số pixel tạo nên các đối tượng bằng phương thức hình ảnh connectedPixelCount()
. Việc biết số pixel trong một đối tượng có thể hữu ích cho việc che các đối tượng theo kích thước và tính toán diện tích đối tượng. Đoạn mã sau đây áp dụng connectedPixelCount()
cho dải "labels" (nhãn) của hình ảnh objectId
được xác định trong phần trước.
Trình soạn thảo mã (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()
trả về một bản sao của hình ảnh đầu vào, trong đó mỗi pixel của mỗi dải chứa số lượng pixel lân cận được kết nối theo quy tắc kết nối 4 hoặc 8 pixel lân cận được xác định bằng đối số boolean được truyền đến tham số eightConnected
. Xin lưu ý rằng khả năng kết nối được xác định độc lập cho từng dải của hình ảnh đầu vào. Trong ví dụ này, một hình ảnh đơn băng (objectId
) đại diện cho mã nhận dạng đối tượng được cung cấp làm dữ liệu đầu vào, do đó, một hình ảnh đơn băng được trả về với băng "nhãn" (hiển thị như vậy trong hình ảnh đầu vào), nhưng giờ đây, các giá trị này đại diện cho số lượng pixel tạo nên đối tượng; mỗi pixel của mỗi đối tượng sẽ có cùng giá trị số lượng pixel.

Hình 3. Các đối tượng điểm nóng nhiệt được gắn nhãn và tạo kiểu theo kích thước.
Khu vực
Tính diện tích đối tượng bằng cách nhân diện tích của một pixel với số pixel tạo nên đối tượng (do connectedPixelCount()
xác định). Diện tích pixel do hình ảnh được tạo từ ee.Image.pixelArea()
cung cấp.
Trình soạn thảo mã (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', )
Kết quả là một hình ảnh trong đó mỗi pixel của một đối tượng liên quan đến diện tích của đối tượng đó tính bằng mét vuông. Trong ví dụ này, hình ảnh objectSize
chứa một dải tần số, nếu là nhiều dải tần số, thì phép nhân sẽ được áp dụng cho từng dải tần số của hình ảnh.
Lọc đối tượng theo kích thước
Bạn có thể sử dụng kích thước đối tượng làm điều kiện mặt nạ để tập trung phân tích vào các đối tượng có kích thước nhất định (ví dụ: che các đối tượng quá nhỏ). Ở đây, hình ảnh objectArea
được tính toán ở bước trước được dùng làm mặt nạ để xoá các đối tượng có diện tích dưới một ha.
Trình soạn thảo mã (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')
Kết quả là một bản sao của hình ảnh objectId
, trong đó các đối tượng có diện tích dưới một ha sẽ bị che khuất.
![]() |
![]() |
---|---|
Hình 4a. Các đối tượng điểm nóng nhiệt được gắn nhãn và tạo kiểu theo mã nhận dạng duy nhất. | Hình 4b. Các đối tượng điểm nóng nhiệt được lọc theo diện tích tối thiểu (1 ha). |
Số liệu thống kê theo vùng
Phương thức reduceConnectedComponents()
áp dụng một trình giảm cho các pixel tạo nên các đối tượng riêng biệt. Đoạn mã sau sử dụng hàm này để tính nhiệt độ trung bình của các đối tượng điểm phát sóng. reduceConnectedComponents()
yêu cầu một hình ảnh đầu vào có một dải (hoặc các dải) cần giảm và một dải xác định nhãn đối tượng. Ở đây, dải hình ảnh "nhãn" objectID
được thêm vào hình ảnh nhiệt độ kelvin
để tạo một hình ảnh đầu vào phù hợp.
Trình soạn thảo mã (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)
Kết quả là một bản sao của hình ảnh đầu vào không có dải tần số dùng để xác định đối tượng, trong đó giá trị pixel thể hiện kết quả của việc giảm đối tượng trên mỗi dải tần số.

Hình 5. Các pixel của đối tượng điểm nóng nhiệt được tóm tắt và tạo kiểu theo nhiệt độ trung bình.