إحصاءات منطقة الصورة

reduceRegion

للحصول على إحصاءات قيم البكسل في منطقة من ee.Image، استخدِم image.reduceRegion(). يؤدي ذلك إلى تقليل جميع وحدات البكسل في المناطق إلى إحصاءات أو تمثيل مكثّف آخر لبيانات وحدات البكسل في المنطقة (مثل تمثيل الرسم البياني الشريطي). يتم تمثيل المنطقة على شكل Geometry، والذي قد يكون مضلّعًا يحتوي على العديد من البكسلات، أو قد يكون نقطة واحدة، وفي هذه الحالة لن يكون هناك سوى بكسل واحد في المنطقة. في كلتا الحالتَين، كما هو موضّح في الشكل 1، فإنّ القيمة المعروضة هي إحصائية مستمَدة من وحدات البكسل في المنطقة.

مخطّط reduceRegion
الشكل 1. رسم توضيحي لتطبيق ee.Reducer على صورة ومنطقة.

للحصول على مثال على الحصول على إحصاءات البكسل في منطقة من الصورة باستخدام reduceRegion()، ننصحك بالعثور على متوسط القيم الطيفية لمجمّع Landsat لعام 5 سنوات ضمن حدود غابة أشجار الصنوبر في سييرا نيفادا (كما هو موضّح في الشكل 2):

// Load input imagery: Landsat 7 5-year composite.
var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012');

// Load an input region: Sierra Nevada.
var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3')
  .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada'))
  .first());

// Reduce the region. The region parameter is the Feature geometry.
var meanDictionary = image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  scale: 30,
  maxPixels: 1e9
});

// The result is a Dictionary.  Print it.
print(meanDictionary);

لفرض إجراء العمليات الحسابية، يكفي طباعة النتيجة التي سيعرضها "أداة تعديل الرموز" على شكل Dictionary في وحدة التحكّم. من المفترض أن يظهر الناتج على النحو التالي:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
مخطّط reduceRegion
الشكل 2. صورة مركبة بألوان زائفة لبيانات صور Landsat في كلّ من كاليفورنيا ونيفادا تظهر المنطقة التي سيتم تقليلها باللون الأبيض.

يُرجى العلم أنّه في هذا المثال، يتم تحديد عملية التقليل من خلال توفير reducer (ee.Reducer.mean()) وgeometry (region.geometry()) وscale (30 مترًا) وmaxPixels للحد الأقصى لعدد البكسل المطلوب إدخاله إلى أداة التقليل. يجب دائمًا تحديد مقياس في طلبات reduceRegion(). ويعود السبب في ذلك إلى أنّ عمليات المعالجة المعقدة، والتي قد تتضمّن بيانات من مصادر مختلفة بنطاقات مختلفة، لن تؤدي إلى تحديد نطاق الإخراج بشكل لا لبس فيه من خلال الإدخالات. في هذه الحالة، يتم ضبط مقياس الدرجات تلقائيًا على درجة واحدة، ما يؤدي بشكل عام إلى نتائج غير مرضية. اطّلِع على هذه الصفحة للحصول على مزيد من المعلومات عن كيفية تعامل Earth Engine مع النطاق.

هناك طريقتان لضبط المقياس: من خلال تحديد المَعلمة scale، أو من خلال تحديد نظام إحداثيات جغرافية وتحويل نظام إحداثيات جغرافية. (اطّلِع على مسرد المصطلحات للحصول على المزيد من المعلومات عن أنظمة CRS وعمليات تحويلها). على سبيل المثال، فإنّ التخفيض الذي يُطبَّق على meanDictionary (أعلاه) يعادل ما يلي:

// As an alternative to specifying scale, specify a CRS and a CRS transform.
// Make this array by constructing a 4326 projection at 30 meters,
// then copying the bounds of the composite, from composite.projection().
var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563];

// Perform the reduction, print the result.
print(image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  crs: 'EPSG:4326',
  crsTransform: affine,
  maxPixels: 1e9
}));

بشكل عام، يكون تحديد المقياس كافيًا ويؤدي إلى إنشاء رمز أكثر سهولة في القراءة. تحدِّد أداة Earth Engine وحدات البكسل التي سيتم إدخالها إلى أداة التقليل من خلال تحويل المنطقة إلى صورة نقطية أولاً. في حال تحديد مقياس بدون نظام مرجعي جغرافي، يتم تحويل المنطقة إلى تنسيق ثنائي الأبعاد في إسقاط الصورة الأصلي مع تحويله إلى درجة الدقة المحدّدة. في حال تحديد نظام مرجعي جغرافي ومقياس معيّنَين، تتم معالجة المنطقة بالاستناد إليهما.

وحدات البكسل في المنطقة

يتم تحديد أنّ البكسل يقع ضمن المنطقة (وتحديد وزنه) وفقًا للقواعد التالية، ويتم تطبيقها على النطاق وطريقة الإسقاط المحدّدة:

  • العوامل المُخفِّضة غير المرجحة (مثل ee.Reducer.count() أو ee.Reducer.mean().unweighted()): يتم تضمين البكسلات إذا كان مركز ثقلها في المنطقة وكان قناع الصورة غير صفري.
  • المُخفِّضات ذات الوزن (مثل ee.Reducer.mean()): يتم تضمين البكسل إذا كان (تقريبًا) 0.5% من البكسل على الأقل في المنطقة وكان قناع الصورة غير صفري، ويكون وزنها هو الحد الأدنى من قناع الصورة والاقتسام (التقريبي) للبكسل الذي تغطيه المنطقة.

يجب توفير المَعلمة maxPixels لكي تنجح عملية الحساب. في حال حذف المَعلمة من المثال، يتم عرض خطأ يبدو على النحو التالي:

هناك خيارات متعدّدة لتخطّي هذه الأخطاء: زيادة maxPixels كما هو موضّح في المثال، أو زيادة scale، أو ضبط bestEffort على true، ما يؤدي تلقائيًا إلى احتساب مقياس جديد (أكبر) بحيث لا يتم تجاوز maxPixels. إذا لم تحدِّد maxPixels، يتم استخدام القيمة التلقائية.