使用GDAL图书馆RPC校正问题

很快就会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所看到的。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGltaW5sdTAzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="720" height="560" style="font-size: 12px;" />

图5 GDAL指定DEM插值为三次立方卷积处理结果

改动GDAL源代码中的文件gdal_rpc.cpp两处地方,就是将GDT_Int32改动为GDT_Float64。原因非常easy就是变量dfDMEH是一个double类型。读取数据的时候也须要依照double类型进行读取,而原来的代码是依照Int32类型读取,导致读取出来的DEM高程值有问题。

改动后代码见图6,共同拥有两处。坐标正变换和逆变换都须要改动。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGltaW5sdTAzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />

图6 改动后的GDAL代码

改动后又一次编译GDAL就可以。使用改动后的程序,指定DEM插值为最邻近后处理的结果如图7。

图7 改动后正射的结果对照

已经将该问题反馈至GDAL开发组。详细地址为:http://trac.osgeo.org/gdal/ticket/5553。据预计,在未来的版本号会被纠正。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-11-06 09:53:42

使用GDAL图书馆RPC校正问题的相关文章

使用GDAL库中的RPC校正问题

最近将GDAL库更新至1.11版本之后,发现之前写的RPC像方改正模型校正的结果偏差特别大(更新版本之前结果和PCI处理的结果一致).所以初步判断是GDAL库的bug,经过各个参数修改发现原来是指定的DEM采样方式导致的. 当指定DEM的采样方式为最邻近时,校正结果偏差很大,当DEM采样方式为双线性采样和三次立方卷积采样时,处理的结果与之前的结果一样.截图如图1所示,红色区域为对比区域,如图2所示. 图1 PCI校正结果全图 图2  图1中的红色区域按实际像素放大显示结果 下面是使用gdalwa

VS2008编译GDAL 1.8.1(转)

GDAL1.9.2 全套 如何在c++下进行nc问件的转换 起初,我的思路是这样,首先编译一个netcdf的库,然后用里面的函数进行读取文件.进行存储.再通过gdal里面的函数进行转换. 但是在编译netcdf库的时候,会发现大部分都是在linux下进行的.所以,浪费了我很多的时间. 后来经过录歌的剖析,其实可以讲netcdf和gdal直接编译.将netcdf封装在gdal里.通过调用gdal直接读取nc文件. 此库已经编译好了.有愿意下载的读者可以按照以下链接进行下载. http://down

基于GPU的高分一号影像正射校正的设计与实现

一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法属于严格几何纠正,最具代表的是共线方程法.当传感器成像模型未知或者无法获取相关的辅助参数时,可以用假定的数学模型模拟成像模型,对影像实现校正,这种方法属于近似几何纠正,主要有:几何多项式纠正.有理函数法.局部区域校正等模型.本文将主要对RPC正射校正模型进行展开讨论. RPC模型将像点坐标d(lin

利用GDAL实现影像的几何校正

一.概述 遥感影像和地理坐标进行关联的方式一般有好几种,一种是直接给出了仿射变换系数,即6个参数,左上角地理坐标,纵横方向上的分辨率,以及旋转系数.在这种情况下,求出某一像素点的地理坐标非常容易,直接用公式可以求出,具体代码如下: void CPL_STDCALL GDALApplyGeoTransform(double *padfGeoTransform, double dfPixel, double dfLine, double *pdfGeoX, double *pdfGeoY ) { *

改动GDAL库支持RPC像方改正模型

近期在做基于RPC的像方改正模型.方便对数据进行測试,改动了GDAL库中的RPC纠正模型,使之能够支持RPC像方改正參数. 以下是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一化后的经度纬度高程. 将上面的公式变形,使用偏移系数和缩放系数带入,能够得到图像的行列号坐标与经纬度坐标之间的坐标转换关系.整理后的公式例如以下所看到的.下标带s的为缩放系数,下标为0的表示偏移系数,rc为图像行列号,此处的PLH为地面经纬度坐标.P1-P4为有理函数的多项式系数. 使用像方改正模型

修改GDAL库支持RPC像方改正模型

最近在做基于RPC的像方改正模型,方便对数据进行测试,修改了GDAL库中的RPC纠正模型,使之可以支持RPC像方改正参数. 下面是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一化后的经度纬度高程. 将上面的公式变形,使用偏移系数和缩放系数带入,可以得到图像的行列号坐标与经纬度坐标之间的坐标转换关系.整理后的公式如下所示,下标带s的为缩放系数,下标为0的表示偏移系数,rc为图像行列号,此处的PLH为地面经纬度坐标,P1-P4为有理函数的多项式系数. 使用像方改正模型的公式如

【ENVI入门教程06】自定义RPC文件图像正射校正、正射校正部分利用CLASSIC

文章中涉及的是5.X版本里面的正射校正方法,这里我采用ENVI classic部分进行同样效果的操作,方便5.X以下版本的参考,方法中有不正确的部分请及时联系我纠正. (一)打开和关联DEM 打开完成了第一步的SPOT4(即有了RPC info的)影像,同时打开DEM数据. 在SPOT4.tif右键EDIT HEADER,在这里选择edit attributes->associate DEM file,选择existing的文件,即这里的DEM Layer-1,点击OK即可. (二)进行正射校正

编译GDAL支持OpenCL使用GPU加速

前言 GDAL库中提供的gdalwarp支持各种高性能的图像重采样算法,图像重采样算法广泛应用于图像校正,重投影,裁切,镶嵌等算法中,而且对于这些算法来说,计算坐标变换的运算量是相当少的,绝大部分运算量都在图像的重采样算法中,尤其是三次卷积采样以及更高级的重采样算法来说,运算量会成倍的增加,所以提升这些算法的处理效率优先是提高重采样的效率.由于GPU的多核心使得目前对于GPU的并行处理非常热,同时也能大幅度的提升处理速度.基于上述原因,GDALWARP也提供了基于OPENCL的GPU加速,之前在

GDAL源码剖析(一)(转载)

GDAL源码剖析(一) GDAL 前言:一直在使用和研究GDAL的相关东西,发现网上对GDAL的内容倒是不少,但是很少有系统的介绍说明,以及内部的一些结构说明,基于这些原因,将本人的一些粗浅的理解放在此处,形成一个系列,暂时名为<GDAL源码剖析>(名称有点大言不惭,欢迎大家口水吐之,板砖拍之),供大家交流参考,有什么错误之处,望大家不吝指正,本系列对于GDAL的使用均是在Windows平台下,对于Linux平台下的不在此系列讨论范围之内.此外,转载本博客内容,请注明出处,强烈鄙视转载后不注明