Earth Engine resim eşleme algoritması, resimleri hizalama işleminin son, ortofoto sonrası, ayrıntılı adımı olacak şekilde tasarlanmıştır. Kayıt edilecek resimlerin ilk hizalama aşamalarından geçtiği varsayılır. Bu nedenle, resimler zaten birbirlerine birkaç derece döndürülmüş durumdadır ve yalnızca küçük kaymalarla birbirinden ayrılır. Kayıt işleminde "lastik örtü" tekniği kullanılır. Bu teknik, yerel görüntü çarpıtmasının ortorektifikasyon hatalarını ve önceki işlemlerden kaynaklanan diğer kusurları düzeltmesine olanak tanır. Temel uyumlu hale getirme tekniği resim korelasyonudur. Bu nedenle, algoritmanın doğru bir uyumlu hale getirme hesaplaması yapabilmesi için giriş ve referans resimlerin bantları görsel olarak benzer olmalıdır.
Resim yer değiştirmesi
Bir resmi kaydetmenin iki adımı vardır: displacement()
kullanarak yer değiştirme resmini belirleme ve ardından displace()
ile uygulama. Gerekli girişler, kaydedilecek resim çifti ve maksimum yer değiştirme parametresidir (maxOffset
).
displacement()
algoritması bir referans resim, maksimum yer değiştirme parametresi (maxOffset
) ve algoritma davranışını değiştiren iki isteğe bağlı parametre alır. Çıkış, her pikselde yer değiştirme vektörünün X ve Y bileşenlerini (metre cinsinden) veren dx
ve dy
bantlarına sahip bir yer değiştirme görüntüsüdür.
Arama ve referans resimlerinin tüm bantları, kayıt sırasında eşleştirme için kullanılır. Bu nedenle, bant sayısı tam olarak aynı olmalıdır. Kaydın başarılı olması için giriş bantları görsel olarak benzer olmalıdır. Aksi takdirde, daha benzer görünmeleri için bunları önceden işleme (ör. yumuşatma, kenar algılama) tabi tutmak mümkün olabilir. Kayıt hesaplamaları, algoritmaya sağlanan üç projeksiyona bağlı olan (çok ölçekli) çalışma projeksiyonlarıyla birlikte çok ölçekli, kabadan ince işlem kullanılarak gerçekleştirilir:
- Arayan görüntüsünün varsayılan projeksiyonu (Pc)
- referans görüntünün varsayılan projeksiyonu (Pr)
- çıkış projeksiyonu (Po)
En yüksek çözünürlüklü çalışma projeksiyonu (Pw), hesaplamayı en aza indirmek için bu 3 projeksiyonun en kaba çözünürlüğüne göre belirlenen bir ölçekte Pr'nin CRS'sinde olacaktır. Ardından Pr'den elde edilen sonuçlar, girişteki "projection" parametresi tarafından belirtilen projeksiyonda olacak şekilde yeniden örneklenir.
Çıkış, aşağıdaki bantlara sahip bir yer değiştirme görüntüsüdür:
dx
- Belirli bir referans resim pikseli konumu için bu bant, çağıran resimdeki eşleşen konuma ulaşmak için X yönünde kat edilmesi gereken mesafeyi içerir. Birimler jeodezik metre cinsindendir.
dy
- Belirli bir referans resim pikseli konumu için bu bant, çağıran resimdeki eşleşen konuma ulaşmak için Y yönünde kat edilmesi gereken mesafeyi içerir. Birimler jeodezik metre cinsindendir.
confidence
- Bu, geçerli eşleşmelerin bulunduğu bölgelerdeki korelasyon puanlarına dayalı olarak, piksel başına bir yer değiştirme güveni tahminidir (0 düşük güven, 1 yüksek güvendir). Eşleşmenin bulunmadığı bölgelerde, yakın korelasyonlara daha yüksek ağırlık vermek için yakın korelasyonlardan Gauss çekirdeği kullanılarak güven tahmin edilir.
Aşağıdaki örnekte, iki yüksek çözünürlüklü Terra Bella görüntüsü arasındaki yer değiştirmenin büyüklüğü ve açısı hesaplanmıştır:
Kod Düzenleyici (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);
Resmi çarpıtma
Bir resmi başka bir resimle eşleşecek şekilde çarpıtmanın iki yolu vardır: displace()
veya
register()
. displace()
algoritması, ilk iki bant olarak dx
ve dy
bantlarına sahip bir yer değiştirme resmi alır ve resmi buna göre deforme eder. Çıkış resmi, giriş resminin bantlarının yer değiştirme resmindeki ofsetlerle bükülmesiyle elde edilir. Önceki örnekte hesaplanan yer değiştirmeleri kullanarak:
Kod Düzenleyici (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');
Yer değiştirme bantlarına ihtiyacınız yoksa Earth Engine, displacement()
ve ardından displace()
çağrısı için kısayol olan register()
yöntemini sağlar. Örneğin:
Kod Düzenleyici (JavaScript)
var alsoRegistered = image2Orig.register({ referenceImage: image1Orig, maxOffset: 50.0, patchWidth: 100.0 }); Map.addLayer(alsoRegistered, visParams, 'Also Registered');
Bu örnekte, register()
sonuçları displace()
sonuçlarından farklıdır. Bunun nedeni, iki yaklaşımda farklı bir bant grubu kullanılmasıdır: register()
her zaman giriş resimlerinin tüm bantlarını kullanırken displacement()
örneğinde, sonucu displace()
'ye beslemeden önce yalnızca kırmızı bant kullanılmıştır. Birden fazla bant kullanıldığında, bant varyansları çok farklıysa bantların uzamsal korelasyon puanları birleştirildiğinde bantlar birlikte normalleştirildiğinden yüksek varyanslı bantlara aşırı ağırlık verilebileceğini unutmayın. Bu, kayıt sırasında görsel olarak en benzer bantları seçmenin önemini gösterir. Önceki örnekte olduğu gibi, yer değiştirmeyi hesaplamak için hangi bantların kullanılacağını kontrol etmek üzere displacement()
ve displace()
değerlerini kullanın.