تسجيل الصور

تم تصميم خوارزمية تسجيل الصور في Earth Engine لتكون خطوة نهائية دقیقة بعد التصحيح المتعمّد للمستخدِم في محاذاة الصور. من المفترض أنّ الصور المراد تسجيلها قد مرّت بمراحل المحاذاة الأولية، لذا فهي تختلف عن بعضها بدرجات قليلة من الدوران، ولا تختلف سوى بتحريك طفيف. يستخدم التعيين تقنية "الصفيحة المطاطية"، ما يسمح بتحريف الصورة على مستوى محلي لتصحيح أخطاء التصحيح ال Orthorectification والعناصر الأخرى المنتجة من عمليات المعالجة السابقة. تعتمد تقنية المحاذاة الأساسية على قياس صلة بين الصور، لذا يجب أن تكون نطاقات الصور المدرَجة والصور المرجعية متشابهة من الناحية المرئية لكي تتمكّن الخوارزمية من احتساب محاذاة دقيقة.

إزاحة الصورة

هناك خطوتان لتسجيل صورة: تحديد صورة الانحراف باستخدام displacement()، ثم تطبيقها باستخدام displace(). المدخلات المطلوبة هي زوج الصور المطلوب تسجيله ومَعلمة الحد الأقصى للزحزحة (maxOffset).

تستخدِم خوارزمية displacement() صورة مرجعية ومَعلمة الحد الأقصى للزحزحة (maxOffset) ومَعلمتَين اختياريتين تُعدِّلان سلوك الخوارزمية. الناتج هو صورة إزاحة تتضمّن النطاقَين dx وdy اللذَين يقدّمان مكوّنات X وY (بالمتر) لخطّ الإزاحة في كل بكسل.

تُستخدَم جميع نطاقات الصور المُرسَلة والمرجعية للمطابقة أثناء التسجيل، لذا يجب أن يكون عدد النطاقات متطابقًا تمامًا. يجب أن تكون نطاقات الإدخال متشابهة من الناحية المرئية لكي يتم تسجيلها بنجاح. إذا لم يكن الأمر كذلك، قد يكون من الممكن معالجتها مسبقًا (مثل التمويه ورصد الحواف) لجعلها تبدو أكثر تشابهًا. يتم إجراء عمليات حسابية التسجيل باستخدام عملية متعددة المقاييس من الخشن إلى الدقيق، مع توقّعات عمل (متعددة المقاييس) ت depend on three of the projections supplied to the algorithm:

  1. العرض التلقائي لصورة المتصل (Pc)
  2. الإسقاط التلقائي للصورة المرجعية (Pr)
  3. إسقاط الإخراج (Po)

سيكون الإسقاط العامل بأعلى درجة دقة (Pw) في نظام CRS لمحاولة Pr، وذلك بمقياس يحدّده أدنى درجة دقة من هذه الإسقاطات الثلاثة، وذلك لتقليل العمليات الحسابية. بعد ذلك، تتم مجددًا إعادة تحليل النتائج من Pr لتصبح في الإسقاط المحدّد بالمَعلمة "projection".

الناتج هو صورة انزياح تتضمّن النطاقات التالية:

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() للتحكّم في النطاقات المستخدَمة لاحتساب الإزاحة.