视觉slam----特征总结 sift fast harris superpoint以及线特征

  1. 点特征
    1. 1 Sift

        Sift特征点的提取过程主要分为如下几步。

        采集图像->高斯金字塔->差分金字塔->提取特征点->关键点定位->去除低对比度点->去除强边缘->确定描述符主方向->产生描述符。

              1.1.1  高斯金字塔

        高斯金字塔,采用高斯核卷积运算与双线性插值对图像进行下采样。

        高斯核卷积运算就是对整幅图像进行加权平均的过程,每个一个像素点的值,都由其本身和领域内的其他像素值经过加权平均后得到。

        高斯金字塔并不是一个金字塔,而是有很多组(Octave)金字塔构成,并且每组金字塔都包含若干层(Interval)。

        高斯金字塔构建过程:

        a. 先将原图像扩大一倍之后作为高斯金字塔的第1组第1层,将第1组第1层图像经高斯卷积(其实就是高斯平滑或称高斯滤波)之后作为第1组金字塔的第2层,高斯卷积函数为:

对于参数σ,在Sift算子中取的是固定值1.6。

       b. 将σ乘以一个比例系数k,等到一个新的平滑因子σ=k*σ,用它来平滑第1组第2层图像,结果图像作为第3层。

       c. 如此这般重复,最后得到L层图像,在同一组中,每一层图像的尺寸都是一样的,只是平滑系数不一样。它们对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。

              1.1.2  差分金字塔

       差分金字塔,DOG(Difference of Gaussian)金字塔是在高斯金字塔的基础上构建起来的,其实生成高斯金字塔的目的就是为了构建DOG金字塔。

       DOG金字塔的第1组第1层是由高斯金字塔的第1组第2层减第1组第1层得到的。以此类推,逐组逐层生成每一个差分图像,所有差分图像构成差分金字塔。概括为DOG金字塔的第o组第l层图像是有高斯金字塔的第o组第l+1层减第o组第l层得到的。

DOG金字塔的构建可以用下图描述:

        每一组在层数上,DOG金字塔比高斯金字塔少一层。后续Sift特征点的提取都是在DOG金字塔上进行的。

              1.1.3  提取特征点

        为了寻找DOG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度空间域的相邻点大或者小,如下图所示:

       在二维图像空间,中心点与它3*3邻域内的8个点做比较,在同一组内的尺度空间上,中心点和上下相邻的两层图像的2*9个点作比较,如此可以保证检测到的关键点在尺度空间和二维图像空间上都是局部极值点。

              1.1.4  关键点精确定位及去除低响应点

       由于像素时离散的,且尺度空间也是离散的(前后尺度成k倍),有可能找到的极值点是真正极值点旁边的点,如下图:

     为了精确定位关键点,需要对尺度空间DoG函数进行曲线拟合。利用DoG函数在尺度空间的Taylor展开式(拟合函数)为:

     然后对f(X)求导来得到极值点。求导方法用相邻像素差值代替求导。

     舍去低对比度的极值点,|D(x)|小于某个经验值(Lowe论文中使用0.03,Rob Hess等人实现时使用0.04/S)的极值点删除。对应公式:T取0.04,n和S一样,你想提取多少个图片的特征;(n)S表示每组提取多少层。

              1.1.5  去除强边缘

        Sift有去强边缘。去强边缘原理如下文章,边缘变细会退化成特征点,计算hession矩阵,计算高斯曲率,高斯曲率变大的点才是特征点。

        H(x,y)为hession矩阵。

              1.1.6  描述符

                       1.1.6.1  主方向

          采集特征点所在高斯金字塔图像3σ领域窗口内像素的梯度和方向分布特征。在以关键点为中心的邻域窗口内采样,并用直方图统计邻域像素的梯度方向。梯度直方图的范围是0~360度,其中每10度一个方向,总共36个方向。直方图的峰值则代表了该关键点处邻域梯度的主方向,即作为该关键点的方向。

        每个特征点必须分配一个主方向,还需要一个或多个辅方向,增加辅方向的目的是为了增强图像匹配的鲁棒性。辅方向的定义是,当一个柱体的高度大于主方向柱体高度的80%时,则该柱体所代表的的方向就是给特征点的辅方向。

        上图为主方向的精确确认。

                       1.1.6.2  生成描述符

        为了保证特征点的旋转不变性,以特征点为中心,将坐标轴旋转为关键点的主方向,如下图所示:

        旋转后以主方向为中心取 8×8的窗口。下图所示,左图的中央为当前关键点的位置,每个小格代表为关键点邻域所在尺度空间的一个像素,求取每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算。最后在每个4×4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示。每个特征点由4个种子点组成,每个种子点有8个方向的向量信息。这种邻域方向性信息联合增强了算法的抗噪声能力,同时对于含有定位误差的特征匹配也提供了比较理性的容错性。

        SIFT描述符为(4X4X8)128bin。且特征点描述符不唯一,存在辅方向时,每个辅方向上对应一个描述符。为了提高对光照变换的鲁棒性,描述符幅值进行归一化处理。

              1.2 fast

       Fast特征,速度快;受图像噪声以及设定的阈值影响很大;不具有旋转不变性,和尺度不变性。Orb用了金字塔求特征点使其具有尺度不变性, 描述符方向用了灰度质心法使其具有了方向不变性且在原图中提取描述符时,对原图进行了高斯滤波对高斯噪声进行了滤除。

       ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出。ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST(Features from  Accelerated Segment Test)算法发展来的,特征点描述是根据BRIEF(Binary Robust IndependentElementary Features)特征描述算法改进的。ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上做了改进与优化。据说,ORB算法的速度是sift的100倍,是surf的10倍。

              1.2.1  特征提取

步骤一:特征点的尺度不变形。建立金字塔,来实现特征点的多尺度不变性。将原图像按比例因子缩小成nlevels幅图像。

步骤二:粗提取。不同比例的图像提取特征点该步能够提取大量的特征点。从图像中选取一点P,我们判断该点是不是特征点的方法是,以P为圆心画一个半径为3pixel的圆。圆周上如果有连续n个像素点的灰度值比P点的灰度值大或者小,则认为P为特征点。

步骤三:机器学习的方法筛选最优特征点。简单来说就是使用ID3算法训练一个决策树,将特征点圆周上的16个像素输入决策树中,以此来筛选出最优的FAST特征点。

步骤四:非极大值抑制去除局部较密集特征点。使用非极大值抑制算法去除临近位置多个特征点的问题。为每一个特征点计算出其响应大小。计算方式是特征点P和其周围16个特征点偏差的绝对值和。在比较临近的特征点中,保留响应值较大的特征点,删除其余的特征点。

步骤五:特征点的旋转不变性。通过矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。

              1.2.2  特征提取

        生成描述符,用了高斯模糊,原因是计算描述符参考的面积大,容易受噪声干扰。BRIEF算法计算出来的是一个二进制串的特征描述符。它是在一个特征点的邻域内,选择n对像素点pi、qi(i=1,2,…,n)。然后比较每个点对的灰度值的大小。如果I(pi)> I(qi),则生成二进制串中的1,否则为0。所有的点对都进行比较,则生成长度为n的二进制串。一般n取128、256或512,opencv默认为256。

        关于在特征点SxS的区域内选取点对的方法,BRIEF论文(附件2)中测试了5种方法:

1)在图像块内平均采样;

2)pq都符合(0,S2/25)的高斯分布;

3)p符合(0,S2/25)的高斯分布,而q符合(0,S2/100)的高斯分布;

4)在空间量化极坐标下的离散位置随机采样;

5)把p固定为(0,0),q在周围平均采样。

        论文指出,第二种方法可以取得较好的匹配结果。

              1.3 harris

       使一个固定尺寸的窗口在图像上某个位置以任意方向做微小滑动,如果窗口内的灰度值(在梯度图上)都有较大的变化,那么这个窗口所在区域就存在角点。具体角点的确定,也就是一阶导数(即灰度图的梯度)中的局部最大所对应的像素点就是角点。

      harris角点的提取比较简单,计算像素对于灰度的hessian矩阵,并求出其特征值,当其最小特征值大于阈值时,则认为是特征点。vins-mono中光流追踪使用的就是该方法提取的角点。

  harris角点提取详细公式推导,看查看如下博客计算机视觉基础-图像处理: Harris特征点检测 - 知乎 (zhihu.com)

     2. Superpoint

        两个网络,一个是BaseDetector,用于检测角点(注意,此处提取的并不是最终输出的特征点,可以理解为候选的特征点),另一个是SuperPoint网络,输出特征点和描述子。

       网络的训练共分为三个步骤:

1)第一步是采用虚拟的三维物体作为数据集,训练网络去提取角点

2)使用真实场景图片,用第一步训练出来的网络提取角点,这一步称作兴趣点自标注(Interest Point Self-Labeling)

3)对第二步使用的图片进行几何变换得到新的图片,这样就有了已知位姿关系的图片对,把这两张图片输入网络,提取特征点和描述子。

    SuperPoint网络:   

网络共分为四部分,下面分别介绍

1)编码网络

从上面的SuperPoint网络的图片我们可以看出,这本质上就是两个网络,只不过在前半部分有一些相同的结构,所以把这些相同的结构提取出来共用,合并之后就看起来像是一个网络了。这个共用的网络就是编码网络,作者选用的是一个类似于VGG的网络结构,它的作用是是对图片降维,提取特征,以减小后续网络的计算量。这部分的结构就不详细介绍了,感兴趣的可以看论文。

2)特征点检测网络

此处的网络实际就是一个解码器,上面有编码,此处自然就需要解码。作用就是对图片的每个像素都计算一个概率,这个概率表示的就是其为特征点的可能性大小。对于一般的解码操作运算量过大的问题,作者也提出了采用子像素卷积(sub-pixel convolution)的方法降低计算量,对这个东西感兴趣的,此处提供些资料供参考

Sub-pixel Convolution(子像素卷积)​blog.csdn.net/leviopku/article/details/84975282

3)描述子检测网络

        同样的,此处也是一个解码器。先学习半稠密的描述子(不使用稠密的方式是为了减少计算量和内存),然后进行双三次插值算法(bicubic interpolation)得到完整描述子,最后再使用L2标准化(L2-normalizes)得到单位长度的描述。

4)损失函数

网络分为两个分支,损失函数自然也就分为两个分支。不过为了统一进行训练,作者把两个分支的损失函数加和作为最终的损失函数来用。最终的损失函数为

其中 Lp是特征点的损失函数, Ld是描述子的损失函数,那个系数 λ 只是为了平衡他俩的权重,这个公式每一项代表啥意思,大家看论文把,不贴了,太长了……

     3. 线特征

      3.1 提取

        LSD是一个线段检测器,能够在线性时间内得到亚像素级精度的检测结果,它无需调试参数就可以适用于任何数字图像上,并且能够自我控制错误数量的检测:平均来说,一个图像中允许一个错误检测。该方法是基于Burns,Hanson和Riseman的方法,并且还采用Desolneux,Moisan和Morel的理论使用了相对(contrario)验证的方法。

       算法过程可分为如下几个步骤:采集图像->高斯金字塔->梯度计算->对梯度进行排序->判断梯度幅值阈值->线段支持域更新增长->矩形估计->错误报警数(Number of False Alarms, NFA)计算。

      3.2 LBD描述符

      如图所示,中间黑线为检测出的直线。以它为中心构建m 个条带,每一个条带的像素宽度为 w 。比如上图就是 m = 5 , w = 3 。

      线特征采用LBD描述符,其由条带各行四个方向梯度的平均向量(某个方向梯度和除以行数) Mj 和标准方差向量 Sj 构成。

      线特征的提取及生成描述符,opencv都有实现。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值