عناصر الصور هي مجموعات من وحدات البكسل المتصلة التي لها قيمة عددية متطابقة. إنّ بيانات الصور الفئوية والمجمّعة والمنطقية مناسبة لتحليل العناصر.
يوفّر 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
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')

الشكل 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
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')
يُرجى العِلم أنّ الحد الأقصى لحجم الرقعة هو 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
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()
نسخة من الصورة المُدخلة حيث يحتوي كل بكسل من
كل نطاق على عدد العناصر المجاورة المتصلة وفقًا لقاعدة اتصال العناصر المجاورة الأربعة أو الثمانية التي يتم تحديدها بواسطة وسيطة منطقية
يتم تمريرها إلى المَعلمة 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
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', )
والنتيجة هي صورة يرتبط فيها كل بكسل من عنصر ما بمساحة
العنصر بالمتر المربّع. في هذا المثال، تحتوي صورة 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
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')
والنتيجة هي نسخة من صورة 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
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)
والنتيجة هي نسخة من الصورة المُدخلة بدون النطاق المستخدَم لتحديد الأجسام، حيث تمثّل قيم البكسل نتيجة التخفيض لكلّ جسم في كلّ نطاق.

الشكل 5. يتم تلخيص وحدات بكسل الأجسام في نقاط الاتصال الحرارية وتنسيقها حسب متوسط درجة الحرارة.