الگوریتم ثبت تصویر Earth Engine به گونه ای طراحی شده است که یک مرحله نهایی، پس ارتو و ریز دانه در تراز کردن تصاویر باشد. فرض بر این است که تصاویری که باید ثبت شوند قبلاً مراحل تراز اولیه را گذراندهاند، بنابراین آنها قبلاً در چند درجه چرخش از یکدیگر هستند و تنها با ترجمههای کوچک متفاوت هستند. ثبت از یک تکنیک "ورق لاستیکی" استفاده می کند که به تاب برداشتن تصویر محلی اجازه می دهد تا خطاهای تصحیح راستگویی و سایر مصنوعات پردازش قبلی را تصحیح کند. تکنیک هم ترازی اساسی، همبستگی تصویر است، بنابراین باندهای تصاویر ورودی و مرجع باید از نظر بصری مشابه باشند تا الگوریتم بتواند یک تراز دقیق را محاسبه کند.
جابجایی تصویر
دو مرحله برای ثبت یک تصویر وجود دارد: تعیین تصویر جابجایی با استفاده از displacement()
و سپس اعمال آن با displace()
. ورودی های مورد نیاز جفت تصویر برای ثبت و یک پارامتر جابجایی حداکثر ( maxOffset
) است.
الگوریتم displacement()
یک تصویر مرجع، یک پارامتر جابجایی حداکثر ( maxOffset
) و دو پارامتر اختیاری می گیرد که رفتار الگوریتم را تغییر می دهند. خروجی یک تصویر جابجایی با باندهای dx
و dy
است که مولفه های X و Y (بر حسب متر) بردار جابجایی را در هر پیکسل نشان می دهد.
تمام باندهای تصاویر فراخوان و مرجع برای تطبیق در هنگام ثبت نام استفاده می شود، بنابراین تعداد باندها باید دقیقاً برابر باشد. باندهای ورودی باید از نظر بصری مشابه باشند تا ثبت نام موفق شود. اگر اینطور نیست، ممکن است بتوان آنها را از قبل پردازش کرد (به عنوان مثال صاف کردن، تشخیص لبه) تا شبیه تر به نظر برسند. محاسبات ثبت با استفاده از یک فرآیند چند مقیاسی، درشت به ریز، با پیش بینی های کاری (چند مقیاسی) انجام می شود که به سه پیش بینی ارائه شده به الگوریتم بستگی دارد:
- طرح پیش فرض تصویر فراخوان ( P c )
- طرح پیش فرض تصویر مرجع ( Pr )
- پیش بینی خروجی ( P o )
پیشبینی کاری با بالاترین وضوح ( Pw در CRS Pr خواهد بود، در مقیاسی که با درشتترین وضوح این 3 پیشبینی تعیین میشود، تا محاسبات را به حداقل برسانند. نتایج Pr پس از آن مجدداً نمونهبرداری میشوند تا در طرحریزی مشخص شده توسط پارامتر ورودی «projection» قرار گیرند.
خروجی یک تصویر جابجایی با باندهای زیر است:
-
dx
- برای یک مکان پیکسل تصویر مرجع معین، این باند حاوی فاصله ای در جهت X است که باید طی شود تا به مکان منطبق در تصویر فراخوانی برسد. واحدها در مترهای ژئودزیکی هستند.
-
dy
- برای یک مکان پیکسل تصویر مرجع معین، این باند حاوی مسافتی در جهت Y است که برای رسیدن به مکان منطبق در تصویر فراخوان باید طی شود. واحدها در مترهای ژئودزیکی هستند.
-
confidence
- این یک تخمین در هر پیکسل از اطمینان جابجایی است (که در آن 0 اطمینان کم و 1 اطمینان بالا است) بر اساس نمرات همبستگی در مناطقی که مطابقت های معتبر پیدا شد. در مناطقی که هیچ منطبقی یافت نشد، اطمینان از همبستگی های نزدیک با استفاده از هسته گاوسی برای ارائه وزن بالاتر به همبستگی های نزدیک تخمین زده می شود.
مثال زیر بزرگی و زاویه جابجایی بین دو تصویر Terra Bella با وضوح بالا را محاسبه می کند:
ویرایشگر کد (جاوا اسکریپت)
// 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
به عنوان دو باند اول می گیرد و بر این اساس تصویر را تاب می دهد. تصویر خروجی نتیجه تاب برداشتن باندهای تصویر ورودی توسط افست های موجود در تصویر جابجایی خواهد بود. با استفاده از جابجایی های محاسبه شده در مثال قبلی:
ویرایشگر کد (جاوا اسکریپت)
// 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()
است. به عنوان مثال:
ویرایشگر کد (جاوا اسکریپت)
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()
استفاده کنید.