Operasi Matematika

Matematika gambar dapat dilakukan menggunakan operator seperti add() dan subtract(), tetapi untuk komputasi kompleks dengan lebih dari beberapa istilah, fungsi expression() memberikan alternatif yang baik. Lihat bagian berikut untuk mengetahui informasi selengkapnya tentang operator dan ekspresi.

Operator

Operator matematika melakukan operasi aritmatika dasar pada band gambar. Fungsi ini memerlukan dua input: dua gambar atau satu gambar dan istilah konstan, yang ditafsirkan sebagai gambar konstan satu band tanpa piksel yang disamarkan. Operasi dilakukan per piksel untuk setiap band.

Sebagai contoh dasar, pertimbangkan tugas menghitung Normalized Difference Vegetation Index (NDVI) menggunakan citra VIIRS, dengan operator add(), subtract(), dan divide() digunakan:

Editor Kode (JavaScript)

// 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')));

Penyiapan Python

Lihat halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

import ee
import geemap.core as geemap

Colab (Python)

# 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')
        )
    )
)

Hanya persimpangan piksel yang tidak disamarkan di antara dua input yang dipertimbangkan dan ditampilkan sebagai tidak disamarkan, yang lainnya akan disamarkan. Secara umum, jika salah satu input hanya memiliki satu band, input tersebut akan digunakan terhadap semua band di input lainnya. Jika input memiliki jumlah band yang sama, tetapi tidak memiliki nama yang sama, input tersebut akan digunakan secara berpasangan dalam urutan alami. Band output diberi nama untuk input yang lebih panjang dari dua input, atau jika panjangnya sama, dalam urutan input pertama. Jenis piksel output adalah gabungan dari jenis input.

Contoh pengurangan gambar multi-band berikut menunjukkan cara band dicocokkan secara otomatis, sehingga menghasilkan "vektor perubahan" untuk setiap piksel untuk setiap band yang terjadi bersama.

Editor Kode (JavaScript)

// 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.');

Penyiapan Python

Lihat halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

import ee
import geemap.core as geemap

Colab (Python)

# 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)

Di bagian kedua contoh ini, perbedaan kuadrat dihitung menggunakan image.pow(2). Untuk mengetahui daftar lengkap operator matematika yang menangani aritmetika dasar, trigonometri, eksponensial, pembulatan, casting, operasi bitwise, dan lainnya, lihat dokumentasi API.

Ekspresi

Untuk menerapkan ekspresi matematika yang lebih kompleks, pertimbangkan untuk menggunakan image.expression(), yang mengurai representasi teks dari operasi matematika. Contoh berikut menggunakan expression() untuk menghitung Enhanced Vegetation Index (EVI):

Editor Kode (JavaScript)

// 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']});

Penyiapan Python

Lihat halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

import ee
import geemap.core as geemap

Colab (Python)

# 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)

Perhatikan bahwa argumen pertama ke expression() adalah representasi tekstual dari operasi matematika, argumen kedua adalah kamus dengan kunci adalah nama variabel yang digunakan dalam ekspresi dan nilainya adalah band gambar tempat variabel harus dipetakan. Band dalam gambar dapat disebut sebagai b("band name") atau b(index), misalnya b(0), bukan menyediakan kamus. Band dapat ditentukan dari gambar selain input saat menggunakan kamus peta band. Perhatikan bahwa expression() menggunakan "pembagian lantai", yang membuang sisanya dan menampilkan bilangan bulat saat dua bilangan bulat dibagi. Misalnya 10 / 20 = 0. Untuk mengubah perilaku ini, kalikan salah satu operand dengan 1.0: 10 * 1.0 / 20 = 0.5. Hanya persimpangan piksel yang tidak disamarkan yang dipertimbangkan dan ditampilkan sebagai tidak disamarkan saat band dari lebih dari satu gambar sumber dievaluasi. Operator ekspresi yang didukung tercantum dalam tabel berikut.

Operator untuk expression()
Jenis Simbol Nama
Aritmetika + - * / % ** Tambahkan, Kurangi, Kalikan, Bagi, Modulus, Eksponen
Relasional == != < > <= >= Sama dengan, Tidak Sama dengan, Kurang dari, Lebih besar dari, dll.
Logis && || ! ^ And, Or, Not, Xor
Ternary ? : If then else