गणितीय ऑपरेशन

इमेज मैथ का इस्तेमाल, add() और subtract() जैसे ऑपरेटर की मदद से किया जा सकता है. हालांकि, एक से ज़्यादा शब्दों वाले जटिल कैलकुलेशन के लिए, expression() फ़ंक्शन एक अच्छा विकल्प है. ऑपरेटर और एक्सप्रेशन के बारे में ज़्यादा जानकारी के लिए, यहां दिए गए सेक्शन देखें.

ऑपरेटर

मैथ ऑपरेटर, इमेज बैंड पर बुनियादी अंकगणितीय ऑपरेशन करते हैं. इनमें दो इनपुट होते हैं: दो इमेज या एक इमेज और एक कॉन्स्टेंट टर्म, जिसे बिना मास्क वाले पिक्सल वाली सिंगल-बैंड कॉन्स्टेंट इमेज के तौर पर समझा जाता है. हर बैंड के लिए, हर पिक्सल पर कार्रवाइयां की जाती हैं.

बुनियादी उदाहरण के तौर पर, VIIRS इमेजरी का इस्तेमाल करके, नॉर्मलाइज़्ड डिफ़रेंस वनस्पति सूचकांक (एनडीवीआई) का हिसाब लगाने के टास्क पर विचार करें. इसमें add(), subtract(), और divide() ऑपरेटर का इस्तेमाल किया जाता है:

कोड एडिटर (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')));

Python सेटअप

Python API के बारे में जानकारी पाने और इंटरैक्टिव डेवलपमेंट के लिए geemap का इस्तेमाल करने के लिए, Python एनवायरमेंट पेज देखें.

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

दोनों इनपुट के बीच, सिर्फ़ बिना मास्क वाले पिक्सल के इंटरसेक्शन को माना जाता है और बिना मास्क वाले पिक्सल के तौर पर दिखाया जाता है. बाकी सभी पिक्सल को मास्क किया जाता है. आम तौर पर, अगर किसी इनपुट में सिर्फ़ एक बैंड है, तो उसका इस्तेमाल दूसरे इनपुट के सभी बैंड के लिए किया जाता है. अगर इनपुट में बैंड की संख्या एक जैसी है, लेकिन नाम अलग-अलग हैं, तो इनका इस्तेमाल, सामान्य क्रम में एक साथ किया जाता है. आउटपुट बैंड का नाम, दो में से लंबे इनपुट के हिसाब से रखा जाता है. अगर दोनों इनपुट की लंबाई बराबर है, तो पहले इनपुट के क्रम में नाम रखा जाता है. आउटपुट पिक्सल का टाइप, इनपुट टाइप का यूनियन होता है.

मल्टी-बैंड इमेज घटाने के इस उदाहरण में दिखाया गया है कि बैंड अपने-आप कैसे मैच होते हैं. इससे, एक साथ दिखने वाले हर बैंड के लिए हर पिक्सल का "बदलाव वेक्टर" बनता है.

कोड एडिटर (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.');

Python सेटअप

Python API के बारे में जानकारी पाने और इंटरैक्टिव डेवलपमेंट के लिए geemap का इस्तेमाल करने के लिए, Python एनवायरमेंट पेज देखें.

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)

इस उदाहरण के दूसरे हिस्से में, अंतर के वर्ग का हिसाब लगाने के लिए image.pow(2) का इस्तेमाल किया गया है. बुनियादी अंकगणित, त्रिकोणमिति, घातांक, राउंडिंग, कास्टिंग, बिटवाइज़ ऑपरेशन वगैरह को मैनेज करने वाले गणितीय ऑपरेटर की पूरी सूची के लिए, एपीआई दस्तावेज़ देखें.

एक्सप्रेशन

ज़्यादा जटिल गणितीय एक्सप्रेशन लागू करने के लिए, image.expression() का इस्तेमाल करें. यह किसी गणितीय ऑपरेशन के टेक्स्ट वर्शन को पार्स करता है. इस उदाहरण में, बेहतर वनस्पति सूचकांक (ईवीआई) का हिसाब लगाने के लिए expression() का इस्तेमाल किया गया है:

कोड एडिटर (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']});

Python सेटअप

Python API के बारे में जानकारी पाने और इंटरैक्टिव डेवलपमेंट के लिए geemap का इस्तेमाल करने के लिए, Python एनवायरमेंट पेज देखें.

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)

ध्यान दें कि expression() का पहला आर्ग्युमेंट, मैथ ऑपरेशन का टेक्स्ट वर्शन है. दूसरा आर्ग्युमेंट एक डिक्शनरी है, जिसमें एक्सप्रेशन में इस्तेमाल किए गए वैरिएबल के नाम, की के तौर पर मौजूद होते हैं. साथ ही, वैल्यू के तौर पर इमेज बैंड मौजूद होते हैं, जिन पर वैरिएबल को मैप किया जाना चाहिए. इमेज में मौजूद बैंड को डिक्शनरी के बजाय, b("band name") या b(index), उदाहरण के लिए b(0) के तौर पर दिखाया जा सकता है. बैंड मैप डिक्शनरी का इस्तेमाल करते समय, इनपुट के अलावा अन्य इमेज से भी बैंड तय किए जा सकते हैं. ध्यान दें कि expression(), "फ़्लोर डिवीज़न" का इस्तेमाल करता है. यह दो पूर्णांकों को बांटने पर, शेष को खारिज कर देता है और पूर्णांक दिखाता है. उदाहरण के लिए 10 / 20 = 0. इस व्यवहार को बदलने के लिए, ऑपरेंड में से किसी एक को 1.0: 10 * 1.0 / 20 = 0.5 से गुणा करें. एक से ज़्यादा सोर्स इमेज के बैंड का आकलन करने पर, सिर्फ़ बिना मास्क वाले पिक्सल के इंटरसेक्शन को बिना मास्क वाले पिक्सल के तौर पर माना जाता है और दिखाया जाता है. इस्तेमाल किए जा सकने वाले एक्सप्रेशन ऑपरेटर की सूची, नीचे दी गई टेबल में दी गई है.

expression() के लिए ऑपरेटर
टाइप चिह्न नाम
अरिथमेटिक + - * / % ** जोड़ना, घटाना, गुणा करना, भाग देना, मॉड्यूलस, एक्सपोनेंट
रिलेशनल == != < > <= >= बराबर है, बराबर नहीं है, इससे कम है, इससे ज़्यादा है वगैरह.
लॉजिकल && || ! ^ And, Or, Not, Xor
Ternary ? : If then else