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