基于SURF算子的罐装物品检测:

分析:

    在罐装饮料检测的过程中,因为物体摆放的距离和位置是不确定的,故而需要具有尺度和旋转不变性特点的特征点提取和描述方法。

    在初步的检测中,由于在具有简单背景的场景中,故而我们使用颜色的分别对罐装饮料进行前景的提取。但摄像头瞄准目标后,在对一些容易混杂的饮料进行区分(如王老吉和加多宝)

    对于这些饮料,我们使用SURF算子进行匹配。

SURF:

    SURF是对SIFT算法的一种改进,是一种具有尺度和旋转不变性特点的特征点提取和描述的快速检测方法。该算法对比与当前的算法具有相似甚至更好的可重复性、鲁棒性,并且计算的更快。

    具体实现:先使用积分图来计算卷积;然后使用Hessian响应来衡量某点是否为特征点,并创建描述子来描述该特征;以及对整个流程进行一定的优化。

    匹配点对的寻找可以分为三个步骤:1.找到兴趣点,这些兴趣点是有特色的(便于区分),评价一个寻找兴趣点的算法优劣的重要指标是它的可重复性;2.每个兴趣点的邻域点能使用特征向量(描述子)来表达,这个特征向量要对噪声有鲁棒性;3.特征向量在不同图像中进行匹配,这个匹配一般是基于距离的,比如马氏距离或欧氏距离,且特征向量的维度和计算时间非常相关,维度小的特征向量更好。

其他算子:

    使用最广泛的兴趣点检测算子是Harris角点检测算子(Harris算子对于L型角点检测精度高,稳定性好,但是角点信息有丢失和偏移的情况,且角点提取有聚簇现象),但其不具有尺度不变性。(故Harry特征检测时,因为不知道尺寸,所以需要生成一个不同大小的图像构成的金字塔,扫描其中的每一副图像来检测。)

     SIFT算子区分性比较好,但是它的描述子维度很高,因此匹配环节非常耗时,如果用在普通计算机实时性场合,难以满足要求。有的研究采取措施降低匹配的耗时,但是会损失精度。

    通过对现有的兴趣点检测算法的比较,可以得到结论:1.Hessian矩阵相比于基于Harris的方法,具有更加稳定和可重复性更强的特点;2.使用一些近似方法,比如DoG等方法,可以提高速度,又不至于造成较大的精度损失,这就说明近似计算的可行性。

SURF方法:

    该方法是基于Hessian举证的,使用基础的近似方法,并使用积分来降低运算量。本方法的描述子是基于兴趣点的邻域内点的Harr-小波响应。

3.基于Hessian响应的特征检测算子

    Hessian矩阵是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。可用于将目标函数在某点邻域展开成泰勒多项式来逼近原函数。

    其实surf构造的金字塔图像与sift有很大不同,就是因为这些不同才加快了其检测的速度。Sift采用的是DOG图像,而surf采用的是Hessian矩阵行列式近似值图像。Hessian矩阵是Surf算法的核心,为了方便运算,假设函数f(z,y),Hessian矩阵H是由函数,偏导数组成。首先来看看图像中某个像素点的Hessian矩阵,如下:

    即每一个像素点都可以求出一个Hessian矩阵。


    H矩阵判别式为:

    判别式的值是H矩阵的特征值,可以利用判定结果的符号将所有点分类,根据判别式取值正负,来判别该点是或不是极值点。

    在SURF算法中,用图像像素l(x,y)即为函数值f(x,y),选用二阶标准高斯函数作为滤波器,通过特定核间的卷积计算二阶偏导数,这样便能计算出H矩阵的三个矩阵元素L_xx,L_xy,L_yy 从而计算出H矩阵:

gif[2]

    但是由于我们的特征点需要具备尺度无关性,所以在进行Hessian矩阵构造前,需要对其进行高斯滤波。

    这样,经过滤波后在进行Hessian的计算,其公式如下:

    高斯滤波器可以用在不同尺度下的分析中,实践中要求先对高斯二阶微分进行离散化和截断再使用。但是即使是用了高斯滤波器,当图像进行降采样时,仍然会发生混淆的情况。高斯滤波器的另外一个问题是,当进行降采样时,并不会出现新的特征,因此,高斯滤波器的重要性就没那么明显了,而它速度又不快,所以考虑使用另外的滤波器来近似这个高斯滤波器。而Lowe成功的使用DoG来近似LoG,这也给了作者启发,作者使用更进一步的近似方法,即盒滤波器。

    如图1的左边的两幅图,是对高斯二阶微分yy和xy离散化得到的LyyLxy,通过盒滤波器近似后得到右边的结果记为DyyDxy,可以看出,把高斯二阶微分滤波器使用盒滤波器来近似,也就是相当于把高斯滤波器进一步的只分成几块,这样下一步可以使用积分图进行快速计算,而后面的结果也证明,这么做的检测效果并没有太大的损失,但时间大大提升了。

    这就是说Hessian矩阵的求法,本来是需要与高斯二阶微分进行卷积,现在近似成与盒滤波器进行卷积。


2. 利用非极大值抑制初步确定特征点

        此步骤和sift类似,将经过hessian矩阵处理过的每个像素点与其3维领域的26个点进行大小比较,如果它是这26个点中的最大值或者最小值,则保留下来,当做初步的特征点。检测过程中使用与该尺度层图像解析度相对应大小的滤波器进行检测,以3×3的滤波器为例,该尺度层图像中9个像素点之一图2检测特征点与自身尺度层中其余8个点和在其之上及之下的两个尺度层9个点进行比较,共26个点,图2中标记‘x’的像素点的特征值若大于周围像素则可确定该点为该区域的特征点。

112678_2374

3. 精确定位极值点

         这里也和sift算法中的类似,采用3维线性插值法得到亚像素级的特征点,同时也去掉那些值小于一定阈值的点,增加极值使检测到的特征点数量减少,最终只有几个特征最强点会被检测出来。

4. 选取特征点的主方向。

        这一步与sift也大有不同。Sift选取特征点主方向是采用在特征点领域内统计其梯度直方图,取直方图bin值最大的以及超过最大bin值80%的那些方向做为特征点的主方向。

       而在surf中,不统计其梯度直方图,而是统计特征点领域内的harr小波特征。即在特征点的领域(比如说,半径为6s的圆内,s为该点所在的尺度)内,统计60度扇形内所有点的水平haar小波特征和垂直haar小波特征总和,haar小波的尺寸变长为4s,这样一个扇形得到了一个值。然后60度扇形以一定间隔进行旋转,最后将最大值那个扇形的方向作为该特征点的主方向。该过程的示意图如下:

112862_6811



5. 构造surf特征点描述算子

        在sift中,是在特征点周围取16*16的邻域,并把该领域化为4*4个的小区域,每个小区域统计8个方向梯度,最后得到4*4*8=128维的向量,该向量作为该点的sift描述子。

在surf中,也是在特征点周围取一个正方形框,框的边长为20s(s是所检测到该特征点所在的尺度)。该框带方向,方向当然就是第4步检测出来的主方向了。然后把该框分为16个子区域,每个子区域统计25个像素的水平方向和垂直方向的haar小波特征,这里的水平和垂直方向都是相对主方向而言的。该haar小波特征为水平方向值之和,水平方向绝对值之和,垂直方向之和,垂直方向绝对值之和。该过程的示意图如下所示:

6113089_5766

这样每个小区域就有4个值,所以每个特征点就是16*4=64维的向量,相比sift而言,少了一半,这在特征匹配过程中会大大加快匹配速度。

6.结束语

Surf采用Henssian矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,有可能使得找到的主方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功;另外图像金字塔的层取 得不足够紧密也会使得尺度有误差,后面的特征向量提取同样依赖相应的尺度,发明者在这个问题上的折中解决方法是取适量的层然后进行插值。

Sift是一种只 利用到灰度性质的算法,忽略了色彩信息,后面又出现了几种据说比Surf更稳定的描述器其中一些利用到了色彩信息,让我们拭目以待吧。

参考:https://blog.csdn.net/wangyaninglm/article/details/44805711

猜你喜欢

转载自blog.csdn.net/fsdfasfawre/article/details/80572304