基于ED-SIFT算法的高分辨率遥感图像快速拼接
2023-02-02杨云源
杨云源,陈 瑞
(1.楚雄师范学院 资源环境与化学学院,云南 楚雄 675000;2.楚雄师范学院 管理与经济学院,云南 楚雄 675000)
高分辨率遥感图像主要源自星载高分遥感和机载低空航测。高分辨率遥感数据实时处理与提升运算速度是海量高分遥感图像处理需面对的问题。计算机集群运算、CPU多核运算、CPU+GPU协同运算[1]、遥感云计算是常见的遥感图像加速处理方法。计算机集群运算需要大量的硬件投入;CPU多核运算、CPU+GPU协同运算充分发挥了本机硬件功能;云计算高度依赖云端软硬件部署与网络。如遥感云计算平台Google Earth Engine,针对的是免费中低分辨率遥感数据。现有诸多研究将高分辨率遥感图像预处理、图像增强、图像分类等算法移植到了GPU上,获得了较高加速比[2]。SIFT (scale-invariant feature transform)算法进行特征点识别,具有旋转不变性与尺度不变性、特征点识别精度高等特点。SIFT具有旋转、尺度、亮度不变性等诸多优点,被广泛运用在图像校正、变换、拼接、匹配、融合[3-4]等领域。在此基础上,还演化出了SURF(speed up robust feature)算法[5]、ORB(oRiented brief)算法[6]等。
SIFT算法与高分辨率遥感结合,主要围绕3方面:①CUDA支持的SIFT并行运算实现遥感图像运算加速[7]。郝昀超等[8]将SIFT算法的高斯金字塔建立、局部极值探测进行GPU并行计算,获得约3倍的加速比。肖汉等[9]将SIFT特征匹配的高斯金字塔构建、关键点精确定位、关键点主方向提取、特征匹配放在GPU中计算。汪亮等[10]提出CoSIFT算法,利用CUDA高速存储器提升数据访问速度和二维高斯卷积核降维的方法提升SIFT计算性能。②对SIFT算法优化实现运算加速。如王晓红等[11]在无人机影像匹配中,采用AKAZE算法检测影像的特征点,再用SIFT描述符描述特征向量并计算特征点的主方向。张海涛等[12]利用Marr小波进行图像特征提取,然后基于欧氏距离进行特征点初配准,提升配准精度和效率。郑茜颖等[13]使用主成分分析对64维SIFT特征描述符降维来实现图像快速拼接,获取了1.6~2.2倍的加速。张勇等[14]使用双向2DPCA对SIFT特征描述符降维的方法实现图像拼接。杨佳宾等[15]利用无人机航测POS数据辅助Dense SIFT算法获取初始匹配点,获取匹配点数量是传统SIFT算法5倍多。③降低参与SIFT运算数据量实现运算加速。如高阳等[16]通过提取关键特征点并进行匹配来降低计算数据量,从而加速了图像配准。研究中,文献[7]~[10]将关键步骤全部或部分地移植在GPU上并行计算。文献[11]~[12]对最复杂的特征点部分提取进行优化,文献[13]~[14]对特征描述符降维实现图像拼接,文献[15]使用了机载POS数据辅助SIFT运算实现优化加速,文献[16]通过减少运算量实现优化加速。高分辨率影像SIFT计算的特征点密集、特征点提取算法复杂度高、需逐点运算,计算时间长。随着传感器技术进步,遥感影像的4个分辨率进一步提高,高分辨率遥感图像,尤其是无人机低空获取高重叠度多视影像,数据量更大,导致高分遥感影像数据量激增。高分辨率图像实时处理对基于特征点的图像运算提出更快速处理要求。基于SIFT的图像拼接算法自身有一定的优化提升空间[7-8]。SIFT运算中,通过减少参与计算的数据量与算法优化等方式,实现图像快速拼接值得深入探索。
本文使用Python+OpenCV对WorldView3高分辨率遥感切片数据进行快速拼接实验,本研究探讨通过减少参与SIFT计算的数据量及优化算法来实现图像快速拼接的可行性,优选出图像快速拼接算法;进一步使用CUDA并行计算检验算法提升空间。
图1 基于ED-SIFT的图像拼接算法流程
1 基于ED-SIFT的高分辨率遥感数据快速拼接算法设计
建立的算法基于ED-SIFT(Edge Detection & SIFT)的图像拼接算法。基于SIFT的图像拼接,图像顺序进行特征检测、特征匹配(BFMatch)、最优特征点获取、最优特征点对坐标获取、单应矩阵计算、图像变换、图像缝合即完成图像拼接。由于SIFT特征点提取算法复杂度高,需逐点运算,设法降低运算数据量是提速的关键。基于ED-SIFT的图像拼接,图像经边缘检测后再执行SIFT特征检测;最后进行最优特征点对坐标获取优化与图像缝合优化。基于ED-SIFT的图像拼接算法流程(见图1)中,算法设计更改的部分如图1中黑色区域所示。具体流程如下:
1)边缘检测算法择优。研究通过边缘检测减少参与SIFT计算的数据量,从而减少参与BFMatch特征匹配的特征点数量,实现图像快速拼接。边缘检测算法主要有Sobel边缘检测、Laplacian边缘检测、MorphologyEx形态学变换、Canny边缘检测、Scharr滤波器。研究从以上边缘检测算法中优选速度最快的算法。
2)最优特征点对坐标获取优化。优化计算代码,直接根据图像的BFMatch匹配结果和SIFT计算的特征点数据映射出特征点坐标对。算法不再生成并存储最优点对信息。整个优化过程将3个循环和2个条件判断归并为1个循环和1个条件判断,无中间变量生成与存储。
3)图像缝合。采用全图整体拷贝,检测图像第一通道空值区后,完成拼接图像裁剪得到结果。
2 ED-SIFT算法实验
2.1 实验数据与实验平台
Anaconda是包含180多个科学包及其依赖项的开源的Python平台。通过Anaconda下Jupyter Notebook在浏览器中实现基于Python的集成开发。图2是Jupyter Notebook的GIS-RS编程扩展。CUDA是NVIDIA公司基于GPU的通用计算体系。CUDA运算中,32个Thread(1个Warp)组成运行和调度的基本单元。通过对GPU数据组织、存储器访问控制、线程划分等可实现程序的粗粒度与细粒度并行。Python下遥感图像运算的CUDA并行开发可使用Numba(通过及时编译机制优化Python代码)或PyCUDA(按照C/C++语法调用CUDA内核函数)实现。本研究使用的OpenCV、图像CUDA并行运算的Numba都集成在Anaconda3里。
使用从北京揽宇方圆信息技术有限公司购买的2018-01-24楚雄市区WorldView3全色和多光谱Pansharping融合数据。分别截取3组重叠率为20%、65%、80%的切片数据,每组为1 210像素×630像素的两幅彩色图片,共6张。计算机配置为Intel Core i7 6700 3.4GHz、内存DDR4 8G、显卡GTX970(1664 CUDA Core)。
图2 Jupyter Notebook的GIS-RS编程扩展
2.2 ED-SIFT计算及其CUDA并行计算对比实验
本研究使用方法包括:①基于ED-SIFT算法的图像拼接。待拼接图像先执行高效率边缘检测,减少参与SIFT计算的数据量;优选能使图像拼接加速的边缘检测算法;进行图像拼接的最优特征点坐标对计算代码优化、图像缝合代码优化。②对以上图像拼接方法的Numba加速实验。
实现方法为:①ED-SIFT算法实现。将本算法封装为5个函数(边缘检测-SIFT-特征匹配、最优特征点坐标对获取、后续计算),统计总耗时。为代码添加@auto.jit修饰器,再次统计总耗时。②ED-SIFT算法的最优特征点坐标对获取代码CUDA并行。使用cuda.jit修饰器,修改Numba不能识别的最优特征点坐标对获取代码,将参数转换为Numba支持的基本数据类型,进行多线程运算设计,最终实现基于CUDA的多线程并行。此程序中计算总耗时采用循环100次的平均耗时。
3 结果与分析
3.1 基于ED-SIFT算法的图像拼接结果与分析
基于ED-SIFT的图像拼接算法实现中,完成5种图像边缘检测、最优特征点坐标对直接映射、图像缝合时整图拷贝。以Soble运算为例,执行运算后,图像数据量明显减少。图3是待拼接图像及其Sobel运算后的直方图对比。
本研究共组合出7种计算方法,对比7种方法的计算效率(待拼接图像重叠率为65%)。图4是基于SIFT图像拼接和基于ED-SIFT的图像拼接的特征点及最优匹配点对比。表1是7种图像拼接方法的特征点和速度对比。
图3 待拼接图像及其Sobel运算后的对比
特征点数量对比:表1中方法1~2不进行边缘检测,未改变参与运算的数据量,SIFT计算特征点数量相同。局部特征基本条件是需要一定数目的特征点[19]。采用5种边缘检测,除 Scharr运算外,再进行SIFT运算得到的特征点数目都变少,其中Canny运算特征点急剧减少,不宜采用。基于ED-SIFT图像拼接优选的边缘检测采用Sobel运算。两个待拼接图像执行基于ED-SIFT的图像拼接,特征点合计从28 339个减少至10 117个,减少64.3%;匹配点对从14 229个减少至5 324个,减少62.6%;最优点对数从5 933个减少至754个,减少87.3%。ED-SIFT算法特征点总数减少,但仍能保持一定数目的特征点。
图4 基于SIFT图像拼接和基于ED-SIFT图像拼接的特征点及最优匹配点对比
计算耗时对比,
S=(T2-T1)/T1.
(1)
式中:S为加速倍率,T2为基于SIFT的图像拼接方法耗时,T1为其余某一种算法耗时。基于SIFT的图像拼接平均耗时10.05 s,图像缝合使用整图拷贝后提速明显;5种图像边缘检测算法参与后,虽然过程变长,但除Scharr运算对图像拼接起阻碍作用外,其余4种边缘检测对图像拼接起到促进作用,且Sobel算法加速效果最好。本研究确定的基于ED-SIFT的图像拼接算法(表1中方法3)选定的Sobel运算在减少特征点数量和加快图像拼接速度两方面皆占优势。基于SIFT的图像拼接方法平均耗时10.05 s,基于ED-SIFT的图像拼接算法平均耗时为0.96 s,加速倍率(S)为9.47,即速度加快9.47倍。
不同重叠率图像拼接对比:使用重叠率分别为20%、65%、80%、100%的图片组进行实验。表2是基于ED-SIFT的图像拼接算法对不同重叠率图片拼接实验结果。本研究建立的基于ED-SIFT的图像拼接算法对4种重叠率的图像拼接平均耗时都在0.96~1.08 s,图像成功拼接。图像拼接中计算产生的最优特征点数目变化较大,但是耗时差异不明显。说明基于边缘检测+SIFT运算的图像拼接方法切实可行。
表1 7种图像拼接方法的特征点和速度对比(重叠率:65%)
表2 基于ED-SIFT的图像拼接算法对不同重叠率图片拼接实验结果
3.2 Numba并行运算加速结果与分析
搭配使用CUDA的@auto.jit修饰器、@cuda.jit修饰器进行加速运算,两种方法整体速度都变慢。OpenCV下,边缘检测、SIFT运算、BFmatch图像匹配、单应矩阵运算、图像变换都各自集合为函数,@auto.jit修饰器对其无益。对最优点的坐标对获取使用@cuda.jit修饰器并行加速。然而Numba支持Numpy等基本的数据类型,但不支持SIFT运算产生的CV2.KeyPoint类和BFmatch特征点匹配产生的CV2.DMath类。必须把计算中使用的distance值等数据提取出来才能加载到CUDA运算。最优点对的坐标获取优化本身耗时不多,@cuda.jit运算需涉及数据类型转换、数据拷贝、程序调度、程序启动等操作,需一定的时间,这些原因导致@cuda.jit 修饰器计算速度变慢。OpenCV函数高度集成,OpenCV+Numba环境下加速,Numba支持的功能和支持的数据类型有限,对基于ED-SIFT的图像拼接提速已不明显。OpenCV下的算法加速还是需以减少数据量和代码优化为主。
4 结束语
建立基于ED-SIFT的图像拼接算法,通过Sobel边缘检测减少参与SIFT计算的数据量和优化计算代码的方法实现图像拼接加速。在计算机上,以Pyhon+OpenCV为平台,对1 210像素×630像素的WorldView3切片数据进行拼接实验,平均耗时为0.96 s,与传统基于SIFT的图像拼接算法相比,在保证一定数目的特征点的同时,速度加快9.47倍。使用该算法对重叠率为20%、65%、80%的切片数据进行拼接,都能成功拼接,耗时在0.96~1.08 s。继续进行OpenCV+Numba下基于ED-SIFT的图像拼接,提速不明显。
基于ED-SIFT的图像拼接算法进行高分辨率遥感图像快速拼接取得较好效果。以Pyhon+OpenCV为平台的RS-GIS数据处理,一定程度上降低了开发难度。对基于特征点提取为基础的图像快速拼接、基于CUDA的图像拼接并行计算等相关研究有待同仁继续努力。