Matematiksel İşlemler

Resim matematik işlemleri add() ve subtract() gibi operatörler kullanılarak yapılabilir ancak birkaç terimden fazlasını içeren karmaşık hesaplamalar için expression() işlevi iyi bir alternatiftir. Operatörler ve ifadeler hakkında daha fazla bilgi için aşağıdaki bölümlere bakın.

Operatörler

Matematik operatörleri, resim bantlarında temel aritmetik işlemleri gerçekleştirir. Bu işlevler iki giriş alır: iki resim veya bir resim ve maskelenmiş pikseli olmayan tek bantlı sabit resim olarak yorumlanan sabit bir terim. İşlemler her bant için piksel başına gerçekleştirilir.

Temel bir örnek olarak, add(), subtract() ve divide() operatörlerinin kullanıldığı VIIRS görüntülerini kullanarak Normalleştirilmiş Fark Bitki Örtüsü İndeksi'ni (NDVI) hesaplama görevini ele alalım:

// Load a VIIRS 8-day surface reflectance composite for May 2024.
var viirs202405 = ee.ImageCollection('NASA/VIIRS/002/VNP09H1').filter(
  ee.Filter.date('2024-05-01', '2024-05-16')).first();

// Compute NDVI.
var ndvi202405 = viirs202405.select('SurfReflect_I2')
  .subtract(viirs202405.select('SurfReflect_I1'))
  .divide(viirs202405.select('SurfReflect_I2')
    .add(viirs202405.select('SurfReflect_I1')));

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap
# Load a VIIRS 8-day surface reflectance composite for May 2024.
viirs202405 = (
    ee.ImageCollection('NASA/VIIRS/002/VNP09H1')
    .filter(ee.Filter.date('2024-05-01', '2024-05-16'))
    .first()
)

# Compute NDVI.
ndvi202405 = (
    viirs202405.select('SurfReflect_I2')
    .subtract(viirs202405.select('SurfReflect_I1'))
    .divide(
        viirs202405.select('SurfReflect_I2').add(
            viirs202405.select('SurfReflect_I1')
        )
    )
)

Yalnızca iki giriş arasındaki maskesiz piksellerin kesişimi dikkate alınır ve maskesiz olarak döndürülür. Diğer tüm pikseller maskelenir. Genel olarak, girişlerden birinde yalnızca bir bant varsa bu bant, diğer girişteki tüm bantlara karşı kullanılır. Girişler aynı sayıda banda sahipse ancak aynı ada sahip değilse doğal sırada ikişerli gruplar halinde kullanılırlar. Çıkış bantları, iki girişten uzun olana göre adlandırılır veya uzunlukları eşitse ilk girişin sırasına göre adlandırılır. Çıkış piksellerinin türü, giriş türlerinin birleşimidir.

Aşağıdaki çok bantlı görüntü çıkarma örneğinde, bantların nasıl otomatik olarak eşlendiği gösterilmektedir. Bu eşleme sonucunda, birlikte gerçekleşen her bant için her piksel için bir "değişiklik vektörü" elde edilir.

// Load a VIIRS 8-day surface reflectance composite for September 2024.
var viirs202409 = ee.ImageCollection('NASA/VIIRS/002/VNP09H1').filter(
  ee.Filter.date('2024-09-01', '2024-09-16')).first();

// Compute multi-band difference between the September composite and the
// previously loaded May composite.
var diff = viirs202409.subtract(ndvi202405);
Map.addLayer(diff, {
  bands: ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'],
  min: -1,
  max: 1
}, 'difference');

// Compute the squared difference in each band.
var squaredDifference = diff.pow(2);
Map.addLayer(squaredDifference, {
  bands: ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'],
  min: 0,
  max: 0.7
}, 'squared diff.');

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap
# Load a VIIRS 8-day surface reflectance composite for September 2024.
viirs202409 = (
    ee.ImageCollection('NASA/VIIRS/002/VNP09H1')
    .filter(ee.Filter.date('2024-09-01', '2024-09-16'))
    .first()
)

# Compute multi-band difference between the September composite and the
# previously loaded May composite.
diff = viirs202409.subtract(ndvi202405)

m = geemap.Map()
m.add_layer(
    diff,
    {
        'bands': ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'],
        'min': -1,
        'max': 1,
    },
    'difference',
)

# Compute the squared difference in each band.
squared_difference = diff.pow(2)

m.add_layer(
    squared_difference,
    {
        'bands': ['SurfReflect_I1', 'SurfReflect_I2', 'SurfReflect_I3'],
        'min': 0,
        'max': 0.7,
    },
    'squared diff.',
)
display(m)

Bu örneğin ikinci bölümünde, kare farkı image.pow(2) kullanılarak hesaplanır. Temel aritmetik, trigonometri, üs alma, yuvarlama, dönüştürme, bit işleme ve daha fazlasını işleyen matematiksel operatörlerin tam listesi için API dokümanlarına bakın.

İfadeler

Daha karmaşık matematiksel ifadeleri uygulamak için bir matematik işleminin metin temsilini ayrıştıran image.expression() işlevini kullanabilirsiniz. Aşağıdaki örnekte, Gelişmiş Bitki Örtüsü İndeksi'ni (EVI) hesaplamak için expression() kullanılmaktadır:

// Load a Landsat 8 image.
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318');

// Compute the EVI using an expression.
var evi = image.expression(
    '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {
      'NIR': image.select('B5'),
      'RED': image.select('B4'),
      'BLUE': image.select('B2')
});

Map.centerObject(image, 9);
Map.addLayer(evi, {min: -1, max: 1, palette: ['a6611a', 'f5f5f5', '4dac26']});

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

import ee
import geemap.core as geemap
# Load a Landsat 8 image.
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')

# Compute the EVI using an expression.
evi = image.expression(
    '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))',
    {
        'NIR': image.select('B5'),
        'RED': image.select('B4'),
        'BLUE': image.select('B2'),
    },
)

# Define a map centered on San Francisco Bay.
map_evi = geemap.Map(center=[37.4675, -122.1363], zoom=9)

# Add the image layer to the map and display it.
map_evi.add_layer(
    evi, {'min': -1, 'max': 1, 'palette': ['a6611a', 'f5f5f5', '4dac26']}, 'evi'
)
display(map_evi)

expression() işlevinin ilk bağımsız değişkeninin matematik işleminin metinsel temsili, ikinci bağımsız değişkenin ise anahtarlarının ifadede kullanılan değişken adları, değerlerinin ise değişkenlerin eşlenmesi gereken görüntü bantları olduğu Resimdeki bantlar, sözlük yerine b("band name") veya b(index) (ör. b(0)) olarak adlandırılabilir. Bant haritası sözlüğü kullanıldığında bantlar, giriş dışındaki resimlerden tanımlanabilir. expression() işlevinin, iki tam sayı bölündüğünde kalanı atıp tam sayı döndüren "yuvarlanan bölme"yi kullandığını unutmayın. Örneğin, 10 / 20 = 0. Bu davranışı değiştirmek için operandlardan birini 1.0 ile çarpın: 10 * 1.0 / 20 = 0.5. Birden fazla kaynak görüntüden alınan bantlar değerlendirilirken yalnızca maskesiz piksellerin kesişimi dikkate alınır ve maskesiz olarak döndürülür. Desteklenen ifade operatörleri aşağıdaki tabloda listelenmiştir.

expression() için operatörler
Tür Sembol Ad
Aritmetik + - * / % ** Toplama, Çıkarma, Çarpma, Bölme, Mod, Üs
İlişkisel == != < > <= >= Eşit, Eşit Değil, Küçüktür, Büyüktür vb.
Mantıksal && || ! ^ Ve, Veya, Değil, Xor
Üçlü ? : If then else