图像处理-常用特征点检测方法以及特征描述子

HOG(histogram of gradient)

  • 具体可以移步之前的文章:https://blog.csdn.net/u012526003/article/details/79966607

sift(Scale-invariant feature transform)

  • sift是用于描述图像中的局部特征,在空间尺度中寻找极值点,并且提取出其位置、尺度、旋转不变量,因此具有尺度和旋转不变的性质。

算法步骤

  • 构建尺度空间,使用高斯卷积核实现多尺度空间。

G(x,y,σ)=12πσ2e(x2+y2)/2σ2 G ( x , y , σ ) = 1 2 π σ 2 e − ( x 2 + y 2 ) / 2 σ 2

σ σ 越大, 做卷积时,尺度空间越大,对应低分辨率下的粗糙尺度, σ σ 越小,对应越细的尺度空间,使用DoG尺度空间进行关键点的检测,

D(x,y,σ)=(G(x,y,σ)D(x,y,σ))I(x,y) D ( x , y , σ ) = ( G ( x , y , σ ) − D ( x , y , σ ) ) ∗ I ( x , y )

对于一幅图像,构建其图像金字塔,即对图像进行降采样等操作,每次降采样生成一个octave。因此使得sift在任意尺度都有对应的特征点。
* 使用LoG近似DoG找到关键点:如果一个点在DoG尺度空间本层以及上下2层的6个领域中是最大值或者最小值时,则可以将该点视为图像在该尺度下的一个特征点。极值点检测可以使用NMS。
* 去除不好的特征点:主要是在上面检测得到的特征点中,去除低对比度的特征点以及不稳定的边缘响应点。
* 给特征点赋值一个128维的方向参数:利用关键点邻域像素的梯度方向分布特征为每个关键点指定方向参数,使算子具有旋转不变性。
* 综上,每个关键点都有3个信息:位置、尺度以及方向,因此可以确定1个sift特征区域。将特征向量进行归一化,可以进一步去除光照变化的影响。

sift匹配

  • 给2张图像,首先得到其特征点及sift特征,之后进行相似度匹配,相似度最高或者阈值大于特定值的可以认为匹配成功,因此可以完成图像关键点的匹配。

参考链接

  • https://blog.csdn.net/v_JULY_v/article/details/6186942
  • https://blog.csdn.net/abcjennifer/article/details/7639681

surf

  • surf与sift的算法相似,只是sift算法更加稳定,检测得到的特征点更多,但是sift的算法复杂度也更大。surf的运算简单,运算时间更短一些,在要求实时性的系统中,可以使用surf。
  • surf最大的特点是采用HARR特征以及积分图像。

算法描述

  • surf是首先使用Hessian卷确定特征点候选点,然后使用NMS。主要流程如下
  • 对图像进行高斯滤波,这是为了使得特征点具有尺度无关性。
  • 构建hessian矩阵:hessian矩阵的行列式为
    det(H)=2fx22fy2(2fxy)2 det ( H ) = ∂ 2 f ∂ x 2 ∂ 2 f ∂ y 2 − ( ∂ 2 f ∂ x ∂ y ) 2

det(H) d e t ( H ) 就是H矩阵的特征值,可以使用其符号将所有点分类。在图像中,图像像素值就是f,使用特定的卷积核计算二阶偏导数,就可以得到H矩阵的3个元素。
* 尺度空间生成:sift中,是对图像进行尺度变换,filter不变;surf中保持图像大小不变,改变filter的尺度大小,提升特征点检测过程的速度和精度。同时,同一个octave中的图像用到的高斯模板尺度也不相同,算法允许尺度空间多层图像同时被处理,不需要进行二次抽样。
* NMS初步确定特征点:对于得到的多尺度Hessian结果,将某一点及其26邻域的hessian特征值进行比较,如果是极大值或者极小值,就将其保留下来,否则不视为特征点。
* 为了保证旋转不变性,sift中是使用梯度直方图统计,而surf中是统计特征点领域内的Harr小波特征,即统计特征点为中心的60度扇形内所有点在x和y方向的haar小波响应总和,形成新的适量,遍历整个圆形区域,选择最长矢量的方向作为特征点的主方向。
* surf特征描述算子:在特征点周围选取正方形框,这个框的方向是特征点的主方向,大小是20s(s是检测到该特征所在的尺度)。将box分为16个子区域,每个子区域统计25个像素的水平和竖直方向的haar小波特征,这里x和y都是相对于主方向而言。该子区域的haar小波特征为x方向值之和,x方向绝对值之和,y方向值之和,y方向绝对值之和。16个子区域最终可以形成1个 64×1 64 × 1 的特征描述子。

参考链接

  • https://blog.csdn.net/songzitea/article/details/16986423

fast(Features From Accelerated Segment Test)

  • fast是一种快速的特征点检测方法,fast角点定义为:如果一个像素与它周围足够多的像素处于不同的区域,则该像素点有可能是特征点。主要步骤如下:
  • 选择一个像素点 p p ,首先判断它是否是特征点。
    • 设置合适的阈值 t t
    • p p 的周围选16个像素点进行测试,如果这16个像素点中连续n个像素点的像素值都大于 I(p)+t I ( p ) + t 或者都小于 I(p)t I ( p ) − t ,则将其视为特征点。n常取9或者12。
    • 上述方法比较慢,一种可以用于加速的方法是首先判断邻域4个边的顶点(1,5,9,13)是否有3个或者以上的像素点满足条件,有的话就继续判断,·否则该点不被视为特征点。
  • 上述步骤存在一些问题
    • n<12 n < 12 时容易检测出比较多的特征点。
    • 角点检测的效果取决于实际问题以及角点的分布情况。
    • 没有有效地利用角点检测过程的信息。(邻域等信息)
    • 有些部分可能会出现大量角点。
  • 上面的问题中,前面三个可以通过机器学习训练的方法解决,后面可以通过NMS进行去除。
    *总结:fast相对于之前的sift或者surf,检测特征点的速度要快很多。

参考链接

  • https://blog.csdn.net/ssw_1990/article/details/70569871
  • http://www.cnblogs.com/ronny/p/4078710.html

brief(Binary Robust Independent Elementary Features)

  • brief特征描述子中,每一位都是通过随机选取的2个点进行比较得来的结果。在计算brief之前,首先需要对图像进行高斯滤波。它有几个比较明显的缺点。
    • 不具有旋转不变性。
    • 不具有尺度不变性。
    • 对噪声比较敏感。

orb(ORientedBrief)

  • 针对brief的问题,orb做了一些改进。
  • 对旋转不变性的问题:orb使用了fast算子用来进行特征点检测,通过矩计算特征点的主方向,之后就可以沿着主方向提取brief算子。
  • 对噪声敏感的问题:brief中使用的是pixel之间进行比较,而orb中是使用patch的像素和进行比较,可以使用积分图加快运算速度。
  • orb没有解决尺度不变性的问题,在一些实时处理视频的应用中,可以使用启发式的算法去解决尺度不变性的问题。
  • ORB是sift的100倍,是surf的10倍。

你可能感兴趣的:(图像处理)