使用GDAL庫中的RPC校正問題

2021-06-22 14:19:37 字數 2585 閱讀 2130

最近將gdal庫更新至1.11版本之後,發現之前寫的rpc像方改正模型校正的結果偏差特別大(更新版本之前結果和pci處理的結果一致)。所以初步判斷是gdal庫的bug,經過各個引數修改發現原來是指定的dem取樣方式導致的。

當指定dem的取樣方式為最鄰近時,校正結果偏差很大,當dem取樣方式為雙線性取樣和三次立方卷積取樣時,處理的結果與之前的結果一樣。截圖如圖1所示,紅色區域為對比區域,如圖2所示。

圖1 pci校正結果全圖

圖2  圖1中的紅色區域按實際畫素放大顯示結果

下面是使用gdalwarp工具外加仿射修正模型進行校正的結果。首先使用dem為最鄰近取樣,gdalwarp命令列如下:

gdalwarp -of gtiff -tr 2.5 2.5 -t_srs esri::"d:\wgs_1984_utm_zone_50n.prj" -rpc -r cubic -wm 1024 -to "rpc_affine=-32.67376693 0.99919599 0.00013941 28.71988840 0.00062236 1.00004356" -to "rpc_dem=d:\data\正射糾正基礎資料\dem資料\beijing_all2.img" -to "rpc_deminterpolation=near" d:\data\711_214_26sep2006_p5\srcdata\bandf.tif d:\bandf_rpc1.tif --config gdal_filename_is_utf8 no
處理的結果與pci結果對比如圖3所示。

圖3  gdal指定dem插值為最鄰近處理結果

接下來指定dem重取樣方式為雙線性,**和處理結果如下:

gdalwarp -of gtiff -tr 2.5 2.5 -t_srs esri::"d:\wgs_1984_utm_zone_50n.prj" -rpc -r cubic -wm 1024 -to "rpc_affine=-32.67376693 0.99919599 0.00013941 28.71988840 0.00062236 1.00004356" -to "rpc_dem=d:\data\正射糾正基礎資料\dem資料\beijing_all2.img" -to "rpc_deminterpolation=bilinear" d:\data\711_214_26sep2006_p5\srcdata\bandf.tif d:\bandf_rpc2.tif --config gdal_filename_is_utf8 no
處理的結果與pci結果對比如圖4所示。

圖4 gdal指定dem插值為雙線性處理結果

接下來指定dem重取樣方式為三次立方卷積,**和處理結果如下:

gdalwarp -of gtiff -tr 2.5 2.5 -t_srs esri::"d:\wgs_1984_utm_zone_50n.prj" -rpc -r cubic -wm 1024 -to "rpc_affine=-32.67376693 0.99919599 0.00013941 28.71988840 0.00062236 1.00004356" -to "rpc_dem=d:\data\正射糾正基礎資料\dem資料\beijing_all2.img" -to "rpc_deminterpolation=cubic" d:\data\711_214_26sep2006_p5\srcdata\bandf.tif d:\bandf_rpc3.tif --config gdal_filename_is_utf8 no
處理的結果與pci結果對比如圖5所示。

圖5 gdal指定dem插值為三次立方卷積處理結果

修改gdal原始碼中的檔案gdal_rpc.cpp兩處地方,就是將gdt_int32修改為gdt_float64。原因很簡單就是變數dfdmeh是乙個double型別,讀取資料的時候也需要按照double型別進行讀取,而原來的**是按照int32型別讀取,導致讀取出來的dem高程值有問題。修改後**見圖6,共有兩處,座標正變換和逆變換都需要修改。

圖6 修改後的gdal**

修改後重新編譯gdal即可。使用修改後的程式,指定dem插值為最鄰近後處理的結果如圖7。

圖7 修改後正射的結果對比

已經將該問題反饋至gdal開發組,具體位址為:估計下個版本就會修正。

關於GDAL的幾何校正問題

首先可以參照以下兩處資料 不過我按照上述資料並沒有成功,第乙個資料中給出了可執行的原始碼,但是實際結果並沒有做重取樣,好像只是把原始資料copy了乙份,僅對拷貝做了 投影設定和仿射變換設定,真實資料沒有重取樣。第二個資料中博主給出的原始碼在我這裡不能執行,每次均是執行到chunkandwarpima...

使用GDAL自帶函式讀取RPC檔案的方法

rpc為有理多項式係數 rational polynomial coefficient 在遙感影像預處理中用於影像畫素座標 行列號 與對應同名點物方座標 經度,緯度,高程 之間的相互計算。rpc檔案,顧名思義,就是包含有理多項式係數的文字檔案。rpc檔案通常有兩種格式 一種為圖1所示,稱為rpc格式...

gdal庫的學習和使用

1 windows下的編譯 1.1 解壓後開啟nmake.opt,設定gdal home 1.2 進入vs的command promot,進入正常的那個即可,64位的沒試過,可以參考gdal官網 1.3 nmake f makefile.vc 1.4 nmake f makefile.vc inst...