Earth Engine इमेज रजिस्ट्रेशन एल्गोरिदम को इमेज अलाइन करने के लिए, आखिरी चरण के तौर पर डिज़ाइन किया गया है. यह माना जाता है कि रजिस्टर की जाने वाली इमेज, पहले से ही अलाइनमेंट के शुरुआती चरणों से गुज़र चुकी हैं. इसलिए, वे पहले से ही एक-दूसरे के कुछ डिग्री के अंदर घुमाव में हैं और सिर्फ़ थोड़े से ट्रांसलेशन में अंतर है. रजिस्टर करने के लिए, "रबर-शीट" तकनीक का इस्तेमाल किया जाता है. इससे, ऑर्थोरेटिकफ़िकेशन की गड़बड़ियों और पहले की प्रोसेसिंग से जुड़े अन्य आर्टफ़ैक्ट को ठीक करने के लिए, स्थानीय इमेज को वारप किया जा सकता है. अलाइनमेंट की बुनियादी तकनीक, इमेज के बीच संबंध है. इसलिए, इनपुट और रेफ़रंस इमेज के बैंड, दिखने में एक जैसे होने चाहिए, ताकि एल्गोरिदम सही अलाइनमेंट का हिसाब लगा सके.
इमेज का डिसप्लेसमेंट
किसी इमेज को रजिस्टर करने के दो चरण हैं: displacement()
का इस्तेमाल करके, डिसप्लेसमेंट इमेज तय करना और फिर displace()
का इस्तेमाल करके उसे लागू करना. रजिस्टर करने के लिए, इमेज की जोड़ी और ज़्यादा से ज़्यादा डिसप्लेसमेंट पैरामीटर (maxOffset
) के तौर पर ज़रूरी इनपुट की ज़रूरत होती है.
displacement()
एल्गोरिदम, रेफ़रंस इमेज, ज़्यादा से ज़्यादा डिसप्लेसमेंट पैरामीटर (maxOffset
), और दो वैकल्पिक पैरामीटर लेता है. इन पैरामीटर से एल्गोरिदम के काम करने के तरीके में बदलाव होता है. आउटपुट, dx
और dy
बैंड वाली डिसप्लेसमेंट इमेज होती है. इसमें हर पिक्सल पर, डिसप्लेसमेंट वेक्टर के X और Y कॉम्पोनेंट (मीटर में) दिखते हैं.
रजिस्ट्रेशन के दौरान, कॉलिंग और रेफ़रंस इमेज के सभी बैंड का इस्तेमाल मैच करने के लिए किया जाता है. इसलिए, बैंड की संख्या एक जैसी होनी चाहिए. रजिस्ट्रेशन की प्रक्रिया पूरी होने के लिए, इनपुट बैंड दिखने में एक जैसे होने चाहिए. अगर ऐसा नहीं है, तो इन्हें एक-दूसरे से मिलते-जुलते बनाने के लिए, इन्हें पहले से प्रोसेस किया जा सकता है. जैसे, इमेज को स्मूद करना, किनारों का पता लगाना वगैरह. रजिस्ट्रेशन की गणना, कई स्केल वाली और ज़्यादा से ज़्यादा सटीक प्रोसेस का इस्तेमाल करके की जाती है. इसमें, कई स्केल वाले काम करने वाले अनुमान का इस्तेमाल किया जाता है. ये अनुमान, एल्गोरिदम को दिए गए तीन अनुमान पर निर्भर करते हैं:
- कॉलिंग इमेज का डिफ़ॉल्ट प्रोजेक्शन (Pc)
- रेफ़रंस इमेज का डिफ़ॉल्ट प्रोजेक्शन (Pr)
- आउटपुट प्रोजेक्शन (Po)
सबसे ज़्यादा रिज़ॉल्यूशन वाला काम करने वाला प्रोजेक्शन (Pw), Pr के सीआरएस में होगा. यह स्केल, इन तीन प्रोजेक्शन के सबसे कम रिज़ॉल्यूशन से तय होता है, ताकि गिनती कम से कम हो. इसके बाद, Pr से मिले नतीजों को फिर से सैंपल किया जाता है, ताकि वे इनपुट 'प्रोजेक्शन' पैरामीटर से तय किए गए प्रोजेक्शन में हो सकें.
आउटपुट, इन बैंड वाली डिसप्लेसमेंट इमेज होती है:
dx
- किसी रेफ़रंस इमेज के पिक्सल की जगह के लिए, इस बैंड में X दिशा में वह दूरी होती है जिसे कॉलिंग इमेज में मैच करने वाली जगह पर पहुंचने के लिए तय करना होता है. यूनिट, जियोडेसिक मीटर में होती हैं.
dy
- किसी रेफ़रंस इमेज के पिक्सल की जगह के लिए, इस बैंड में Y दिशा में वह दूरी होती है जिसे कॉलिंग इमेज में मैच करने वाली जगह पर पहुंचने के लिए तय करना होता है. यूनिट, जियोडेसिक मीटर में होती हैं.
confidence
- यह, पिक्सल के हिसाब से, विस्थापन के कॉन्फ़िडेंस का अनुमान है. इसमें 0 का मतलब कम कॉन्फ़िडेंस और 1 का मतलब ज़्यादा कॉन्फ़िडेंस है. यह अनुमान, उन इलाकों में मिला कोरिलेशन स्कोर के आधार पर लगाया जाता है जहां मान्य मैच मिले हैं. जिन इलाकों में कोई मैच नहीं मिला है वहां आस-पास के इलाकों के डेटा से कॉन्फ़िडेंस का अनुमान लगाया जाता है. इसके लिए, गॉसियन कर्नेल का इस्तेमाल किया जाता है, ताकि आस-पास के इलाकों के डेटा को ज़्यादा अहमियत दी जा सके.
इस उदाहरण में, हाई रिज़ॉल्यूशन वाली दो Terra Bella इमेज के बीच, विस्थापन की माप और कोण का हिसाब लगाया गया है:
कोड एडिटर (JavaScript)
// Load the two images to be registered. var image1 = ee.Image('SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL/s01_20150502T082736Z'); var image2 = ee.Image('SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL/s01_20150305T081019Z'); // Use bicubic resampling during registration. var image1Orig = image1.resample('bicubic'); var image2Orig = image2.resample('bicubic'); // Choose to register using only the 'R' band. var image1RedBand = image1Orig.select('R'); var image2RedBand = image2Orig.select('R'); // Determine the displacement by matching only the 'R' bands. var displacement = image2RedBand.displacement({ referenceImage: image1RedBand, maxOffset: 50.0, patchWidth: 100.0 }); // Compute image offset and direction. var offset = displacement.select('dx').hypot(displacement.select('dy')); var angle = displacement.select('dx').atan2(displacement.select('dy')); // Display offset distance and angle. Map.addLayer(offset, {min:0, max: 20}, 'offset'); Map.addLayer(angle, {min: -Math.PI, max: Math.PI}, 'angle'); Map.setCenter(37.44,0.58, 15);
इमेज को खींचना और छोड़ना
किसी इमेज को दूसरी इमेज से मैच करने के लिए, उसे दो तरीकों से वारप किया जा सकता है: displace()
या
register()
. displace()
एल्गोरिदम, डिसप्लेसमेंट इमेज को पहले दो बैंड के तौर पर dx
और dy
बैंड के साथ लेता है और इमेज को उसी हिसाब से वारप करता है. आउटपुट इमेज, इनपुट इमेज के बैंड को डिसप्लेसमेंट इमेज में मौजूद ऑफ़सेट के हिसाब से, वॉर्प करने पर बनेगी. पिछले उदाहरण में कैलकुलेट किए गए डिसप्लेसमेंट का इस्तेमाल करके:
कोड एडिटर (JavaScript)
// Use the computed displacement to register all original bands. var registered = image2Orig.displace(displacement); // Show the results of co-registering the images. var visParams = {bands: ['R', 'G', 'B'], max: 4000}; Map.addLayer(image1Orig, visParams, 'Reference'); Map.addLayer(image2Orig, visParams, 'Before Registration'); Map.addLayer(registered, visParams, 'After Registration');
अगर आपको डिसप्लेसमेंट बैंड की ज़रूरत नहीं है, तो Earth Engine में register()
तरीका उपलब्ध है. यह displacement()
के बाद displace()
को कॉल करने का शॉर्टकट है. उदाहरण के लिए:
कोड एडिटर (JavaScript)
var alsoRegistered = image2Orig.register({ referenceImage: image1Orig, maxOffset: 50.0, patchWidth: 100.0 }); Map.addLayer(alsoRegistered, visParams, 'Also Registered');
इस उदाहरण में, register()
के नतीजे,
displace()
के नतीजों से अलग हैं. ऐसा इसलिए हुआ, क्योंकि दोनों तरीकों में बैंड के अलग-अलग सेट का इस्तेमाल किया गया था: register()
हमेशा इनपुट इमेज के सभी बैंड का इस्तेमाल करता है, जबकि displacement()
उदाहरण में, displace()
को नतीजा फ़ीड करने से पहले सिर्फ़ लाल बैंड का इस्तेमाल किया गया था. ध्यान दें कि एक से ज़्यादा बैंड का इस्तेमाल करने पर, अगर बैंड के वैरिएंस बहुत अलग-अलग हैं, तो ज़्यादा वैरिएंस वाले बैंड को ज़्यादा अहमियत दी जा सकती है. ऐसा इसलिए, क्योंकि बैंड के स्पेस के बीच के संबंध के स्कोर को जोड़ने पर, बैंड को एक साथ नॉर्मलाइज़ किया जाता है. इससे पता चलता है कि रजिस्टर करते समय, दिखने में सबसे मिलते-जुलते बैंड चुनना कितना ज़रूरी है. पिछले उदाहरण की तरह, डिसप्लेसमेंट का हिसाब लगाने के लिए, किन बैंड का इस्तेमाल किया जाए, यह कंट्रोल करने के लिए displacement()
और
displace()
का इस्तेमाल करें.