遥感影像三角网几何校正并行算法及优化研究★
2023-08-04张战伟刘培明
张战伟,刘培明,赵 熹
(1.山东明嘉勘察测绘有限公司,山东 淄博 255086; 2.中国矿业大学环境与测绘学院,江苏 徐州 221116)
遥感技术在多个方面得到了应用,特别是近年来卫星遥感的快速发展,卫星传感器采样精度、细度、频率不断提升[1]。卫星遥感数据的应用不断拓展,多源卫星遥感数据的融合应用需求及场景也越来越多[2]。这些遥感数据的应用需要统一的空间数据基准,遥感影像的几何校正是其中一项重要的处理任务,基于三角网进行遥感影像几何校正是常有方式[3-4]。伴随长时间序列、高分辨率影像及实时性强的处理需求,快速的遥感影像几何校正处理算法的重要性更加突出。
遥感数据的处理效率提升的手段可以概括为两个方面:一是增加硬件计算资源,目前云计算、超级计算机、计算机集群等技术均是该范畴;二是提高算法并行度及代码质量,主要包括多核CPU并行、GPU并行、代码优化、算法优化等方法。本文从第二个角度开展研究,采用的具体技术包括OpenMP,GPU通用计算、代码优化等。OpenMP是一种编程模型,其具有复杂度低、移植性好等优点,可方便的实现代码并行及多线程化。随着多核CPU的应用,很多研究人员选择OpenMP实现遥感数据多核CPU并行处理算法[5-6]。图形处理单元(GPU)具有算力强、体积小、能耗低等优点,目前是遥感数据处理优先选择的计算机硬件,GPU在遥感数据校正、融合、识别、分类等诸多方面得到广泛应用[7-9]。为了推动GPU在通用计算中的应用,Nvidia在2006年推出CUDA编程框架并进行了持续完善,使其成为通用GPU编程的主要工具,此外OpenCL,C++AMP也可用于通用GPU编程。代码优化,通过高效的编码语句、合理的数据结构、科学的逻辑控制来提升代码质量,常有的代码优化方法包括代码外提、变量归纳、循环展开、常量合并、数据重用[10],其不依赖具体计算机硬件,优化方法可以在算法运行全流程中发挥作用[11]。
目前针对基于三角网遥感影像几何校正并行算法设计及优化相关的研究较少,因此为了提升遥感影像几何校正的处理效率,本文从CPU并行、GPU并行、数据结构优化、处理算法编码优化等角度对基于三角网遥感影像几何校正算法进行了研究。
1 算法设计及优化
1.1 并行算法设计
基于三角网的遥感影像几何校正算法核心步骤包括三个部分:点坐标初始化、三角网变换参数计算、坐标关系映射,算法其他主要流程还包括影像基本信息获取、坐标经度值及纬度值获取、目标(成果)影像参数计算、影像坐标信息计算、目标影像文件写入。
本文并行算法围绕着基于三角网遥感影像几何校正算法的三个核心步骤设计,根据计算硬件特点,面向多核CPU及GPU分别设计,图1为算法设计的整体框架。
1)多核CPU采用OpenMP编程接口实现算法并行,本文设计了点坐标初始化、三角网变换参数计算、坐标关系映射三个函数,每个函数均根据影像特点采用两层for循环结构,在外层循环嵌入for循环并行控制语句。2)GPU采用CUDA实现算法并行,算法包括数据拷贝(主机到设备、设备到主机)及三个核函数。算法并行设计体现在三个核函数中,包括点坐标初始化、三角网变换参数计算、坐标关系映射三个函数。
1.2 算法实现
基于三角网遥感影像几何校正算法的实现,关键算法包括三角网生成、几何变换关系计算、像素点归属判断、像素值计算、影像生成等。
1)三角网生成:根据不同坐标系统下的控制点坐标信息,采用Delaunay三角剖分算法构建三角网。2)几何变换关系计算:基于生成的三角网,使用仿射变换分别计算每个三角形的几何变换关系。每个三角形具有唯一的变换关系,可以将卫星影像上的像素点映射到地理坐标系中的对应位置。3)像素点归属判断:遍历卫星影像上的每个像素点,采用重心法确定其归属于哪个三角形。4)像素值计算:根据像素点所属的三角形,将该三角形的变换关系应用于该像素,计算其在目标坐标系中的对应位置,采用双线性插值计算像素值。5)校正影像生成:将变换后的像素点坐标和像素值填充到新的栅格数据中,生成校正后的卫星影像利用基于三角网进行遥感影像几何校正的方法,针对不同的区域具有不同的变换关系,由于每个三角形都有独立的变换关系,因此该方法能够应用于不规则形变的影像。
1.3 GPU并行算法
本文基于CUDA实现基于三角网遥感影像几何校正GPU并行算法,算法1为伪代码,见图2。
1)定义控制点和三角网结构:ControlPoint和Triangle结构用于存储控制点以及它们之间的三角网关系。2)实现并行变换核函数:核函数(apply_transformation_kernel)并行处理影像中的每个像素。基于线程索引计算像素坐标,然后遍历三角剖分,寻找包含当前像素坐标的三角形。找到对应三角形后,计算仿射变换关系并应用于当前像素坐标,得到新的坐标。最后,使用插值方法计算像素值。3)设置参数:设置核函数参数,包括blockDim和gridDim,合理的设置参数能够充分利用GPU资源,提高影像几何校正的执行速度。4)设计辅助函数:包括像素点归属判断函数(is_point_inside_triangl)、仿射变换计算函数(compute_affine_transformation)和像素插值计算函数(interpolate_pixel_value)。
1.4 代码优化
不同的代码编写方法会导致算法执行时间的明显区别,代码优化策略需要根据不同算法进行有针对性的设计。本文从访问及存储优化、代码逻辑优化两个方面进一步对并行算法的代码进行优化。
1)访问及存储优化。采用结构体及嵌套来描述及传递坐标点及三角网信息值,通过精简算法过程数据的结构,降低内存占用量和传输量,从而减少无效信息、降低冗余。此外,在内存组织形式上进行了优化,采用同类数据就近聚合策略,实现内存合并访问,从而进一步降低访存成本。2)代码逻辑优化。代码逻辑优化是针对具体处理方法编码进行的优化,优化策略更有针对性,虽然优化方法可移植性价值不高,但是优化逻辑可以作为其他处理方法的参考。在点坐标与三角网空间位置关系判断实现过程中,采用同类项合并设计方案,具体包括函数合并及循环合并优化,降低循环复杂度及计算复杂度,从而减少冗余操作。
2 实验及分析
2.1 实验数据及环境
实验使用MODIS(Moderate-resolution Imaging Spectroradiometer)数据,MODIS是美国宇航局研制的大型空间遥感仪器,包括Terra,Aqua卫星,该数据具有广泛的用途,可用于地球表面温度、陆地覆盖、云层、气溶胶、水蒸气、温度分布和森林火灾等方面。图3为本文实验使用的MODIS遥感影像数据,其中图3(a)为原始影像,图3(b)为几何校正后的影像。
实验投入的计算机硬件具体配置:CPU为Intel Core i7-9700 (3.0 GHz, 8 CPUs);显卡为NVIDIA GeForce GTX 1660,显存容量6 GB;内存容量为8 GB;磁盘分别为HDD及SSD,其中HDD转速7 200 rpm,SATA3.0接口、缓存64MB,SSD读取速度3 500 MB/S、写入速度3 000 MB/S。
2.2 实验结果分析
本文针对不同的影像大小进行了实验,影像大小介于33 MB~864 MB之间。对多核CPU及GPU并行计算运行时间进行了统计,并与单线程算法进行了对比。本文采用加速比评价并行算法的加速效果,加速比计算如式(1)所示。
(1)
其中,S为加速比;T1为单线程算法的执行时间;T为并行算法的执行时间。
表1为不同影像大小在不同硬件方案下的运行时间及多核CPU,GPU相对单线程的加速比结果,图4为不同影像大小情况下影像计算时间及总体处理时间的统计及对比结果。
表1 不同计算方案统计结果 s
从表1,图4可以看出,当采用8核CPU时,多核CPU并行算法获得了4.35x-6.43x的加速比;GPU并行算法获得了1.32x-15.93x的加速比,且随着影像大小的增加,加速效果越明显,其中当影像大小为863 MB时,获得了15.93x的加速比。此外,从图4可以看出计算部分的加速效果要明显优于数据处理整体时间的加速效果,主要原因是读、写部分执行时间的影响,为了系统分析读、写及计算的时间成本,本文进行了多组实验,如表2所示。
表2 不同方案数据处理时间对比结果
表2为影像大小486 MB时不同硬件方案数据处理时间的统计结果。从表2可以看出读(I)、写(O)的执行时间占比相对较大,因此造成整体加速效果不是非常明显,主要原因是影像校正算法属于访存密集型任务,主要瓶颈受制于内存带宽及I/O效率,大量耗时操作用于数据传递。从表2可以看出SSD相对HDD在I/O方面具有明显优势,因此在并行算法执行时可以优先选择SSD。虽然I/O影响了基于三角网的遥感影像几何校正并行算法的加速效果,但是相对单线程算法,多核CPU及GPU并行算法仍获得了明显的加速效果,特别是GPU并行算法,影像数据量越大加速效果越明显。
3 结论
本文以提升遥感影像几何校正的处理效率为目标,从并行算法设计、代码优化角度对基于三角网的遥感影像几何校正算法进行了研究,经过多组实验分析,得到了较为理想的加速效果。本文的主要贡献如下:
1)基于CUDA实现了基于三角网遥感影像几何校正GPU并行算法,当影像大小为863 MB时,获得了15.93x的加速比。
2)基于OpenMP实现了基于三角网遥感影像几何校正多核CPU并行算法,当采用8核CPU时,获得了4.35x-6.43x的加速比。
3)在数据结构体优化、常量合并、循环体优化等方面对算法代码进行了优化,获得了较为明显的加速效果。
由于遥感影像几何校正计算复杂度相对较低,数据的I/O成本相对计算成本比例较高,从而导致并行算法加速的综合效率提升并不明显,因此如何缩短遥感数据的I/O时间,降低I/O成本是需要研究的内容。下一步,本文将基于GPU多流、叠加I/O及计算等技术或策略开展相关研究,以进一步提升遥感数据处理的整体效率。