很快就會GDAL庫更新1.11版本號以後,在發現以前寫RPC像方偏差修正模型校準結果特別大(在更新結果以前的版本號和PCI結果一致)。因此初步推斷是GDAL庫的bug,通過各個參數改動發現原來是指定的DEM採樣方式致使的。工具
當指定DEM的採樣方式爲最鄰近時,校訂結果誤差很是大,當DEM採樣方式爲雙線性採樣和三次立方卷積採樣時,處理的結果與以前的結果同樣。截圖如圖1所看到的。紅色區域爲對照區域,如圖2所看到的。spa
圖1 PCI校訂結果全圖命令行
圖2 圖1中的紅色區域按實際像素放大顯示結果code
如下是使用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所看到的。
接下來指定DEM重採樣方式爲雙線性。代碼和處理結果例如如下:rpc
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插值爲雙線性處理結果get
接下來指定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插值爲三次立方卷積處理結果it
改動GDAL源代碼中的文件gdal_rpc.cpp兩處地方,就是將GDT_Int32改動爲GDT_Float64。緣由很是easy就是變量dfDMEH是一個double類型。讀取數據的時候也需要依照double類型進行讀取,而原來的代碼是依照Int32類型讀取,致使讀取出來的DEM高程值有問題。編譯
改動後代碼見圖6,共同擁有兩處。座標正變換和逆變換都需要改動。
圖6 改動後的GDAL代碼
改動後又一次編譯GDAL就能夠。使用改動後的程序,指定DEM插值爲最鄰近後處理的結果如圖7。