激光与光电子学进展, 2021, 58 (2): 0210020, 网络出版: 2021-01-11   

一种适用于行星表面特征提取的实时SIFT算法 下载: 879次

A Real-Time SIFT Algorithm for Planetary Surface Feature Extraction
单宝彦 1,2,3朱振才 1,*张永合 1,3邱成波 1,2,3
作者单位
1 中国科学院微小卫星创新研究院, 上海 201203
2 中国科学院大学, 北京 100049
3 中国科学院微小卫星重点实验室, 上海 201203
摘要
在行星探测任务中,针对尺度不变特征变换(SIFT)算法计算量大,无法同时满足对导航算法准确性和实时性要求的问题,提出了一种基于快速高斯模糊的并行化SIFT算法,即FG-SIFT算法。首先,将算法中构建高斯金字塔的二维高斯核函数分离成两个一维高斯函数,降低算法的计算复杂度。然后,对于每一维高斯函数,使用两个无限脉冲响应滤波器串联进行逼近,进一步减少计算量。最后,利用并行化处理的优势,设计算法各部分的并行化计算方案。仿真结果表明,FG-SIFT算法的计算效率相较于原SIFT算法平均提高了15倍,相较于没有使用快速高斯模糊的SIFT算法,在图形处理器上的运行效率也有近2倍的提高,很大程度上减少了特征点提取的计算时长,提高了算法的实时性。
Abstract
In order to solve the problem that the scale invariant feature transform (SIFT) has a large amount of calculation and cannot meet the requirements of accuracy and real-time in the navigation algorithm, a parallel SIFT algorithm FG-SIFT based on fast Gaussian blur is proposed. First, the two-dimensional Gaussian kernel function, which constructs the Gaussian pyramid, is separated into two one-dimensional Gaussian functions to reduce the computational complexity. Then, two infinite impulse response filters are used in series to approximate each one-dimensional Gaussian kernel function to further reduce the computational complexity. Finally, using the advantage of parallel processing, the parallel computing scheme of each part of the algorithm is designed. Simulation results show that the computational efficiency of FG-SIFT algorithm is 15 times higher than that of the original SIFT algorithm, and the running efficiency of FG-SIFT algorithm on graphics processing unit is nearly 2 times higher than that of SIFT without fast Gaussian blur. This algorithm greatly reduces the calculation time of feature point extraction and improves the real-time performance.

1 引言

随着航天技术的发展,行星探测任务从地基空基望远镜观测逐渐延伸到航天器的近距离观测[1],例如:美国发射的“勇气号”火星车任务和日本对近地小行星1999 JU3进行的“隼鸟2号”任务等。由于一般的行星与地球距离遥远,难以在地球与探测器之间建立实时有效的通信,因此,探测器需要具备自主导航的能力。这就需要探测器能够实时感知周围的环境,而视觉传感器具有采集信息量大、特征丰富以及成本较低的特点,使其在远距离探测中发挥着越来越重要的作用。在航天器进入低高度观测阶段,可利用视觉传感器所采集的图像信息,对相邻帧图像的重叠部分区域进行特征匹配,进而解算前后移动的相对位置关系,实现探测器自主光学导航的目的。同时,深空小天体距离遥远、表面环境复杂且未知,对于科学价值高的C类小行星,存在表面分化层颗粒细密、反照率低等特点。这不仅需要对图像进行实时在线处理,还对导航算法的精度和鲁棒性提出了较高的要求。

尺度不变特征变换(SIFT)算法,是一种自动检测图像中的关键点信息,并生成描述符的算法[2]。由于其自身对图像具有尺度不变性,而且对于仿射变换、噪声、光照变化等具有一定的鲁棒作用,使其特征提取匹配的精度远高于其他方法,符合行星探测任务中鲁棒性的需要。但是该算法的计算复杂度高,算法耗费时间长,不能满足实时性的要求。针对这一问题,国内外学者进行了很多研究。Zhao等[3]在确定关键点的主方向时,充分考虑了距离关键点较近的像素的贡献,将检测点同尺度邻域内的其他14个点和相邻尺度的邻域进行比较,减少了计算的开销。Li等[4]利用Sobel边缘检测器生成边缘群尺度空间,SIFT检测器在边缘群尺度空间的约束下检测极值点。李鹤宇等[5]通过对灰度图像增强预处理,弥补了生成灰度图时信息丢失的问题,再用DAISY描述子替代SIFT描述子进行图像的特征点提取。Bay等[6]利用积分图像和更小维度的描述子向量来简化算法的计算量,提升算法性能。这些方法虽然有效地降低了运算复杂度,但却损失了特征提取匹配的精度和算法的精确性。

因此,本文提出了一种使用快速高斯模糊的并行化SIFT算法FG-SIFT。利用图形处理器(GPU)在并行计算和浮点计算方面的优势[7-9],优化各计算步骤在GPU和中央处理器(CPU)端的分配、调度及数据传输,在保证一定匹配精度的情况下,提高算法的计算效率,以满足在航天器自主光学导航任务中对特征点匹配结果的准确性和实时性的要求。

2 SIFT算法原理

SIFT算法的实质是在不同尺度空间检测关键点,求取关键点的主方向并生成特征描述子。主要流程包括:尺度空间的构建、定位关键点并确定主方向、生成各个关键点的特征描述向量[2]

1) 构建高斯差分金字塔

尺度空间的构建由对图像的降采样处理和高斯模糊来实现。首先第0组图像由原图像扩大2倍得到,然后再对图像依次降采样得到一组从下到上依次减小的塔状模型,根据原始图像的大小,可以得到共计o组图像,然后对每一组图像进行不同尺度的高斯模糊。将高斯模糊后的图像记为L(x,y,σ),其中xy用来标记像素点的位置,σ是高斯函数的标准差。原图像记为Ix,y,那么高斯模糊后的图像可以表示为原图像Ix,y与高斯核函数Gx,y,σ的卷积,即

Lx,y,σ=Gx,y,σ*Ix,y,(1)

其中,二维高斯核函数为

Gx,y,σ=12πσexp-x2+y22σ2(2)

改变高斯核σ的值,就可以得到一组不同尺度下的高斯图像,由此生成图像的高斯金字塔。在进行极值点检测的过程中,还需要构建高斯差分金字塔(DOG)。其函数表示为D(x,y,σ),是由高斯金字塔中一组图像的相邻层图像灰度值相减得到,即

Dx,y,σ=Gx,y,-Gx,y,σ*Ix,y=Lx,y,-Lx,y,σ(3)

2)关键点精确定位

在构建好的DOG差分尺度空间进行局部极值点检测。对当前像素值与其周围像素及相邻上下两层共计26个像素的灰度值进行比较。若该像素的灰度值为极大或极小值,则该像素被确定为一个关键点的候选点。

由于上述方法选择的关键点是在离散空间的极值点,还需要通过线性插值的方法对关键点进行精确定位。获取关键点精确位置的插值函数用DOG函数在尺度空间的二阶泰勒展开来表示

DX=D+DXTX+12XT2DD2X,(4)

式中:X=(x,y,σ)T

对(4)式求导数并使方程等于零,可得到极值点的偏移量为

X˙=-2DX2-1DX(5)

极值点的函数值可表示为

DX˙=D+12DXTX˙(6)

经过有限次的迭代,求得关键点原位置加上极值点的偏移量,即为关键点的精确位置。

3) 关键点方向分配

为了满足关键点的旋转不变性,对关键点局部梯度做直方图统计,确定统计直方图角度的最大值作为关键点的主方向。同时,把大于统计直方图最大值80%的方向作为关键点的辅方向。至此,获得了关键点的精确位置、尺度和主方向。

4) 生成描述符

确定关键点的主方向后,将坐标轴旋转至关键点的主方向上,以确保描述符的旋转不变性。在关键点的4×4邻域内,每个邻域作为一个种子点,统计8个方向的灰度梯度直方图。共计得到4×4×8=128维的特征向量,作为关键点的特征描述子。

3 基于快速高斯模糊的SIFT改进算法

为了增强特征点提取的鲁棒性,SIFT算法需要在构造的多组高斯金字塔中进行特征点检测。而高斯金字塔的构建及高斯模糊的过程,是SIFT算法中耗时最长的一部分。本文算法通过分离二维高斯核及使用两个级联IIR滤波器对分离后的一维高斯函数进行逼近,代替原算法中的二维高斯模糊来构建差分金字塔,并在建立高斯差分金字塔及SIFT特征点检测时,使用统一计算设备架构(CUDA)来加速算法的实现过程。具体算法流程如图1所示,虚线右侧是原算法的实现流程,左侧为本文改进后的算法流程。

图 1. 本文算法流程图

Fig. 1. Flow chart of proposed algorithm

下载图片 查看所有图片

3.1 分离二维高斯核函数

根据(1)式,选取半径大小为3σ的窗口进行高斯模糊计算,对于每个像素需要进行36σ2次乘加运算。由此可得,对于大小为m×n的图像,进行一次二维高斯模糊运算所需的时间复杂度为om×n×σ2。注意到(2)式可以分解为

Gx,y,σ=12πσ2exp-x22σ2exp-y22σ2(7)

则(1)式可以写为

Lx,y,σ=i=x-3σi=x+3σj=y-3σj=y+3σIi,j,σ×Gi-x,j-y,σ=i=x-3σi=x+3σ12πσexp-i-x22σ2*j=y-3σj=y+3σ12πσexp-j-y22σ2×Ii,j,σ(8)

gp,σ= 12πσexp -p22σ2则(8)式可以写为

Lx,y,σ=i=x-3σi=x+3σgi-x,σ*j=y-3σj=y+3σgj-y,σ×Ii,j,σ(9)

hx,y= j=y-3σj=y+3σgj-y,σIx,j,则可得到

Lx,y,σ=i=x-3σi=x+3σgi-x,σhi,y(10)

由此,对图像进行二维高斯模糊可以分解为两次一维高斯模糊。由(10)式可知,第一次一维高斯模糊的时间复杂度为o(m×n×σ),第二次高斯模糊的复杂度也为o(m×n×σ)。因此,对于分解为两次一维高斯模糊后的算法,时间复杂度为o(m×n×σ)。

3.2 一维快速高斯模糊

对于分离出的一维高斯函数,可将其近似并分解为两个递归滤波器串联。

Lmidx=Ix+a0Ix+a1Ix-1+b1Lmidx-1+b2Lmidx-2Lx=Lmidx+a'0Ix+a'1Ix+1+b1Lx+1+b2Lx+2,(11)

式中:a0a1a'0a'1b1b2为系数。与σ的关系分别为

a0=1-λ21+2αλ-b2a1=a0λα-1a'0=a0λα+1a'1=-a0b2b1=-2λb2=exp-α,(12)

式中:α= exp(0.7262)σ;λ=exp(-α)。由此,一维高斯模糊可近似为两次处理,第一次从前至后,称为前向滤波,第二次从后至前,称为后向滤波。

一维快速高斯模糊可复用其前后两次输出的结果进行计算,使得算法的计算时间复杂度与窗口半径无关,即运算复杂度与σ取值无关,所以算法的复杂度为om×n

4 仿真设计及结果分析

4.1 快速高斯模糊的并行化实现方案

由(11)式可知,为实现半径无关的高斯模糊算法,一维高斯模糊中的前向滤波和后向滤波分别依赖于前后两次的输出结果。因此,对于每次一维高斯模糊的计算,图像的每一行或列应当被分配到同一个线程中。由于图像一般是以行主序存储,那么如果进行横向一维高斯模糊,则会导致同一个warp中每个线程所读取的内存不连续。所以,为了保证warp在同一时刻读取连续的内存,本节选择实现纵向一维高斯模糊,之后再转置图像,进行第二次纵向快速高斯模糊。在单个线程内,每次前向滤波的迭代,其取像素地址自增图像宽度;每次后向滤波的迭代,其取像素自减图像宽度。并且对于每个线程id,即blockIdx.x*blockDim.x+threadIdx.x,都代表连续的图像横坐标。高斯核函数实现如图2所示。

图 2. 高斯核函数实现流程

Fig. 2. Gaussian kernel function implementation process

下载图片 查看所有图片

由于每次一维高斯模糊需要进行两次滤波运算,为了减少访存带来的延迟,可使用共享内存存放中间结果。在灰度图中,每个像素需占用一个字节,且需要存储一次中间结果。由此,对于本文所使用的GPU,在使用共享内存存储中间结果时,最大可支持对高度为1536pixel的图像进行处理。由于图像转置之后需要再进行一次一维高斯模糊,所以最大可支持1536pixel×1536pixel、深度为8bit的灰度图进行处理。由(11)式可知,在进行后向模糊时,也可以将中间结果存入输出缓存,避免对图像大小的限制,但是访问全局内存会带来延迟问题。因此,本文采取根据图像大小选取中间结果存放位置的方案。为了避免Bank Conflict,对共享内存中的临时数据采取如表1所示的布局。

表 1. block内共享内存布局

Table 1. Shared memory layout in block

Bank0Bank1Bank2Bank3Bank4
(0,0)→(0,7)(1,0)→(1,7)(2,0)→(2,7)(3,0)→(3,7)(4,0)→(4,7)
(0,8)→(0,15)(1,8)→(1,15)(2,8)→(2,15)(3,8)→(3,15)(4,8)→(4,15)

查看所有表

4.2 关键点提取的并行化实现方案

以Group为单位进行关键点提取运算。对于每个Group,分别对每张图像进行关键点初筛。由于需要对每个点周围像素以及上下两层图像对应的像素进行比较,因此需要对全局内存进行随机访问。对于每张图像,仍然采取按照列分配线程的方式进行运算,其流程如图3所示。

图 3. 关键点提取并行化流程

Fig. 3. Key point extraction parallelization process

下载图片 查看所有图片

对于每个初筛结果,分配一个线程进行关键点的精确定位和筛选,并同时传入以初筛结果个数为依据分配的显存,用以存储精确筛选的特征点。对于舍弃的特征点,存入坐标(-1,-1)。为每个精确特征点分配一个线程计算主方向和特征向量,并传入合适大小的显存区域,存放结构如下:{(x, y) | 描述子}。最后,将得到的结果拷贝回主机内存,在CPU上进行特征点匹配。

4.3 快速高斯模糊与高斯模糊结果对比

为了保证结果的精确性,本节对比了基于CUDA实现的快速高斯模糊和原高斯模糊算法的计算结果,分别取σ∈{σσ=σ02sS+n,S=5,s=0,n=1,2,…,6},统计每个σ取值时两种算法计算结果的平均误差和最大误差,其统计结果如表2所示。

表 2. 不同σ值的误差统计

Table 2. Error statistics of different σ values

Numberσ valueAverage error /%Maximum error /%
11.9030.8107.059
22.2630.4877.059
32.6930.3337.451
43.2000.8237.059
53.8050.5067.843
64.5250.4938.627

查看所有表

对于所有图像,本文使用的快速高斯模糊算法与原高斯模糊算法之间的误差分布如图4所示。

图 4. 误差分布图

Fig. 4. Error distribution

下载图片 查看所有图片

图4可知,基于CUDA的快速高斯模糊算法相较于原高斯模糊算法,其计算结果误差集中分布于5pixel以下,误差极小。

4.4 仿真结果及性能分析

目前,比较好的SIFT改进算法有加速稳健特征(SURF)[6]和SiftGPU[10]。区别于SIFT利用高斯差分金字塔进行极值点检测,SURF主要使用Hessian矩阵行列式近似值图像来检测关键点,并采用盒型滤波器和积分图来简化计算,使得计算速度有了3倍的提升。SiftGPU[10]是当前使用最为广泛的SIFT算法的GPU版本,可采用CUDA或OpenGL对SIFT算法进行加速。为了对本文算法的精确性和实时性进行评估,本节将选取四组不同旋转角度及四组不同像素尺寸的模拟小行星实物影像作为测试图像进行仿真实验,并与开源库OpenCv提供的SIFT算法、文献[ 6]中的SURF算法、文献[ 10]中的SiftGPU算法进行对比。为了保证实验结果的准确性,所有算法的验证过程均使用统一硬件平台,主要配置为AMD Ryzen7 3800X + RTX2070。图5展示了在模拟小行星旋转角度为24°时,四种算法对相邻图像序列进行匹配,并使用随机采样一致(RANSAC)算法剔除误匹配后的结果。

图 5. 四种算法的特征点匹配结果。(a) SIFT算法;(b) SiftGPU算法;(c) SURF算法;(d) FG-SIFT算法

Fig. 5. Feature point matching results of four algorithms. (a) SIFT algorithm; (b) SiftGPU algorithm; (c) SURF algorithm; (d) FG-SIFT algorithm

下载图片 查看所有图片

表3统计了在选取的四组不同旋转角度测试图像下,不同算法的匹配结果。其中,使用有效的匹配数量在总匹配数量中的占比来表示匹配结果的准确度,使用匹配的特征点解算出的模拟行星旋转角度与每组图像的真实转角之间的误差作为匹配精度。由表3对比结果可知:原SIFT算法在四组不同的旋转角度下,匹配结果的准确度和精度均为最高;SiftGPU由于仅对SIFT算法进行了并行化,并未对算法计算原理进行改变,所以匹配结果与SIFT相仿;SURF算法在每组匹配中均获得了数目最多的匹配数量,但是有效的匹配数量随着旋转角度的增大而快速减少,导致匹配结果的准确度远低于其他算法。且SURF算法解算出的角度误差较大;FG-SIFT是对原SIFT算法进行了改进,匹配效果略有下降,但仍保持了较高的匹配精度和准确度。

表 3. 四种算法匹配效果

Table 3. Matching effect of four algorithms

AlgorithmImageGroup 1Group 2Group 3Group 4
Real angle /(°)4.278.8214.6024.00
Total matches693869063344830
Effective matches679865362867428
OpenCv_SIFTMatching accuracy /%98.094.685.751.6
Calculated angle /(°)4.349.0314.3124.31
Angel error /%1.642.381.991.29
Total matches676664083147734
Effective matches660160142715379
SiftGPUMatching accuracy /%97.693.986.351.6
Calculated angle /(°)4.219.0314.9124.29
Angel error /%1.412.382.121.21
Total matches118441258276081578
Effective matches764459391902161
SURFMatching accuracy /%64.547.225.010.2
Calculated angle /(°)4.547.5010.4427.61
Angel error /%6.3214.9728.4915.04
Total matches691663262580726
Effective matches648159642180379
FG-SIFTMatching accuracy /%93.794.384.552.2
Calculated angle /(°)4.368.5914.2624.70
Angel error /%2.112.612.332.92

查看所有表

为了进一步验证本文算法在计算效率上的提升,图6统计了在对四组不同像素尺寸图像进行特征点提取时,不同算法的运算时间和加速比。其中,在计算效率的对比中,SURF算法使用开源库OpenCv提供的GPU版本,在后文中使用SURF_GPU论述。图7统计了在只构建高斯差分金字塔的部分,OpenCv_SIFT、FG-SIFT与SiftGPU的运算时间和加速比。

图 6. 特征点提取耗时对比。(a)耗时统计;(b)算法加速比

Fig. 6. Time-consuming comparison of feature point extraction. (a) Time-consuming statistics; (b) algorithm speedup ratio

下载图片 查看所有图片

图 7. 构建高斯金字塔耗时对比。(a)耗时统计;(b)算法加速比

Fig. 7. Time-consuming comparison of building Gaussian pyramid. (a) Time-consuming statistics; (b) algorithm speedup ratio

下载图片 查看所有图片

图6可以看出,处理一张720 pixel×1280 pixel的图像时,使用原SIFT算法需要耗时1016 ms,无法满足对算法实时性的要求。FG-SIFT与SURF_GPU算法耗时相当,均为60 ms左右,表现最优。SiftGPU虽然相比于原SIFT算法,在计算速度上有一定提升,但是与另外两种算法相比,还有一定差距。

总体上,使用本文基于快速高斯模糊的FG-SIFT算法,与原SIFT算法相比平均运算效率有了15倍左右的提升,与没有使用快速高斯模糊的SiftGPU方法相比,运算效率也提高了接近2倍。结合图7的统计结果可知,在只进行构建高斯差分金字塔的部分,相比于SiftGPU方法,计算效率平均提升了2.9倍。可见快速高斯模糊在提升整体算法的计算效率上表现出了较大的优越性。

5 结论

本文针对传统SIFT特征提取算法计算量大、实时性不高、无法满足在深空探测场景中的应用需求的问题,提出了一种基于快速高斯模糊的SIFT改进算法。并利用GPU并行化处理的优势,设计构建高斯金字塔和特征点提取部分的并行化方案,基于CUDA平台进行性能校验。仿真结果表明,改进的SIFT算法在特征提取计算效率上比原算法提高了近15倍,并且仍然保证了合理的精度,相对于未使用快速高斯模糊的SiftGPU算法也有接近2倍的速度提升,可同时满足在行星探测任务中对算法准确性和实时性的需求。

参考文献

[1] 向永嘉, 黎福海, 刘泽. SIFT在行星表面探测器视觉导航系统中的应用[J]. 传感器与微系统, 2011, 30(2): 129-131.

    Xiang Y J, Li F H, Liu Z. Application of SIFT in vision navigation system of planet surface rover[J]. Transducer and Microsystem Technologies, 2011, 30(2): 129-131.

[2] Lowe D G. Distinctive image features from scale-invariant keypoints[J]. International Journal of Computer Vision, 2004, 60(2): 91-110.

[3] ZhaoJ, LiuH, FengY, et al. BE-SIFT: a more brief and efficient SIFT image matching algorithm for computer vision[C]// IEEE International Conference on Computer & Information Technology Ubiquitous Computing & Communications Dependable. IEEE, 2015: 568- 574.

[4] LiY, Liu LS, Wang LH, et al.Fast SIFT algorithm based on Sobel edge detector[C]//2012 2nd International Conference on Consumer Electronics, Communications and Networks (CECNet), April 21-23, 2012, Yichang, China.New York: IEEE Press, 2012: 1820- 1823.

[5] 李鹤宇, 王青. 一种具有实时性的SIFT特征提取算法[J]. 宇航学报, 2017, 38(8): 865-871.

    Li H Y, Wang Q. A real-time SIFT feature extraction algorithm[J]. Journal of Astronautics, 2017, 38(8): 865-871.

[6] Bay H, Ess A, Tuytelaars T, et al. Speeded-up robust features (SURF)[J]. Computer Vision and Image Understanding, 2008, 110(3): 346-359.

[7] 王蓓蕾, 朱志良, 孟琭. 基于CUDA加速的SIFT特征提取[J]. 东北大学学报(自然科学版), 2013, 34(2): 200-204.

    Wang B L, Zhu Z L, Meng L. CUDA-based acceleration algorithm of SIFT feature extraction[J]. Journal of Northeastern University (Natural Science), 2013, 34(2): 200-204.

[8] Du C Y, Yuan J L, Dong J S, et al. GPU based parallel optimization for real time panoramic video stitching[J]. Pattern Recognition Letters, 2018, 133(5): 62-69.

[9] Acharya K A, Venkatesh Babu R, Vadhiyar S S. A real-time implementation of SIFT using GPU[J]. Journal of Real-Time Image Processing, 2018, 14(2): 267-277.

[10] Wu CC. SiftGPU: a GPU implementation of scale invariant feature transform (SIFT)[EB/OL].[2020-05-11].https://github.com/stanley0614/SiftGPU.

单宝彦, 朱振才, 张永合, 邱成波. 一种适用于行星表面特征提取的实时SIFT算法[J]. 激光与光电子学进展, 2021, 58(2): 0210020. Baoyan Shan, Zhencai Zhu, Yonghe Zhang, Chengbo Qiu. A Real-Time SIFT Algorithm for Planetary Surface Feature Extraction[J]. Laser & Optoelectronics Progress, 2021, 58(2): 0210020.

本文已被 2 篇论文引用
被引统计数据来源于中国光学期刊网
引用该论文: TXT   |   EndNote

相关论文

加载中...

关于本站 Cookie 的使用提示

中国光学期刊网使用基于 cookie 的技术来更好地为您提供各项服务,点击此处了解我们的隐私策略。 如您需继续使用本网站,请您授权我们使用本地 cookie 来保存部分信息。
全站搜索
您最值得信赖的光电行业旗舰网络服务平台!