بشكلٍ تلقائي، تعمل أدوات الاختزال المطبَّقة على الصور على ترجيح المدخلات وفقًا لقيمة القناع.
يكون ذلك مهمًا في سياق وحدات البكسل الجزئية التي يتم إنشاؤها من خلال عمليات مثل
clip(). يمكنك تعديل هذا السلوك من خلال استدعاء unweighted() في أداة الاختزال. يؤدي استخدام أداة تقليل غير مرجّحة إلى فرض أن يكون لجميع وحدات البكسل في المنطقة الوزن نفسه. يوضّح المثال التالي كيف يمكن أن يؤثر ترجيح وحدات البكسل في ناتج أداة التصغير:
بالنسبة إلى عمليات الحدّ من البيانات المرجّحة، يتم تمثيل أوزان تقاطع البكسل داخليًا كأعداد صحيحة ذات 8 بت (من 0 إلى 255). يؤدي ذلك إلى تقسيم تغطية وحدات البكسل الجزئية إلى 256 مستوى منفصلاً. نتيجةً لذلك، يتم تقريب أي جزء من التغطية يقل عن 1/256 (أي %0.4 تقريبًا) إلى وزن 0 (غير صالح). راجِع دليل تقليل المنطقة للحصول على مزيد من التفاصيل حول كيفية ترجيح وحدات البكسل في منطقة معيّنة.
أداة تعديل الرموز (JavaScript)
// Load a Landsat 8 input image. var image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318'); // Create an arbitrary region. var geometry = ee.Geometry.Rectangle(-122.496, 37.532, -121.554, 37.538); // Make an NDWI image. It will have one band named 'nd'. var ndwi = image.normalizedDifference(['B3', 'B5']); // Compute the weighted mean of the NDWI image clipped to the region. var weighted = ndwi.clip(geometry) .reduceRegion({ reducer: ee.Reducer.mean(), geometry: geometry, scale: 30}) .get('nd'); // Compute the UN-weighted mean of the NDWI image clipped to the region. var unweighted = ndwi.clip(geometry) .reduceRegion({ reducer: ee.Reducer.mean().unweighted(), geometry: geometry, scale: 30}) .get('nd'); // Observe the difference between weighted and unweighted reductions. print('weighted:', weighted); print('unweighted', unweighted);
import ee import geemap.core as geemap
Colab (Python)
# Load a Landsat 8 input image. image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318') # Create an arbitrary region. geometry = ee.Geometry.Rectangle(-122.496, 37.532, -121.554, 37.538) # Make an NDWI image. It will have one band named 'nd'. ndwi = image.normalizedDifference(['B3', 'B5']) # Compute the weighted mean of the NDWI image clipped to the region. weighted = ( ndwi.clip(geometry) .reduceRegion(reducer=ee.Reducer.mean(), geometry=geometry, scale=30) .get('nd') ) # Compute the UN-weighted mean of the NDWI image clipped to the region. unweighted = ( ndwi.clip(geometry) .reduceRegion( reducer=ee.Reducer.mean().unweighted(), geometry=geometry, scale=30 ) .get('nd') ) # Observe the difference between weighted and unweighted reductions. display('weighted:', weighted) display('unweighted', unweighted)
ويرجع الاختلاف في النتائج إلى أنّ وحدات البكسل الموجودة على حافة المنطقة تتلقّى وزنًا
يساوي واحدًا نتيجةً لاستدعاء unweighted() في أداة الاختزال.
للحصول على ناتج مرجّح بشكل واضح، من الأفضل ضبط الأوزان بشكل واضح باستخدام splitWeights() الذي يتم استدعاؤه في أداة الاختزال. يأخذ المخفّض المعدَّل بواسطة
splitWeights() مدخلَين، حيث يكون المدخل الثاني هو الوزن. يوضّح المثال التالي splitWeights() من خلال حساب المتوسط المقدَّر لمؤشر الاختلاف النباتي القياسي (NDVI) في منطقة ما، مع تحديد التقديرات حسب درجة الغطاء السحابي (كلما زاد الغطاء السحابي، انخفض التقدير):
أداة تعديل الرموز (JavaScript)
// Load an input Landsat 8 image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_186059_20130419'); // Compute cloud score and reverse it such that the highest // weight (100) is for the least cloudy pixels. var cloudWeight = ee.Image(100).subtract( ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud'])); // Compute NDVI and add the cloud weight band. var ndvi = image.normalizedDifference(['B5', 'B4']).addBands(cloudWeight); // Define an arbitrary region in a cloudy area. var region = ee.Geometry.Rectangle(9.9069, 0.5981, 10.5, 0.9757); // Use a mean reducer. var reducer = ee.Reducer.mean(); // Compute the unweighted mean. var unweighted = ndvi.select(['nd']).reduceRegion(reducer, region, 30); // compute mean weighted by cloudiness. var weighted = ndvi.reduceRegion(reducer.splitWeights(), region, 30); // Observe the difference as a result of weighting by cloudiness. print('unweighted:', unweighted); print('weighted:', weighted);
import ee import geemap.core as geemap
Colab (Python)
# Load an input Landsat 8 image. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_186059_20130419') # Compute cloud score and reverse it such that the highest # weight (100) is for the least cloudy pixels. cloud_weight = ee.Image(100).subtract( ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']) ) # Compute NDVI and add the cloud weight band. ndvi = image.normalizedDifference(['B5', 'B4']).addBands(cloud_weight) # Define an arbitrary region in a cloudy area. region = ee.Geometry.Rectangle(9.9069, 0.5981, 10.5, 0.9757) # Use a mean reducer. reducer = ee.Reducer.mean() # Compute the unweighted mean. unweighted = ndvi.select(['nd']).reduceRegion(reducer, region, 30) # compute mean weighted by cloudiness. weighted = ndvi.reduceRegion(reducer.splitWeights(), region, 30) # Observe the difference as a result of weighting by cloudiness. display('unweighted:', unweighted) display('weighted:', weighted)
لاحظ أنّه يجب إضافة cloudWeight كقناة قبل استدعاء
reduceRegion(). تشير النتيجة إلى أنّ متوسط NDVI المقدّر يكون أعلى نتيجةً لخفض وزن البكسلات الملبّدة بالغيوم.