इमेज कलेक्शन

इमेज कलेक्शन का मतलब, Earth Engine की इमेज के सेट से है. उदाहरण के लिए, लैंडसैट 8 की सभी इमेज का कलेक्शन एक ee.ImageCollection है. जिस एसआरटीएम इमेज पर आपने काम किया है उसकी तरह ही, इमेज कलेक्शन का भी एक आईडी होता है. सिंगल इमेज की तरह ही, इमेज कलेक्शन का आईडी भी ढूंढा जा सकता है. इसके लिए, कोड एडिटर में जाकर Earth Engine डेटा कैटलॉग में खोजें और डेटासेट की ज़्यादा जानकारी वाले पेज पर जाएं. उदाहरण के लिए, 'landsat 8 toa' खोजें और पहले नतीजे पर क्लिक करें. यह नतीजा, USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance डेटासेट से जुड़ा होना चाहिए. इंपोर्ट करें बटन का इस्तेमाल करके उस डेटासेट को इंपोर्ट करें और उसका नाम बदलकर l8 करें या आईडी को इमेज कलेक्शन कंस्ट्रक्टर में कॉपी करें:

कोड एडिटर (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

इमेज के कलेक्शन फ़िल्टर करना

ध्यान देने वाली बात यह है कि इस कलेक्शन में, पूरी दुनिया से इकट्ठा किए गए Landsat 8 के हर सीन को शामिल किया गया है. अक्सर, किसी एक इमेज या इमेज के सबसेट को निकालना मददगार होता है, ताकि एल्गोरिदम को टेस्ट किया जा सके. समय या जगह के हिसाब से कलेक्शन को सीमित करने के लिए, उसे फ़िल्टर करें. उदाहरण के लिए, किसी खास जगह की इमेज दिखाने के लिए, कलेक्शन को फ़िल्टर किया जा सकता है. इसके लिए, पहले ज्यामिति ड्रॉइंग टूल का इस्तेमाल करके, पॉइंट (या लाइन या पॉलीगॉन) की मदद से अपनी पसंद का इलाका तय करें. अपनी पसंद के इलाके पर पैन करें. इसके बाद, ज्यामिति इंपोर्ट पर कर्सर घुमाएं (अगर आपने पहले से ही एक या उससे ज़्यादा ज्यामिति तय की हुई हैं) और +नई लेयर पर क्लिक करें (अगर आपने कोई इंपोर्ट नहीं किया है, तो अगले चरण पर जाएं). पॉइंट ड्रॉइंग टूल () लें और अपनी पसंद के इलाके में एक पॉइंट बनाएं. इंपोर्ट को point नाम दें. अब, l8 कलेक्शन को फ़िल्टर करें, ताकि सिर्फ़ वे इमेज मिलें जो पॉइंट को इंटरसेक्ट करती हैं. इसके बाद, कलेक्शन को सिर्फ़ 2015 में ली गई इमेज तक सीमित करने के लिए, दूसरा फ़िल्टर जोड़ें:

कोड एडिटर (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

यहां, filterBounds() और filterDate(), इमेज कलेक्शन पर ज़्यादा सामान्य filter() तरीके के लिए शॉर्टकट तरीके हैं. यह ee.Filter() को अपने आर्ग्युमेंट के तौर पर लेता है. इन तरीकों के बारे में ज़्यादा जानने के लिए, कोड एडिटर के Docs टैब को एक्सप्लोर करें. filterBounds() का आर्ग्युमेंट वह पॉइंट है जिसे आपने डिजिटाइज़ किया है. वहीं, filterDate() के आर्ग्युमेंट दो तारीखें हैं जिन्हें स्ट्रिंग के तौर पर दिखाया गया है.

ध्यान दें कि फ़िल्टर किए गए कलेक्शन को print() किया जा सकता है. एक बार में 5,000 से ज़्यादा आइटम प्रिंट नहीं किए जा सकते. उदाहरण के लिए, l8 के पूरे कलेक्शन को प्रिंट नहीं किया जा सकता. print() तरीके को लागू करने के बाद, कंसोल में प्रिंट किए गए कलेक्शन की जांच की जा सकती है. ध्यान दें कि जब ज़ीपी () का इस्तेमाल करके ImageCollection को बड़ा किया जाता है, तो features की सूची बड़ी हो जाती है. इसके बाद, आपको इमेज की एक सूची दिखेगी. इनमें से हर इमेज को बड़ा करके उसकी जांच की जा सकती है. किसी इमेज का आईडी ढूंढने का यह एक तरीका है. विश्लेषण के लिए अलग-अलग इमेज पाने का एक और तरीका है. इसके लिए, कलेक्शन को क्रम से लगाएं, ताकि किसी मेटाडेटा प्रॉपर्टी के हिसाब से सबसे नई, सबसे पुरानी या सबसे सही इमेज मिल सके. उदाहरण के लिए, प्रिंट की गई इमेज के कलेक्शन में इमेज ऑब्जेक्ट की जांच करने पर, आपको CLOUD_COVER नाम की मेटाडेटा प्रॉपर्टी दिख सकती है. अपनी पसंद के इलाके में, 2015 में बादलों की सबसे कम मौजूदगी वाली इमेज पाने के लिए, उस प्रॉपर्टी का इस्तेमाल किया जा सकता है:

कोड एडिटर (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

अब इमेज को दिखाया जा सकता है!

विषय से भटकना: आरजीबी इमेज दिखाना

जब किसी मैप में मल्टी-बैंड इमेज जोड़ी जाती है, तो Earth Engine उस इमेज के पहले तीन बैंड चुनता है. साथ ही, उन्हें डिफ़ॉल्ट रूप से लाल, हरे, और नीले रंग में दिखाता है. इसके बाद, डेटा टाइप के हिसाब से उन्हें स्ट्रेच करता है. इसके बारे में पहले बताया गया है. आम तौर पर, इससे काम नहीं चलेगा. उदाहरण के लिए, अगर मैप में Landsat इमेज (पिछले उदाहरण में scene) जोड़ी जाती है, तो नतीजा संतोषजनक नहीं होता:

कोड एडिटर (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

ध्यान दें कि सबसे पहले, मैप को इमेज पर ज़ूम स्केल 9 पर फ़ोकस किया जाता है. इसके बाद, इमेज को visParams पैरामीटर के लिए, खाली ऑब्जेक्ट ({}) के साथ दिखाया जाता है. ज़्यादा जानकारी के लिए, Map.addLayer() दस्तावेज़ देखें. इस वजह से, इमेज को डिफ़ॉल्ट विज़ुअलाइज़ेशन के साथ दिखाया जाता है: पहले तीन बैंड, क्रमशः R, G, B पर मैप होते हैं. साथ ही, इन्हें [0, 1] तक स्ट्रेच किया जाता है, क्योंकि बैंड float डेटा टाइप के होते हैं. इसका मतलब है कि तटीय एरोसोल बैंड ('B1') को लाल रंग में, नीले बैंड ('B2') को हरे रंग में, और हरे बैंड ('B3') को नीले रंग में रेंडर किया जाता है. इमेज को ट्रू-कलर कंपोज़िट के तौर पर रेंडर करने के लिए, आपको Earth Engine को Landsat 8 बैंड 'B4', 'B3', और 'B2' का इस्तेमाल करने के लिए कहना होगा. ये बैंड, क्रमशः R, G, और B के लिए इस्तेमाल किए जाते हैं. visParams ऑब्जेक्ट की bands प्रॉपर्टी का इस्तेमाल करके बताएं कि किन बैंड का इस्तेमाल करना है. इस रेफ़रंस पर जाकर, Landsat बैंड के बारे में ज़्यादा जानें.

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

कोड एडिटर (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

नतीजा, इमेज 5 जैसा दिखना चाहिए. ध्यान दें कि यह कोड, विज़ुअलाइज़ेशन पैरामीटर के ऑब्जेक्ट को एक वैरिएबल को असाइन करता है, ताकि आने वाले समय में इसका इस्तेमाल किया जा सके. आपको जल्द ही पता चलेगा कि इमेज कलेक्शन को विज़ुअलाइज़ करते समय, वह ऑब्जेक्ट काम का होगा!

Tutorial_api_05_true_color.png
पांचवीं इमेज. Landsat 8 TOA रिफ़्लेक्टेंस इमेज, ट्रू-कलर कंपोज़िट के तौर पर, [0, 0.3] तक स्ट्रेच की गई.

अलग-अलग बैंड को विज़ुअलाइज़ करके देखें. एक और पसंदीदा कॉम्बिनेशन 'B5', 'B4', और 'B3' है. इसे फ़ॉल्स-कलर कंपोज़िट कहा जाता है. फ़ॉल्स-कलर कंपोज़िट के कुछ अन्य दिलचस्प उदाहरणों के बारे में यहां बताया गया है.

Earth Engine को बड़े पैमाने पर विश्लेषण करने के लिए डिज़ाइन किया गया है. इसलिए, आपके पास सिर्फ़ एक सीन के साथ काम करने की पाबंदी नहीं है. अब पूरे कलेक्शन को आरजीबी कंपोज़िट के तौर पर दिखाने का समय आ गया है!

इमेज के कलेक्शन दिखाना

मैप में इमेज कलेक्शन जोड़ने का तरीका, मैप में इमेज जोड़ने के तरीके जैसा ही है. उदाहरण के लिए, l8 कलेक्शन में 2016 की इमेज और पहले से तय किए गए visParams ऑब्जेक्ट का इस्तेमाल करके,

कोड एडिटर (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

ध्यान दें कि अब ज़ूम आउट करके, लगातार मोज़ेक देखा जा सकता है.इसमें Landsat की इमेज इकट्ठा की जाती हैं. जैसे, ज़मीन के ऊपर. यह भी ध्यान रखें कि Inspector टैब का इस्तेमाल करने और इमेज पर क्लिक करने पर, आपको इंस्पेक्टर के Pixels सेक्शन में पिक्सल वैल्यू की सूची (या चार्ट) और Objects सेक्शन में इमेज ऑब्जेक्ट की सूची दिखेगी.

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