Varsayılan olarak, görüntülere uygulanan azaltıcılar, girişleri maske değerine göre ağırlıklandırır.
Bu, clip() gibi işlemlerle oluşturulan kesirli pikseller bağlamında önemlidir. Bu davranışı, küçültücüde unweighted() işlevini çağırarak ayarlayın. Ağırlıksız bir küçültücü kullanıldığında bölgedeki tüm pikseller aynı ağırlığa sahip olur. Aşağıdaki örnekte, piksel ağırlıklandırmanın azaltıcı çıkışını nasıl etkileyebileceği gösterilmektedir:
Ağırlıklı azaltmalarda, piksel kesişim ağırlıkları dahili olarak 8 bitlik tam sayılar (0-255) olarak gösterilir. Bu, kesirli piksel kapsamını 256 ayrı düzeye nicelleştirir. Bu nedenle, yaklaşık 1/256'dan (~%0,4) küçük tüm kapsama alanı kesirleri 0 ağırlığına (geçersiz) yuvarlanır. Bir bölgedeki piksellerin nasıl ağırlıklandırıldığı hakkında daha fazla bilgi için Bölgeyi Küçültme Kılavuzu'na bakın.
Kod Düzenleyici (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)
Sonuçlardaki fark, bölgenin kenarındaki piksellerin, azaltıcıda unweighted() çağrılması sonucunda bir ağırlık almasından kaynaklanır.
Açıkça ağırlıklandırılmış bir çıktı elde etmek için ağırlıkları, azaltıcıda çağrılan splitWeights() ile açıkça ayarlamak tercih edilir. splitWeights() ile değiştirilen bir küçültücü, ikinci girişin ağırlık olduğu iki giriş alır. Aşağıdaki örnekte, bir bölgedeki ağırlıklı ortalama Normalleştirilmiş Fark Bitki Örtüsü İndeksi (NDVI) hesaplanarak splitWeights() gösterilmektedir. Ağırlıklar, bulut puanı (bulutlu hava, ağırlığın düşük olması) ile verilir:
Kod Düzenleyici (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 adlı sanatçının reduceRegion() adlı sanatçı aranmadan önce grup olarak eklenmesi gerektiğini unutmayın. Sonuç, bulutlu piksellerin ağırlığı azaltıldığından tahmini ortalama NDVI'nin daha yüksek olduğunu gösteriyor.