朱桂海 蒋红兵 蒙印
基于畸变矩阵的影像畸变差改正
朱桂海 蒋红兵 蒙印
(四川省遥感信息测绘院 四川成都 610100)
针对已有的影像畸变差改正程序中存在每张影像分别进行迭代计算的问题,提出了基于畸变矩阵的影像畸变差改正方法。新方法首先利用影像行列数、相机内方位元素与畸变参数,计算影像畸变矩阵;然后,利用该畸变矩阵对多张航空影像进行畸变差改正。新方法克服了间接法影像畸变差改正算法的逐像素迭代计算的缺点,大大降低了影像畸变差改正的平均计算量。基于CPU/GPU的影像畸变差改正试验,证明本文提出的方法降低了影像畸变差改正的计算复杂度,提高了影像畸变差改速度,在无人机影像快速处理中具有一定的实用价值。
畸变差改正 畸变矩阵 间接法 GPU
目前,国内一些主要的摄影测量处理软件大都针对量测型相机设计的,在处理普通数码相机影像时,需要在空三平差前对影像进行畸变差改正[1-4]。已有的影像畸变差改正方法,主要分为三种形式:(1)基于CPU的逐像素串行计算;(2)基于CPU的多像素并行计算;(3)基于GPU的多个像素并行计算[1]。相对于方式(1),方式(2)能够充分利用CPU的多核计算,提高计算速度;相对方式(2),方式(1)能够充分利用GPU的超线程加速计算,提高计算速度。但是,方式(1)、(2)、(3)在处理多张影像时,需要对每张影像中的每个像素进行迭代计算,没有考虑多张影像畸变的一致性,造成了巨大的额外计算,影响了畸变差改正的速度。
近年,随着计算机软硬件的快速发展,64位处理器、64位系统、32G或更高内存已成为工作站的标准配置。开发64程序不仅可以提高运算速度,而且能够以“空间换时间”方式优化已有算法,减少计算量。考虑到,航空摄影中,同一架次飞行所获取的影像具有相同的内方位元素与畸变参数[5-7],本文提出了一种基于影像畸变矩阵的影像畸变差改正方法。该方法将影像畸变差改正与双线性差值分离,即首先根据影像的内方位元素与畸变参数计算影像畸变矩阵,然后利用影像畸变矩阵对每张影像进行双线性差值。利用本文方法进行多张影像畸变差改正处理时,能够降低每张影像平均迭代计算量,提高影像畸变差改正速度。
目前,已有摄影测量处理软件大都采用如图1所示的影像畸变差改正流程[2, 3]。该处理流程,针对每张航空影像中的每个像素计算其畸变改正量,并没有对同一测区的多幅影像做任何优化处理,存在冗余计算的问题。
图1:传统的影像畸变差改正处理流程
2.1 基于畸变矩阵的影像畸变差改正处理流程
针对传统的影像畸变差改正处理流程存在的问题,本文提出了基于畸变矩阵的影像畸变差改正方法,其处理流程如图2所示。
2.1.1 计算量分析
对于N幅影像,影像行列数为m * n,假设每个像素平均需要迭代t次,则传统的影像畸变差改正方法总共需要N*m*n*t次运算,平均每张影像所用的运算次数为m*n*t;而本文提出的影像畸变差改正实现方法,总共需要m*n*t次运算,平均每张影像所用的时间为m*n*t/N次运算。即,本文提出的影像畸变差改正算法所需要的计算量为传统算法的1/N。当N为1时,本文方法的计算量与传统方法的计算量一致;当N大于1时,本文方法的计算量为传统方法的计算量的1/N;当N趋近于无穷大时,本文提出的实现方法计算量趋近于0。即当需要处理的影像数量很大时,影像畸变差改正需要的计算量趋近于0,每张影像的进行影像畸变差改正处理的总计算量趋近于双线性差值所需要的计算量。
图2:本文提出的影像畸变差改正处理流程
图3:平均单张影像畸变差改正计算量
根据图3,可知基于影像畸变矩阵的影像畸变差改正算法,单幅影像畸变差改正的计算量,随着影像数目的增大而减少。
2.1.2 内存分析
对于行列数为m×n的影像,本文处理流程需要大小为2×m×n×4字节的内存空间,存储畸变矩阵matrix_y(m×n)与matrix_x(m×n)。
3.1 试验数据与软硬环境
本文选择了32张分辨率为5616×3744的无人机影像作为实验数据。
本文所涉及的多种影像畸变差方式均在VC++2013中进行编码,并在配置为Intel® Xeon® 2.5GHz、32GB、NVIDIA Quadro K2000的工作站中运行。
3.2 试验结果
式中:pti0为虚拟节点,表示部件任务ti∈PartTask开始时的初始状态;pti为处理步骤的集合,即按顺序排列的已完工工序任务的集合;ptij∈ProcedureTask(1≤i≤n,1≤j≤k)表示部件任务ti下属的某个已完工工序任务,视为数据世系DLti的一个处理步骤,也称为DLti的一条记录。
图4:平均单幅影像处理所需时间
图5:平均单幅影像处理加速比
本文编制64位程序,分别实现第一小节中的影像畸变差改正方式(1)、(2)、(3),统计本文方法与传统方法畸变差改正所用时间,并计算本文方法相对于传统方法的加速比,如图5所示。方式(2),本文使用微软并行计算库PPL[8];方式(3)本文使用微软C++ AMP计算库[8, 9]。
3.3 试验分析
从图4与图5可以得出以下结论:
3.3.1 利用CPU串行实现本文方法
本文提出的方法能够随着需要处理的影像数的增大而更突显优势;当需要处理的影像数增大到一定程度后,本文提出的算法的加速比趋于稳定,即2.2倍。
3.3.2 利用CPU并行实本文方法
本文提出的方法相对于传统方法的加速比,随着需要处理的影像数的增大而增大;当待处理的影像数增大到一定程度后,本文提出的算法的加速比趋于稳定,即2倍。
本文提出的方法相对于传统方法的加速比,随着影像数的增大而趋于增大;但是加速比小于1.0,即本文提出的方法在进行使用GPU进行实现时,算法的计算量降低了,但用时却增加了。
影像畸变差改正方式(1)与(2)与第二小节中的理论推理一致,但是(3)与理论推导不一致。利用GPU并行实现新方法时,需要开辟2×m×n×4字节大小的内存,存储畸变矩阵。但由于本文的畸变矩阵的计算是在GPU中实现,需要2次内存与显存之间的数据交换,此外,在利用畸变矩阵,对每张影像进行畸变差改正的过程中,需要每次将畸变矩阵载入显存。相对于传统的方法,本文方法在处理N幅影像时,需要多进行N+2次内存与显存之间的数据交换,共计需要(N+2)×(2×m×n×4)字节的数据交换。一般情况下,显存与内存之间的数据交换速度比内存数据存取速度慢的多[9]。因此,在利用GPU并行实现本文方法时,得到如图5所示的结果。将畸变矩阵保存在显存中,减少内存与显存之间的数据交换次数,将能显著地提高方式(3)的计算速度。
本文提出了一种基于畸变矩阵的影像畸变差改正实现方法,并通过编程对其进行实现。试验证明,本文提出的影像畸变差改正实现方法,能够降低影像畸变差改正的计算量,提高影像畸变差改正的处理速度,在对处理速度要求较高的应急无人机影像快速处理中具有一定的实用价值。如何减少内存与显存的交换次数,以提高基于GPU并行的影像畸变差改正加速比,需要进一步研究。
[1] 詹总谦,卢亮.基于GPU并行处理技术的影像畸变差修正[J].测绘信息与工程,2011(02):1-3.
[2] 李德龙.基于CUDA的无人机影像快速并行处理算法研究[D].北京:北京建筑大学,2013.
[3] 王恺.数字摄影测量影像数据的GPU并行处理研究[D].兰州:兰州交通大学,2013.
[4] 张剑清,柯涛,孙明伟,等.并行计算在航空摄影测量中的应用与实现——数字摄影测量网格(DPGrid)并行计算技术研究[J].测绘通报,2008(12):11-14.
[5] 李天子,郭辉.非量测数码相机的影像纠正[J].测绘通报,2006(10):59-61.
[6] 王树根,张剑清,潘励.摄影测量学[M].武汉:武汉大学出版社,2002:158-166.
[7] 陈新玺,李浩,张曼祺.普通数码相机构像畸变差两种检校模型的比较[J].北京测绘,2005(04).
[8]Microsoft. C++ Accelerated Massive Parallelism Overview[EB/OL]. http://msdn.microsoft.com/zh-cn/library/hh265136.aspx.
[9] 格雷戈里.C++AMP用Visual C++加速大规模并行计算[M].北京:人民邮电出版社,2014.
四川省测绘地理信息局科技支撑项目(J2014ZC04、J2015ZC04),国家测绘地理信息局科技发展计划项目(国测科发[2014]4号)