Algoritme pendaftaran gambar Earth Engine dirancang untuk menjadi langkah akhir, pasca-ortho, yang terperinci dalam menyelaraskan gambar. Diasumsikan bahwa gambar yang akan didaftarkan telah melalui tahap perataan awal, sehingga gambar tersebut sudah berada dalam beberapa derajat rotasi satu sama lain, dan hanya berbeda dengan terjemahan kecil. Pendaftaran menggunakan teknik "karet-lembar", yang memungkinkan distorsi gambar lokal untuk memperbaiki error ortorektifikasi dan artefak lainnya dari pemrosesan sebelumnya. Teknik penyelarasan yang mendasarinya adalah korelasi gambar, sehingga band untuk gambar input dan referensi harus mirip secara visual agar algoritma dapat menghitung penyelarasan yang akurat.
Perpindahan gambar
Ada dua langkah untuk mendaftarkan gambar: Menentukan gambar pergeseran
menggunakan displacement()
, lalu menerapkannya dengan displace()
. Input
yang diperlukan adalah pasangan gambar yang akan didaftarkan, dan parameter pergeseran maksimum
(maxOffset
).
Algoritma displacement()
mengambil gambar referensi, parameter pergeseran maksimum (maxOffset
), dan dua parameter opsional yang mengubah perilaku algoritma. Output-nya adalah gambar perpindahan dengan band dx
dan dy
yang
memberikan komponen X dan Y (dalam meter) dari vektor perpindahan di setiap
piksel.
Semua band gambar panggilan dan referensi digunakan untuk pencocokan selama pendaftaran, sehingga jumlah band harus sama persis. Band input harus secara visual serupa agar pendaftaran berhasil. Jika tidak demikian, Anda mungkin dapat memprosesnya terlebih dahulu (misalnya, penghalusan, deteksi tepi) agar tampak lebih mirip. Komputasi pendaftaran dilakukan menggunakan proses multiskala, kasar ke halus, dengan proyeksi kerja (multiskala) yang bergantung pada tiga proyeksi yang disediakan ke algoritma:
- proyeksi default gambar panggilan (Pc)
- proyeksi default gambar referensi (Pr)
- proyeksi output (Po)
Proyeksi kerja resolusi tertinggi (Pw akan berada dalam CRS Pr, pada skala yang ditentukan oleh resolusi paling kasar dari 3 proyeksi ini, untuk meminimalkan komputasi. Hasil dari Pr kemudian diambil sampelnya agar berada dalam proyeksi yang ditentukan oleh parameter 'projection' input.
Output-nya adalah gambar pergeseran dengan band berikut:
dx
- Untuk lokasi piksel gambar referensi tertentu, band ini berisi jarak dalam arah X yang harus dilalui untuk mencapai lokasi yang cocok dalam gambar panggilan. Satuannya adalah meter geodesik.
dy
- Untuk lokasi piksel gambar referensi tertentu, band ini berisi jarak dalam arah Y yang harus dilalui untuk mencapai lokasi yang cocok dalam gambar panggilan. Satuannya adalah meter geodesik.
confidence
- Ini adalah estimasi keyakinan pergeseran per piksel (dengan 0 adalah keyakinan rendah dan 1 adalah keyakinan tinggi) berdasarkan skor korelasi di wilayah tempat kecocokan yang valid ditemukan. Di wilayah yang tidak menemukan pencocokan, keyakinan diperkirakan dari korelasi terdekat menggunakan kernel Gaussian untuk memberikan bobot yang lebih tinggi ke korelasi terdekat.
Contoh berikut menghitung besar dan sudut pergeseran antara dua gambar Terra Bella beresolusi tinggi:
Editor Kode (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);
Membentuk gambar
Ada dua cara untuk memutar gambar agar cocok dengan gambar lain: displace()
atau
register()
. Algoritma displace()
mengambil gambar pergeseran yang memiliki band dx
dan dy
sebagai dua band pertama, dan memutar gambar sesuai kebutuhan. Gambar
output akan menjadi hasil dari memutar band gambar input dengan
offset yang ada dalam gambar pergeseran. Menggunakan pergeseran yang dihitung dalam
contoh sebelumnya:
Editor Kode (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');
Jika Anda tidak memerlukan band pergeseran, Earth Engine menyediakan metode register()
, yang merupakan pintasan untuk memanggil displacement()
, diikuti dengan displace()
. Contoh:
Editor Kode (JavaScript)
var alsoRegistered = image2Orig.register({ referenceImage: image1Orig, maxOffset: 50.0, patchWidth: 100.0 }); Map.addLayer(alsoRegistered, visParams, 'Also Registered');
Dalam contoh ini, hasil register()
berbeda dengan hasil
displace()
. Hal ini karena kumpulan band yang berbeda digunakan dalam dua
pendekatan: register()
selalu menggunakan semua band gambar input, sedangkan
contoh displacement()
hanya menggunakan band merah sebelum memasukkan hasilnya ke
displace()
. Perhatikan bahwa jika beberapa band digunakan, jika varian band sangat
berbeda, hal ini dapat memberikan bobot berlebih pada band dengan varian tinggi, karena band
dinormalisasi bersama saat skor korelasi spasialnya digabungkan. Hal ini
mengilustrasikan pentingnya memilih band yang secara visual paling
mirip saat mendaftar. Seperti pada contoh sebelumnya, gunakan displacement()
dan
displace()
untuk mengontrol band mana yang digunakan untuk menghitung perpindahan.