??本文主要對GEE中柵格圖像的地理配準(zhǔn)(空間坐標(biāo)位置校正)操作加以介紹。
??本文是谷歌地球引擎(Google Earth Engine,GEE)系列教學(xué)文章的第十四篇,更多GEE文章請參考專欄:GEE學(xué)習(xí)與應(yīng)用(https://blog.csdn.net/zhebushibiaoshifu/category_11081040.html)。
??在之前的博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/118970315)中,我們介紹了基于ENVI軟件的遙感影像手動(dòng)地理配準(zhǔn)方法;本文則介紹在GEE中,自動(dòng)實(shí)現(xiàn)遙感影像間地理配準(zhǔn)的方法。
??在GEE中實(shí)現(xiàn)遙感影像地理配準(zhǔn),總體分為兩個(gè)步驟。首先,需要設(shè)置一景“位移影像”,其包含三個(gè)波段:首先前兩個(gè)波段為dx與dy——二者分別為圖像中每一個(gè)像元在x和y方向的偏移量;第三個(gè)波段為上述偏移量的置信度。其次,將設(shè)置好的“位移影像”應(yīng)用于需要進(jìn)行地理配準(zhǔn)的影像中即可。
??首先,依據(jù)第九篇GEE教學(xué)博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119545059)中介紹的代碼導(dǎo)入遙感影像方法,我們將兩景SkySat多光譜校正公開圖像集Public Ortho Imagery產(chǎn)品導(dǎo)入GEE中,并在地圖中顯示。SkySat是由美國商業(yè)公司Planet擁有并運(yùn)行的亞米級地球遙感觀測衛(wèi)星星座,其多光譜波段空間分辨率可達(dá)2 m左右,全色波段空間分辨率更可高達(dá)0.8 m左右。
??隨后,依據(jù)第十二篇GEE教學(xué)博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119644114)中介紹的Map.centerObject()函數(shù),將GEE地圖縮放至第一景遙感影像的中心經(jīng)、緯度處。
var image_1=ee.Image("SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL/s01_20150305T081019Z");
var image_2=ee.Image("SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL/s01_20150502T082736Z");
Map.addLayer(image_1);
Map.addLayer(image_2);
Map.centerObject(image_1);
??執(zhí)行代碼,得到結(jié)果如下。

??此時(shí)如果對兩景圖像分別設(shè)置不同的可視化參數(shù),仔細(xì)觀察可以看到兩景圖像之間的地物位置有一定細(xì)微的差異。這里需要注意,是同一地物在兩景遙感影像中的位置具有一定差異,而不是兩景圖像的形狀與成像范圍不一致(例如兩景圖像一個(gè)形似向北開的坦克,另一個(gè)形似向南開的坦克);這里二者形狀與成像范圍不一致是由于在不同時(shí)刻成像時(shí),軌道方向與參數(shù)不一致導(dǎo)致的,是正常情況。

??接下來,我們需要對進(jìn)行地理配準(zhǔn)過程中遙感影像的重采樣方法進(jìn)行規(guī)定。在第十三篇GEE教學(xué)博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119654552)中我們提到,進(jìn)行投影變換,也包括本文介紹的地理配準(zhǔn)等遙感影像的空間操作時(shí),GEE默認(rèn)的重采樣方法為最鄰近插值方法;如果我們不想用這一默認(rèn)方法,可以通過.resample()函數(shù)或.reduceResolution()函數(shù)加以實(shí)現(xiàn)。這里我們就用.resample()函數(shù)來實(shí)現(xiàn)。
var image_1_resample=image_1.resample("bicubic");
var image_2_resample=image_2.resample("bicubic");
??其中,"bicubic"表示通過雙三次插值方法進(jìn)行重采樣;此外,這一參數(shù)還可以換為"bilinear",表示雙線性插值方法。
??接下來,依據(jù)第六篇GEE教學(xué)博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119145230)中介紹的.select()函數(shù),選出兩景圖像的紅光波段進(jìn)行后續(xù)操作。這里需要注意,對于兩景需要進(jìn)行地理配準(zhǔn)的遙感影像,二者只需要保持相互之間的波段數(shù)量一致,且兩景圖像的每一組波段(如圖像1的紅光波段與圖像2的紅光波段)在視覺上盡可能比較近似即可,并不一定分別只能含有一個(gè)波段;這里選出一個(gè)紅光波段,僅僅是為了后續(xù)進(jìn)行確立兩景遙感影像之間的偏移量時(shí)方便。
var image_1_red=image_1_resample.select("R");
var image_2_red=image_2_resample.select("R");
??接下來,便可開始兩景遙感影像之間的地理配準(zhǔn);我們以將第二景遙感影像配準(zhǔn)到第一景遙感影像為例進(jìn)行介紹。
??首先進(jìn)行本文開頭提及的第一個(gè)步驟,即設(shè)置一景“位移影像”。
var my_displacement=image_2_red.displacement({
referenceImage:image_1_red,
maxOffset:50.0,
patchWidth:100.0
});
??其中,需要用到.displacement()函數(shù)進(jìn)行“位移影像”的設(shè)立;referenceImage表示基準(zhǔn)遙感影像;maxOffset表示兩景遙感影像之間的最大偏移量,這一參數(shù)的具體含義稍后會(huì)有講解;patchWidth表示用以確定兩景遙感影像之間偏移量的集合大小,對于patchWidth這一參數(shù)我的個(gè)人理解就是,其相當(dāng)于就是用以確定兩景遙感影像之間偏移量的點(diǎn)對個(gè)數(shù)——即GEE自動(dòng)在兩景遙感影像范圍內(nèi)選定patchWidth個(gè)點(diǎn)對,隨后計(jì)算偏移量;和ENVI、ArcMap等軟件中地理配準(zhǔn)操作時(shí)選定的校準(zhǔn)點(diǎn)類似,只不過GEE中是系統(tǒng)自動(dòng)選定,ENVI、ArcMap等軟件中需要我們手動(dòng)選定。得到的變量my_displacement即為“位移影像”。
??用兩景遙感影像的紅光波段確定了兩景遙感影像之間的偏移量后,即可開始對兩景遙感影像的全部波段進(jìn)行配準(zhǔn)了,也就是本文開頭提及的第二個(gè)步驟。
var my_registered=image_2_resample.displace(my_displacement);
??其中,用.displace()函數(shù)實(shí)現(xiàn)兩景遙感影像之間的配準(zhǔn)操作,其參數(shù)my_displacement便是我們剛剛進(jìn)行“位移影像”設(shè)立時(shí)建立的圖像變量(也就是“位移影像”自身)。
??完成了地理配準(zhǔn),我們可以將參考圖像image_1_resample、配準(zhǔn)前圖像image_2_resample與配準(zhǔn)后圖像my_registered分別加以可視化顯示,從而對比地理配準(zhǔn)操作的結(jié)果。
var vis_parameter={
min:1765,
max:3725,
bands:["R","G","B"]
};
Map.addLayer(image_1_resample,vis_parameter,"Reference");
Map.addLayer(image_2_resample,vis_parameter,"Before Registration");
Map.addLayer(my_registered,vis_parameter,"After Registration");
??執(zhí)行代碼,得到結(jié)果如下。

??為了更好看清楚地理配準(zhǔn)的結(jié)果,我們可以將圖像縮放,找到一個(gè)地物比較清晰的位置,首先對比參考圖像image_1_resample與配準(zhǔn)前圖像image_2_resample之間的地物空間位置差異,隨后對比參考圖像image_1_resample與配準(zhǔn)后圖像my_registered之間的地物空間位置差異;通過上述對比,會(huì)非常清晰地看到地理配準(zhǔn)后的圖像與參考圖像之間的地物空間位置非常一致,即地理配準(zhǔn)的效果還是非常明顯的。

??我們還可以看一下“位移影像”my_displacement長什么樣子。
Map.addLayer(my_displacement);
??可以通過Inspector查看my_displacement圖層的屬性??梢钥吹狡淙齻€(gè)波段正如本文開頭所述,前兩個(gè)波段為dx與dy——二者分別為圖像中每一個(gè)像元在x和y方向的偏移量;第三個(gè)波段為上述偏移量的置信度。

??再將第一個(gè)波段dx顯示為灰度圖像,可以看到,其呈現(xiàn)出一個(gè)漸變、階梯狀的色彩分布情況;這是由于其自身存儲的是x方向的偏移量,因此其相鄰兩個(gè)像元之間的數(shù)值肯定是比較接近的,從而呈現(xiàn)出這種色彩分布情況。

??此外,還可以看到前兩個(gè)波段dx與dy的像元數(shù)值取值范圍均為[-50,50],這就是.displacement()函數(shù)中maxOffset參數(shù)的效果。

??以上代碼是將本文開頭提及的GEE中實(shí)現(xiàn)遙感影像地理配準(zhǔn)的兩個(gè)步驟分開來實(shí)現(xiàn)的過程,我們還可以將這兩個(gè)步驟合并為一個(gè),提高地理配準(zhǔn)的效率。
var my_registered_2=image_2_resample.register({
referenceImage:image_1_resample,
maxOffset:50.0,
patchWidth:100.0
});
Map.addLayer(image_1_resample,vis_parameter,"Reference");
Map.addLayer(image_2_resample,vis_parameter,"Before Registration");
Map.addLayer(my_registered,vis_parameter,"After Registration");
Map.addLayer(my_registered_2,vis_parameter,"After Registration 2");
??其中,和第一種地理配準(zhǔn)方法相比,第二種方法中我們僅需要將.displacement()函數(shù)換為.register()函數(shù),其它參數(shù)不變,即可實(shí)現(xiàn)一步到位的地理配準(zhǔn),省去了執(zhí)行.displace()函數(shù)這一步;不過這種方法相信大家也可以看到,就是不能再將“位移影像”給顯示出來了。如果需要顯示或保存“位移影像”,還是只能用第一種地理配準(zhǔn)方法。
??執(zhí)行代碼,得到結(jié)果如下。

??可以看到,經(jīng)過兩種地理配準(zhǔn)方法操作后所得到的配準(zhǔn)后圖像my_registered與my_registered_2,較之配準(zhǔn)前圖像image_2_resample,均更接近參考圖像image_1_resample;而兩種地理配準(zhǔn)方法操作后所得到的配準(zhǔn)后圖像my_registered與my_registered_2之間也并不是完全一致的。個(gè)人認(rèn)為my_registered與my_registered_2二者不完全一致是因?yàn)椋?strong>GEE在選取patchWidth個(gè)點(diǎn)對時(shí)也是隨機(jī)選取的,因此其得到的偏移量肯定也是不完全一致的,從而導(dǎo)致所得地理配準(zhǔn)結(jié)果圖層也是不完全一致的。