NDVI, कलेक्शन पर फ़ंक्शन को मैप करना, क्वालिटी मोज़ेकिंग

इससे पहले, आपने Landsat के अलग-अलग सीन पाने का तरीका सीखा था. इसके लिए, आपको कुछ ऐसा करना होगा, जहां l8 और point, Landsat 8 TOA कलेक्शन और दिलचस्पी के इलाके की ज्यामिति को दिखाने वाले इंपोर्ट हैं:

कोड एडिटर (JavaScript)

// Define a point of interest. Use the UI Drawing Tools to import a point
// geometry and name it "point" or set the point coordinates with the
// ee.Geometry.Point() function as demonstrated here.
var point = ee.Geometry.Point([-122.292, 37.9018]);

// Import the Landsat 8 TOA image collection.
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

// Get the least cloudy image in 2015.
var image = ee.Image(
  l8.filterBounds(point)
    .filterDate('2015-01-01', '2015-12-31')
    .sort('CLOUD_COVER')
    .first()
);

मान लें कि अब आपको Landsat इमेज से, नॉर्मलाइज़्ड डिफ़रेंस वेजिटेशन इंडेक्स (एनडीवीआई) इमेज को कंप्यूट करना है. वनस्पतियां, इलेक्ट्रोमैग्नेटिक स्पेक्ट्रम के नियर-इन्फ़्रारेड (एनआईआर) हिस्से में रोशनी को रिफ़्लेक्ट करती हैं और लाल हिस्से में रोशनी को सोखती हैं (वनस्पतियों से एनआईआर रिफ़्लेक्टेंस के बारे में ज़्यादा जानें). एनडीवीआई इसका इस्तेमाल करके एक वैल्यू बनाता है. यह वैल्यू, किसी पिक्सल पर होने वाली फ़ोटोसिंथेटिक गतिविधि को दिखाती है. इसका फ़ॉर्मूला (NIR - red) / (NIR + red) है. इससे 1 और -1 के बीच की संख्या मिलती है. इसमें ज़्यादा फ़ोटोसिंथेटिक गतिविधि वाले पिक्सल में एनडीवीआई ज़्यादा होता है. Earth Engine में एनडीवीआई की गणना करने का एक तरीका यह है:

कोड एडिटर (JavaScript)

// Compute the Normalized Difference Vegetation Index (NDVI).
var nir = image.select('B5');
var red = image.select('B4');
var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI');

// Display the result.
Map.centerObject(image, 9);
var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']};
Map.addLayer(ndvi, ndviParams, 'NDVI image');

नतीजा, इमेज 8 जैसा दिखना चाहिए. ध्यान दें कि हम एनआईआर और रेड बैंड पाने के लिए, select() फ़ंक्शन का इस्तेमाल करते हैं. इसके बारे में आपने मास्किंग के पिछले सेक्शन में जाना था. इसके बाद, इमेज के मैथमैटिकल ऑपरेटर का इस्तेमाल करके एनडीवीआई का हिसाब लगाएं. आपने Image मैथ के सेक्शन में भी इसके बारे में पहले देखा था. आखिर में, इमेज को पैलेट के साथ दिखाएं. यहां हमने पैलेट में हेक्स स्ट्रिंग के बजाय, रंगों के नाम इस्तेमाल किए हैं. (ज़्यादा जानकारी के लिए, सीएसएस कलर के बारे में यह बाहरी रेफ़रंस देखें.)

Tutorial_api_08_ndvi.png
आठवीं इमेज. किसी एक लैंडसैट सीन के लिए एनडीवीआई. नीला रंग कम एनडीवीआई और हरा रंग ज़्यादा एनडीवीआई दिखाता है.

नॉर्मलाइज़्ड डिफ़्रेंस ऑपरेशन, रिमोट सेंसिंग में बहुत आम है. इसलिए, ee.Image पर एक शॉर्टकट फ़ंक्शन मौजूद है. यह पिछले उदाहरण में दिए गए कोड को आसान बनाने के लिए काम का है:

कोड एडिटर (JavaScript)

var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

किसी कलेक्शन पर फ़ंक्शन को मैप करना

मान लें कि अब आपको इमेज कलेक्शन में मौजूद हर इमेज में एनडीवीआई जोड़ना है. Earth Engine में ऐसा करने के लिए, कलेक्शन पर कोई फ़ंक्शन map() करें. map() और Map ऑब्जेक्ट को एक न समझें. पहला तरीका, कलेक्शन पर लागू होता है. इसमें मैप का इस्तेमाल, पैरलल कंप्यूटिंग के लिए किया जाता है. इससे कलेक्शन के हर एलिमेंट पर फ़ंक्शन लागू होता है. यह फ़ंक्शन, कलेक्शन के हर एलिमेंट पर लागू होने वाले ऑपरेशन तय करता है. आपने JavaScript ट्यूटोरियल में एक आसान फ़ंक्शन देखा है. हालांकि, अब हम एक ऐसा फ़ंक्शन बनाएंगे जिसमें Earth Engine की सुविधाएं शामिल होंगी. उदाहरण के लिए, पिछले एनडीवीआई कोड को किसी ऐसे फ़ंक्शन में कॉपी करें जो एनडीवीआई बैंड के साथ इनपुट इमेज दिखाता है:

कोड एडिटर (JavaScript)

var addNDVI = function(image) {
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
  return image.addBands(ndvi);
};

// Test the addNDVI function on a single image.
var ndvi = addNDVI(image).select('NDVI');

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

कोड एडिटर (JavaScript)

var withNDVI = l8.map(addNDVI);

यह पुष्टि करने के लिए कि इस कलेक्शन की हर इमेज में एनडीवीआई बैंड जोड़ा गया है, withNDVI कलेक्शन को मैप में जोड़ें और इंस्पेक्टर टैब की मदद से, किसी भी जगह के बारे में क्वेरी करें. आपको दिखेगा कि कलेक्शन की हर इमेज में अब NDVI नाम का एक बैंड है.

सबसे ज़्यादा हरे पिक्सल वाला कंपोज़िट बनाना

अब आपने एक इमेज कलेक्शन बना लिया है, जिसमें हर इमेज में एक एनडीवीआई बैंड है. अब हम कंपोज़िट बनाने का एक नया तरीका एक्सप्लोर कर सकते हैं: qualityMosaic(). आपको Landsat पाथ के बीच में अंतर दिख सकता है. ऐसा मीडियन पिक्सल कंपोज़िट में भी हो सकता है. इसकी एक वजह, फ़िनोलॉजी में अंतर हो सकता है. ऐसा इसलिए होता है, क्योंकि आस-पास के पाथ की इमेज अलग-अलग समय पर इकट्ठा की जाती हैं. खास तौर पर, आठ दिनों के अंतराल पर. इसे कम करने का एक तरीका यह है कि कंपोज़िट में पिक्सल वैल्यू को करीब-करीब एक ही फ़ेनोलॉजिकल स्टेज से सेट करने की कोशिश करें. उदाहरण के लिए, पौधों के सबसे ज़्यादा हरे होने का समय (जब पत्तियां मौजूद हों और फ़ोटोसिंथेसिस की प्रक्रिया चालू हो). अगर हम ज़्यादा से ज़्यादा हरियाली को ज़्यादा से ज़्यादा एनडीवीआई से तय करें, तो हम qualityMosaic() का इस्तेमाल करके एक कंपोज़िट बना सकते हैं. इसमें हर पिक्सल में, कलेक्शन का ज़्यादा से ज़्यादा एनडीवीआई पिक्सल शामिल होता है. अब आपके पास अपने withNDVI कलेक्शन में, जोड़े गए एनडीवीआई बैंड का इस्तेमाल करने का विकल्प है:

कोड एडिटर (JavaScript)

// Make a "greenest" pixel composite.
var greenest = withNDVI.qualityMosaic('NDVI');

// Display the result.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(greenest, visParams, 'Greenest pixel composite');

इस कोड का नतीजा, इमेज 9 जैसा दिखना चाहिए. इमेज 6 में दिखाए गए मीडियन कंपोज़िट की तुलना इमेज 9 से करने पर, यह देखा जा सकता है कि सबसे हरे पिक्सल वाला कंपोज़िट वाकई ज़्यादा हरा है. हालांकि, जलाशयों की बारीकी से जांच करने पर, एक अलग समस्या सामने आती है. खास तौर पर, अब पानी के स्रोत धुंधले दिखते हैं. ऐसा qualityMosaic() तरीके के काम करने के तरीके की वजह से होता है: हर जगह पर, पूरी टाइम सीरीज़ की जांच की जाती है. साथ ही, एनडीवीआई बैंड में सबसे ज़्यादा वैल्यू वाले पिक्सल को कंपोज़िट वैल्यू के तौर पर सेट किया जाता है. पानी की तुलना में बादलों के ऊपर एनडीवीआई ज़्यादा होता है. इसलिए, पानी वाले इलाकों में बादलों वाले पिक्सल दिखते हैं. वहीं, वनस्पति वाले सभी इलाके हरे दिखते हैं, क्योंकि जब पिक्सल में मौजूद वनस्पति प्रकाश संश्लेषण करती है, तब एनडीवीआई सबसे ज़्यादा होता है.

Tutorial_api_09_greenest.png
नौवीं इमेज. Landsat 8 का सबसे हरा पिक्सल कंपोज़िट.

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