การลงทะเบียนรูปภาพ

อัลกอริทึมการลงทะเบียนรูปภาพของ Earth Engine ออกแบบมาเพื่อเป็นขั้นตอนสุดท้ายในการจัดแนวรูปภาพแบบละเอียดหลังการจัดแนว ระบบจะถือว่ารูปภาพที่จะลงทะเบียนผ่านขั้นตอนการจัดแนวขั้นต้นแล้ว ดังนั้นรูปภาพจะหมุนอยู่ในองศาที่ใกล้เคียงกันอยู่แล้ว และแตกต่างกันเพียงเล็กน้อยในการแปล การลงทะเบียนใช้เทคนิค "ยางยืด" ซึ่งช่วยให้การบิดเบือนของภาพในท้องถิ่นสามารถแก้ไขข้อผิดพลาดในการปรับภาพให้ตรงและข้อบกพร่องอื่นๆ จากการประมวลผลก่อนหน้านี้ เทคนิคการจัดแนวพื้นฐานคือความเกี่ยวข้องของรูปภาพ ดังนั้นแถบของรูปภาพอินพุตและรูปภาพอ้างอิงต้องมีลักษณะคล้ายกันเพื่อให้อัลกอริทึมคำนวณการจัดแนวได้อย่างถูกต้อง

การเปลี่ยนตำแหน่งรูปภาพ

การลงทะเบียนรูปภาพมี 2 ขั้นตอน ได้แก่ การกำหนดรูปภาพการเปลี่ยนตำแหน่งโดยใช้ displacement() แล้วนำไปใช้กับ displace() อินพุตที่จําเป็นคือคู่รูปภาพที่จะลงทะเบียน และพารามิเตอร์การกระจัดสูงสุด (maxOffset)

อัลกอริทึม displacement() จะใช้รูปภาพอ้างอิง พารามิเตอร์การกระจัดสูงสุด (maxOffset) และพารามิเตอร์ที่ไม่บังคับ 2 รายการที่แก้ไขลักษณะการทํางานของอัลกอริทึม เอาต์พุตคือรูปภาพการกระจัดที่มีแถบ dx และ dy ซึ่งระบุองค์ประกอบ X และ Y (เป็นเมตร) ของเวกเตอร์การกระจัดที่แต่ละพิกเซล

ระบบจะใช้แถบทั้งหมดของรูปภาพเรียกใช้และรูปภาพอ้างอิงสำหรับการจับคู่ระหว่างการลงทะเบียน ดังนั้นจำนวนแถบต้องเท่ากันทุกประการ แถบอินพุตต้องมีลักษณะคล้ายกันเพื่อให้การลงทะเบียนสําเร็จ หากไม่ใช่กรณีนี้ คุณอาจประมวลผลรูปภาพก่อน (เช่น การปรับให้เรียบ การตรวจหาขอบ) เพื่อให้รูปภาพดูคล้ายกันมากขึ้นได้ การคํานวณการลงทะเบียนจะทําโดยใช้กระบวนการแบบหลายขนาดจากหยาบไปละเอียด โดยมีโปรเจ็กชันที่ใช้งานได้ (หลายขนาด) ซึ่งขึ้นอยู่กับโปรเจ็กชัน 3 รายการที่ส่งไปยังอัลกอริทึม ดังนี้

  1. การฉายภาพเริ่มต้นของรูปภาพการโทร (Pc)
  2. การฉายภาพเริ่มต้นของรูปภาพอ้างอิง (Pr)
  3. การฉายภาพเอาต์พุต (Po)

การฉายภาพที่ใช้ทำงานที่มีความละเอียดสูงสุด (Pw) จะอยู่ใน CRS ของ Pr ที่มาตราส่วนซึ่งกำหนดโดยความละเอียดที่หยาบที่สุดของการฉายภาพ 3 รูปแบบนี้ เพื่อลดการคำนวณ จากนั้นระบบจะสุ่มตัวอย่างผลลัพธ์จาก Pr อีกครั้งเพื่อให้อยู่ในโปรเจ็กชันที่ระบุโดยพารามิเตอร์ "projection" ของอินพุต

เอาต์พุตคือภาพการกระจัดที่มีย่านความถี่ต่อไปนี้

dx
สำหรับตําแหน่งพิกเซลของรูปภาพอ้างอิงหนึ่งๆ แถบนี้จะมีระยะทางในทิศทาง X ที่ต้องเดินทางเพื่อไปยังตําแหน่งที่ตรงกันในรูปภาพที่เรียก หน่วยเป็นเมตรเชิงเรขาคณิต
dy
สำหรับตําแหน่งพิกเซลของรูปภาพอ้างอิงหนึ่งๆ แถบนี้จะมีระยะทางในทิศทาง Y ที่ต้องเดินทางเพื่อไปยังตําแหน่งซึ่งตรงกันในรูปภาพที่เรียกใช้ หน่วยเป็นเมตรเชิงเรขาคณิต
confidence
ค่านี้เป็นค่าประมาณความเชื่อมั่นในการเปลี่ยนตำแหน่งต่อพิกเซล (โดยที่ 0 คือความเชื่อมั่นต่ำและ 1 คือความเชื่อมั่นสูง) โดยอิงตามคะแนนการเชื่อมโยงในภูมิภาคที่พบการจับคู่ที่ถูกต้อง ในภูมิภาคที่ไม่มีการจับคู่ ระบบจะประมาณความเชื่อมั่นจากการเชื่อมโยงที่อยู่ใกล้เคียงโดยใช้ Kernel แบบกaussian เพื่อเพิ่มน้ำหนักให้กับการเชื่อมโยงที่อยู่ใกล้เคียง

ตัวอย่างต่อไปนี้จะคํานวณขนาดและมุมของการกระจัดระหว่างรูปภาพ Terra Bella ความละเอียดสูง 2 รูป

เครื่องมือแก้ไขโค้ด (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);

การบิดเบือนรูปภาพ

การบิดรูปภาพให้ตรงกับรูปภาพอื่นทำได้ 2 วิธี ได้แก่ displace() หรือ register() อัลกอริทึม displace() จะใช้รูปภาพการกระจัดที่มีแถบ dx และ dy เป็นแถบ 2 แถบแรก และบิดเบือนรูปภาพตามความเหมาะสม รูปภาพเอาต์พุตจะเป็นผลจากการบิดเบือนแถบของรูปภาพอินพุตตามออฟเซตที่มีอยู่ในรูปภาพการเปลี่ยนตำแหน่ง โดยใช้ค่าความคลาดเคลื่อนซึ่งคํานวณในตัวอย่างก่อนหน้า

เครื่องมือแก้ไขโค้ด (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() เนื่องจากมีการใช้ชุดแถบที่แตกต่างกันใน 2 แนวทาง โดย register() ใช้แถบทั้งหมดของรูปภาพอินพุตเสมอ ส่วนตัวอย่าง displacement() ใช้เฉพาะแถบสีแดงก่อนที่จะส่งผลลัพธ์ไปยัง displace() โปรดทราบว่าเมื่อใช้หลายย่านความถี่ หากความแปรปรวนของย่านความถี่แตกต่างกันมาก ก็อาจทำให้ย่านความถี่ที่มีความแปรปรวนสูงมีน้ำหนักมากเกินไป เนื่องจากย่านความถี่ได้รับการทำให้เป็นมาตรฐานร่วมกันเมื่อรวมคะแนนการเชื่อมโยงเชิงพื้นที่ ตัวอย่างนี้แสดงให้เห็นถึงความสำคัญของการเลือกย่านความถี่ที่คล้ายกันมากที่สุดเมื่อลงทะเบียน เช่นเดียวกับตัวอย่างก่อนหน้านี้ ให้ใช้ displacement() และ displace() เพื่อควบคุมว่าจะใช้ย่านความถี่ใดในการคํานวณการกระจัด