使用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所示。
接下来指定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。
使用GDAL库中的RPC校正问题的更多相关文章
- GDAL库中WFS服务中含有中文不能获取数据的问题
GDAL库中目前提供了对WFS服务发布的数据进行获取,目前发现对于中文的服务名称或者图层名为中文,GDAL不能正确识别.通过调试发现,其原因有下面两点: 1.输入的URL路径没有使用UTF8编码而从网 ...
- GDAL 2.0版本RPC校正速度测试
GDAL2.0版本的更新日志中提到了对RPC校正的优化,今天测试了一下,发现提升的速度还是蛮快的,测试的数据是一个IRS-P5的数据. 单线程测试 首先使用一个线程进行测试,使用下面的批处理进行运行, ...
- gdal库中设置prj4库全路径的用法
作者:朱金灿 来源:http://blog.csdn.net/clever101 gdal库实现投影转换之类的功能实际上底层都是调用prj4库的功能.如果gdal使用非静态的方式集成prj4库,实际上 ...
- 修改GDAL库支持RPC像方改正模型
最近在做基于RPC的像方改正模型,方便对数据进行测试,修改了GDAL库中的RPC纠正模型,使之可以支持RPC像方改正参数. 下面是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一 ...
- 改动GDAL库支持RPC像方改正模型
近期在做基于RPC的像方改正模型.方便对数据进行測试,改动了GDAL库中的RPC纠正模型,使之能够支持RPC像方改正參数. 以下是RPC模型的公式,rn,cn为归一化之后的图像行列号坐标,PLH为归一 ...
- GDAL库进度信息编写示例
GDAL进度信息编写 GDAL库中的算法以及读写数据的时候一般都会提供两个与进度信息相关的参数,下面分别进行描述: GDALProgressFunc pfnProgress void * pProgr ...
- GDAL库三个读取Jpeg2000格式驱动测试
0.目的 GDAL库中提供了四五种读取Jpeg2000的驱动,但是各个驱动读取数据的效率各不相同,下面就针对三种读取jpeg2000的效率进行测试. GDAL库中提供的读取Jpeg2000的驱动有下面 ...
- 浅析GDAL库C#版本支持中文路径问题
GDAL库对于C#的支持问题还是蛮多的,对于中文路径的支持就是其中之一(另一个就是通过OGR库获取图形的坐标信息). 关于C#支持中文路径,看过我之前博客的应该都不陌生,如果使用的是我修改过的GDAL ...
- GDAL库调试(包括跨语言调试)
很多时候都需要调试GDAL库,尤其是像学习GDAL库中的某些算法是如何实现的时候,调试就必不可少了. 首先说明用C++的调试.以VS2008为例进行说明. 编译DEBUG版本的GDAL库,这个可以参考 ...
随机推荐
- Hinton's paper Dynamic Routing Between Capsules 的 Tensorflow , Keras ,Pytorch实现
Tensorflow 实现 A Tensorflow implementation of CapsNet(Capsules Net) in Hinton's paper Dynamic Routing ...
- Splay讲解
Splay讲解 Splay是平衡树的一种,是一种二叉搜索树,我们先讲解一下它的核心部分. Splay的核心部分就是splay,可能有些人会说什么鬼?这样讲解是不是太不认真了?两个字回答:不是.第一个S ...
- moment.js常用时间示例,时间管理
'今天': moment() '昨天': moment().subtract(1, 'days') '过去7天':moment().subtract(7, 'days'),moment() '上月': ...
- js保留两位小数数字
/* * @descript: 保留两位小数,如果小数点大于两位小数,就向上取值保留两位小数<br/> * @time 2016-07-13 */function mathCeil(num ...
- 【python标准库模块四】Json模块和Pickle模块学习
Json模块 原来有个eval函数能能够从字符串中提取出对应的数据类型,比如"{"name":"zhangsan"}",可以提取出一个字典. ...
- 转:window与linux互相拷贝文件
window与linux互相拷贝文件 借助 PSCP 命令可以实现文件的互拷: 1.下载pscp.exe 文件 (我的资源文件中有) 2.如果想在所有目录可以执行,请更改环境变量. w ...
- 如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境
我的环境:虚拟机是:VMware-workstation-full-8.0.0-471780.exe:Linux系统用的是:CentOS-7-x86_64-Minimal-1503-01.ios;(阿 ...
- Docker外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放 ...
- 初识mybatis(二)
上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置my ...
- webpack 将不同类型的文件输出到不同文件夹
参考:https://stackoverflow.com/questions/33058964/configure-webpack-to-output-images-fonts-in-a-separa ...