Sift算法的优点是特征稳定,对旋转、尺度变换、亮度保持不变性,对视角变换、噪声也有一定程度的稳定性;缺点是实时性不高,并且对于边缘光滑目标的特征点提取能力较弱。
当前视觉算法基于特征点,在低纹理及光源发生变化时,定位效果会下降,3分钟内重定位成功率会低于90%,满足不了客户需求。因此当前需要新的优化方法,点线结合的定位方式是一个比较好的方向。因为线特征是周围梯度方向一致的点的集合,而光源变化对梯度方向一致影响较小。同时室内低纹理场景,房顶轮廓还是可以提取出比较好线特征。而且,线特征的三位重建,可实现对房屋的轮廓提取,门提取。
大多数图像中都存在直线特征,是视觉感知、描述外部环境的重要特征信息。直线是一种大尺度的特征,在水面环境中具有更为理想的适用性,线特征具有光照和视角不变性特点,表现更为稳定、有效。因此将点、线特征进行结合使用,可以有效的提高系统的精度和鲁棒性。
- 1点特征选型
常用特征点提取算法有harris、fast、surf、SIFT。Harris角点只具有旋转不变性,不具有尺度不变性。Fast角点需要像ORB那样进行各种优化,才具有旋转不变性,尺度不变性。且Harris与Fast都采用brief描述子,其对光强变化敏感。surf为SIFT的优化版,其主要降低了算力消耗,但SIFT搜索出的特征点更加精确。因此我们选择了SIFT特征点,其特征稳定,对旋转、尺度变换、亮度保持不变性,对视角变换、噪声也有一定程度的稳定性。
- 2特征提取
SIFT点特征提取算法过程可分为如下几个步骤:
采集图像->高斯金字塔->差分金字塔->提取特征点->关键点定位->去除低对比度点->去除强边缘->确定描述符主方向->产生描述符[6]。
LSD线特征提取算法过程可分为如下几个步骤:
采集图像->高斯金字塔->梯度计算->对梯度进行排序->判断梯度幅值阈值->线段支持域更新增长->矩形估计->错误报警数(Number of False Alarms, NFA)计算[7]。
SIFT和LSD提取都采用了高斯金字塔,因此可以共用高斯金字塔。图像首先计算高斯金字塔,然后将此高斯金字塔分别提供给SIFT和LSD去提取对应的点特征和线特征。
- 3描述符
1.3.1点特征
图1 SIFT描述符区域图[8]
Fig.1 SIFT descriptor area graph
如图1所示,红色点为提取出的特征点。以它为中心,周围形成16个区域,每个区域累计八个方向上像素的梯度。因此每个特征点,采用4*4*8共128维梯度向量的描述子进项关键点表征。为了降低算力消耗,这里我们将128纬梯度向量降低到4*8共32维,只取特征点周围的四个区域。但这样的修改会导致标准的描述符匹配会出现比较多的误匹配,我们算法后续会加入比较好的去误匹配算法来规避这个隐患。
- 3.2线特征
图2 LBD描述符条带图[9]
Fig.2 LBD descriptor band graph
如图2所示,中间黑线为检测出的直线。以它为中心构建m 个条带,每一个条带的像素宽度为 w 。比如上图就是 m = 5 , w = 3 。
线特征采用LBD描述符,其由条带各行四个方向梯度的平均向量(某个方向梯度和除以行数) Mj 和标准方差向量 Sj 构成。
我们这里用M,作为线特征的SIFT描述子。这样,无论是点特征还是线特征都采用SIFT描述子。
因此提取算法中将准方差向量 S的相关计算统统删除,以减少算力消耗。最后对LDB的梯度的平均向量M进行归一化,减小非线性光照的影响。
- 4 总结
SIFT特征点,具有对旋转、尺度变换、亮度保持不变性,对视角变换、噪声也有一定程度的稳定性。线特征也具有上面相同的特性。
旋转不变性,线特征具有方向,为梯度一致的连续点组成,因此具有旋转不变性。
尺度不变性,噪声的稳定性,都是基于高斯金字塔实现的,而线特征也和SIFT一样,提取特征都是基于高斯金字塔图像上提取的,因此线特征也具有尺度不变性和噪声的稳定性。
亮度不变性,基于描述符幅值的归一化实现。而线特征也对描述符的均值部分进行了归一化操作,因此也具有亮度不变性。
基于SIFT和线特征特性相同。因此二者的结合并不会引起性能的下降,只会带来1+1>2的效果。线特征对角度敏感,线特征的重投影误差,采用端点到直线的距离,此重投影误差对角度敏感,可以大大提升位姿的姿态准确性。