আর্থ ইঞ্জিন ইমেজ রেজিস্ট্রেশন অ্যালগরিদমটি ইমেজ সারিবদ্ধ করার জন্য একটি চূড়ান্ত, পোস্ট-অর্থো, সূক্ষ্ম-দানাযুক্ত পদক্ষেপ হিসাবে ডিজাইন করা হয়েছে। এটি অনুমান করা হয় যে নিবন্ধিত করা ছবিগুলি ইতিমধ্যেই প্রাথমিক প্রান্তিককরণের পর্যায়গুলি অতিক্রম করেছে, তাই তারা ইতিমধ্যেই একে অপরের ঘূর্ণনের কয়েক ডিগ্রির মধ্যে রয়েছে এবং শুধুমাত্র ছোট অনুবাদের দ্বারা পৃথক। রেজিস্ট্রেশনে একটি "রাবার-শীট" কৌশল ব্যবহার করা হয়, যা স্থানীয় ইমেজ ওয়ার্পিংকে পূর্বের প্রক্রিয়াকরণ থেকে অর্থোরেক্টিফিকেশন ত্রুটি এবং অন্যান্য শিল্পকর্মের জন্য সংশোধন করার অনুমতি দেয়। অন্তর্নিহিত সারিবদ্ধকরণ কৌশল হল ইমেজ পারস্পরিক সম্পর্ক, তাই ইনপুট এবং রেফারেন্স ইমেজগুলির ব্যান্ডগুলি দৃশ্যত একই হতে হবে যাতে অ্যালগরিদম একটি সঠিক প্রান্তিককরণ গণনা করতে পারে।
চিত্র স্থানচ্যুতি
একটি ইমেজ রেজিস্টার করার দুটি ধাপ রয়েছে: displacement()
ব্যবহার করে ডিসপ্লেসমেন্ট ইমেজ নির্ধারণ করা এবং তারপর displace()
দিয়ে এটি প্রয়োগ করা। প্রয়োজনীয় ইনপুটগুলি হ'ল নিবন্ধন করার জন্য চিত্রগুলির জোড়া, এবং একটি সর্বাধিক স্থানচ্যুতি পরামিতি ( maxOffset
)৷
displacement()
অ্যালগরিদম একটি রেফারেন্স ইমেজ, সর্বোচ্চ ডিসপ্লেসমেন্ট প্যারামিটার ( maxOffset
), এবং দুটি ঐচ্ছিক প্যারামিটার নেয় যা অ্যালগরিদম আচরণকে পরিবর্তন করে। আউটপুট হল dx
এবং dy
ব্যান্ড সহ একটি স্থানচ্যুতি চিত্র যা প্রতিটি পিক্সেলে স্থানচ্যুতি ভেক্টরের X এবং Y উপাদান (মিটারে) দেয়।
কলিং এবং রেফারেন্স ইমেজের সমস্ত ব্যান্ড রেজিস্ট্রেশনের সময় মেলানোর জন্য ব্যবহার করা হয়, তাই ব্যান্ডের সংখ্যা অবশ্যই সমান হতে হবে। নিবন্ধন সফল করার জন্য ইনপুট ব্যান্ডগুলি অবশ্যই দৃশ্যত একই রকম হতে হবে৷ যদি তা না হয়, তাহলে সেগুলিকে আরও একই রকম দেখাতে তাদের পূর্ব-প্রক্রিয়া করা সম্ভব হতে পারে (যেমন মসৃণ করা, প্রান্ত সনাক্তকরণ)। রেজিস্ট্রেশন গণনাগুলি একটি মাল্টিস্কেল, মোটা থেকে সূক্ষ্ম প্রক্রিয়া ব্যবহার করে সঞ্চালিত হয়, (মাল্টিসকেল) কার্যকরী অনুমানগুলি যা অ্যালগরিদমে সরবরাহ করা তিনটি প্রজেকশনের উপর নির্ভর করে:
- কলিং ইমেজের ডিফল্ট প্রজেকশন ( P c )
- রেফারেন্স চিত্রের ডিফল্ট অভিক্ষেপ ( P r )
- আউটপুট অভিক্ষেপ ( P o )
সর্বোচ্চ রেজোলিউশন ওয়ার্কিং প্রজেকশন ( P w হবে P r এর CRS-এ, এই 3টি প্রজেকশনের মোটা রেজোলিউশন দ্বারা নির্ধারিত একটি স্কেলে, গণনাকে কমিয়ে আনার জন্য। P r থেকে ফলাফলগুলিকে তারপর ইনপুট 'প্রজেকশন' প্যারামিটার দ্বারা নির্দিষ্ট করা অভিক্ষেপে পুনরায় স্যাম্পল করা হয়।
আউটপুট নিম্নলিখিত ব্যান্ড সহ একটি স্থানচ্যুতি চিত্র:
-
dx
- একটি প্রদত্ত রেফারেন্স ইমেজ পিক্সেল অবস্থানের জন্য, এই ব্যান্ডটিতে X দিকনির্দেশের দূরত্ব রয়েছে যা কলিং ইমেজে মিলিত অবস্থানে পৌঁছানোর জন্য ভ্রমণ করতে হবে। ইউনিটগুলি জিওডেসিক মিটারে রয়েছে।
-
dy
- একটি প্রদত্ত রেফারেন্স ইমেজ পিক্সেল অবস্থানের জন্য, এই ব্যান্ডটি Y দিক থেকে দূরত্ব ধারণ করে যা কলিং ইমেজে মিলিত অবস্থানে পৌঁছানোর জন্য ভ্রমণ করতে হবে। ইউনিটগুলি জিওডেসিক মিটারে রয়েছে।
-
confidence
- এটি স্থানচ্যুতি আত্মবিশ্বাসের প্রতি-পিক্সেল অনুমান (যেখানে 0 হল কম আত্মবিশ্বাস এবং 1 হল উচ্চ আত্মবিশ্বাস) যেখানে বৈধ মিল পাওয়া গেছে সেই অঞ্চলে পারস্পরিক সম্পর্ক স্কোরের উপর ভিত্তি করে। যেসব অঞ্চলে কোনো মিল পাওয়া যায় নি, আশেপাশের পারস্পরিক সম্পর্ককে উচ্চতর ওজন প্রদানের জন্য গাউসিয়ান কার্নেল ব্যবহার করে কাছাকাছি পারস্পরিক সম্পর্ক থেকে আস্থা অনুমান করা হয়।
নিম্নলিখিত উদাহরণ দুটি উচ্চ-রেজোলিউশন টেরা বেলা ছবির মধ্যে স্থানচ্যুতির মাত্রা এবং কোণ গণনা করে:
কোড এডিটর (জাভাস্ক্রিপ্ট)
// 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);
একটি ইমেজ warping
একটি ইমেজকে অন্য ইমেজের সাথে মেলানোর জন্য দুটি উপায় আছে: displace()
বা register()
। displace()
অ্যালগরিদম প্রথম দুটি ব্যান্ড হিসাবে dx
এবং dy
ব্যান্ড সহ একটি ডিসপ্লেসমেন্ট ইমেজ নেয় এবং সেই অনুযায়ী ইমেজটিকে বিকৃত করে। আউটপুট চিত্রটি স্থানচ্যুতি চিত্রে উপস্থিত অফসেটগুলির দ্বারা ইনপুট চিত্রের ব্যান্ডগুলিকে বিকৃত করার ফলাফল হবে। পূর্ববর্তী উদাহরণে গণনা করা স্থানচ্যুতি ব্যবহার করে:
কোড এডিটর (জাভাস্ক্রিপ্ট)
// 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');
আপনার যদি ডিসপ্লেসমেন্ট ব্যান্ডের প্রয়োজন না হয়, আর্থ ইঞ্জিন register()
পদ্ধতি প্রদান করে, যা displacement()
এর পরে displace()
কল করার একটি শর্টকাট। যেমন:
কোড এডিটর (জাভাস্ক্রিপ্ট)
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()
ব্যবহার করুন।