[详细]"一种基于OpenMP的遥感影像几何校正并行处理方法,通过计算机对来自遥感影像采集系统的遥感影像进行处理,该计算机为单机多核CPU设置,在原有几何校正串行算法的基础上,增加OpenMP编译指导语句来实现,该方法包括外方位元素的计算、定向支持数据生成以及采用OpenMP架构实施位置和灰度重采样的多线程处理,该方法步骤如下:1)外方位元素的计算GPS/INS组合导航与定位系统的后处理过程涉及到多种坐标系,包括像空间坐标系、传感器坐标系、IMU坐标系、局部地理坐标系、地心坐标系和成图坐标系;通常情况下,GPS/INS系统输出的是导航解,并非影像的外方位元素,所以需要利用POS系统导航解计算出外方位元素;依据外方位元素的定义,将成图坐标系依次经过绕X、Y、Z?轴分别作ω、φ、κ角度的旋转,?各坐标轴与像空间坐标系保持一致,?这一过程可分解为:成图坐标系→地心坐标系→局部地理坐标系→IMU坐标系→传感器坐标系→像空间坐标系;因此,?成图坐标系到像空间坐标系的旋转矩阵
![]()
可表示为:
![]()
(1)其中:
![]()
分别表示成图坐标系到像空间坐标系X、Y、Z?轴的旋转角,即外方位角元素;
![]()
表示成图坐标系到地心坐标系的旋转矩阵;
![]()
表示地心坐标系到局部地理坐标系的旋转矩阵;
![]()
表示局部地理坐标系到IMU?坐标系的旋转矩阵;
![]()
表示IMU?坐标系到传感器坐标系的旋转矩阵;
![]()
表示传感器坐标系到像空间坐标系的旋转矩阵;
![]()
分别表示IMU坐标系在局部地理坐标系中的侧滚、俯仰和偏航角,统称为导航解中的导航角,旋转矩阵
![]()
、
![]()
、
![]()
、
![]()
和
![]()
可由导航解中的导航角
![]()
以及遥感影像采集系统相对于IMU固定的安装角度得到;根据公式(1),可直接求解出外方位角元素
![]()
;在坐标系的转换过程中存在三次坐标原点偏移:传感器透镜投影中心到IMU中心的偏移,IMU中心到地心的偏移,地心到图像中心的偏移,计算外方位线元素要考虑这些偏移量;假设偏心矢量为
![]()
、
![]()
、
![]()
,?则依据解析几何中点的坐标变换公式,?得到外方位线元素X
S、Y
S、Z
S的计算式为:
![]()
(2)其中(
![]()
,
![]()
,
![]()
)是IMU坐标系原点在地心坐标系中的坐标;偏心矢量(
![]()
,
![]()
,
![]()
)即遥感影像采集系统中镜头透视中心在IMU坐标系中的坐标,在遥感影像采集系统安装时直接测量得到;(
![]()
![]()
![]()
)为成图坐标系原点在地心坐标系的坐标;2)定向支持数据生成生成定向支持数据,供位置和灰度重采样部分使用;每一行遥感影像对应一组外方位元素,即外方位元素包括外方位线元素及外方位角元素,设第i行扫描的外方位元素为
![]()
、
![]()
、
![]()
、ω、φ和κ,则直接法校正的坐标变换函数为:
![]()
(3)其中,?X、Y为像素点(x,y,-f)对应的地面点坐标,Z为用户指定的平均地面高程,?a
i、b
i、c
i(i=1,2,3)为旋转矩阵
![]()
中的各行元素;上式描述的是各扫描行成像时的物像中心投影关系,因此x≡0,y为第i行扫描像点在图像系相对投影中心的位置,f为焦距;3)采用OpenMP架构实施位置和灰度重采样的多线程处理校正像点地面点坐标一般不是整数值,所以校正影像上整数像点位置的灰度值必须通过内插得到;根据原始像点对应的地面点坐标及插值范围Region=2,求出原始像点所能影响的校正图像像点对应的地面点范围,然后对原始像点的灰度值重新分配到此范围内的各地面点,即重采样;采用距离倒数法对灰度值进行重采样,距离倒数法用于插值的基本公式为:
![]()
(4)式中,
![]()
为校正影像估计值;
![]()
为原始影像灰度值;
![]()
为已知点的权重;
i为第i个已知点;?n为未知点个数;![]()
(5)式中,
![]()
为校正影像估计点与已知点之间的距离;
![]()
为
![]()
的幂指数,其取值由具体的情况确定,通常情况下取整数值为2;
i为第
i个已知点;
?n为未知点个数;采用OpenMP架构实施位置和灰度重采样的多线程处理,步骤如下:a.由omp_get_num_procs()获取CPU核心数,在使用Intel超线程技术的CPU上获取CPU核心线程数;b.在计算机内存中申请内存,载入定向支持数据供多个线程共享使用;c.根据CPU核心数,对遥感影像进行按数据划分;划分方式:由CPU核心数除遥感影像波段数,对遥感影像进行均分,以便遥感影像均分后的每个数据块一次由CPU不同核心同时处理;d.把划分的一个数据块读入内存,设定循环;e.在循环体之前添加 pragma?omp?parallel?for?private()编译指导语句,派生工作线程;编译器首先识别for循环的循环次数,然后将循环次数平均分配到不同CPU核心上同时执行处理;f.待所有CPU全部处理完毕,工作线程挂起,由主线程将处理后的数据写入计算机磁盘文件;g.主线程检查影像数据是否全部处理完毕,若没有,重复步骤e、f,直至全部处理完毕,主线程退出。"