CS131-专题7:图像特征(SIFT算法)

速记要点:

  • SIFT是什么:全称Scale Invariant Feature Transform尺度不变特征转换,2004年的论文。可以检测出图像中的局部特征点。
  • SIFT算法特点
    • 稳定性:SIFT是图像局部特征,对旋转、尺度、亮度、仿射、噪音都保持一定程度的稳定性。
    • 区分性:图像中检测到的这些局部特征各自区分性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配。
    • 多量性:即使少数的几个物体也可以产生大量的SIFT特征向量。
    • 高速性:经优化的SIFT匹配算法甚至可以达到实时的要求。
    • 可扩展性:里面很多技术方法可以很方便的在其他特征中进行应用。
  • SIFT特征检测4个基本步骤
    • 1)尺度空间极值检测:通过高斯差分金字塔来探测图像中对尺度和旋转不变的特征点。
      • 直接在DoG空间找局部极值点可以检测‘圆形’特征,而如果在DoG空间像找Harris角点一样,计算Hessian矩阵,就能找到兼容仿射变换的椭圆特征。流程如下:
        • 先确定一个圆
        • 将圆内的所有像素拿出来计算H矩阵
        • 比较计算出来的λ1,λ2
        • 将较小的λ的方向进行缩小
        • 再将上一步缩小后的区域(椭圆)内的像素拿出来计算H矩阵
        • 重复上述步骤,逐步迭代。直至λ1,λ2近似相等,说明区域边缘的梯度变化近似一致
      • 当然最后需要删除两类极值点,一类是低对比极值点,另一类是不稳定的边缘响应点。
    • 2)特征点主方向确定:
      •  经过上面的步骤已经找到了在不同尺度下都存在的特征点,为了实现图像旋转不变性,需要给特征点的方向进行赋值。
      • 方法:找到特征圆后,求圆内覆盖的每个像素点的图像梯度幅值和方向,划归到0~2π八等份直方图中,投票最多的方向就是这个特征点的主方向。
    • 3)特征点描述:
      • 经过以上两步后,已经得到SIFT特征点位置(包括尺度)和方向信息。下面我们可以继续用一个128维度向量来作为SIFT特征的特征描述符,相当于这个特征的身份证,拥有绝对标识,几乎不可能重复,能够和其他特征区分开来,或者用于图像匹配。
      • 方法:首先将坐标轴旋转为特征点的方向,将这个特征尺度所覆盖的图划分成16格,每个格单独统计格内每个像素点梯度方向和大小,形成一个128维度向量。

目录

速记要点:

1 尺度空间极值检测

1.1 DoG算子

1.2 高斯差分金字塔

1.3 实现兼容仿射变换(视角)的方法

2 特征点主方向确定

3 SIFT描述符

4 SIFT进行图像匹配的一个例子

5 好的参考资料


原理和过程详情版:(语言和章节没有过多整理)

SIFT(Scale Invariant Feature Transform尺度不变特征转换,2004年论文)是2012深度学习火爆前,最重要的一个视觉算法,应用很广,引用量达6万次。

上一专题介绍了Blob检测,其中Harris角点+Laplacian卷积能够应对图像光强、旋转、尺度变化,但还无法应当放射变化,而且速度还是慢。

本专题我们研究SIFT尺度不变特征转换算法。SIFT算法可以解决方向,视角,明暗,位置等常见图像变化的问题。

SIFT特征检测的4个步骤:

  1. 尺度空间的极值检测
  2. 特征点主方向确定
  3. 特征点描述

1 尺度空间极值检测

1.1 DoG算子

如上,拉普拉斯函数(LoG)和两个不同尺度的高斯函数的差分(DoG)形近,所以它们的功能效果也会类似。

但是,根据高斯核计算性质,一个大高斯核作用于图像,等价于用两个小高斯核依次作用于图像。举个例子:一个σ=5的高斯核和图像卷积,等价于一个σ=3的高斯核先和图像卷积,然后结果再和σ=4的卷积核做卷积,而根据卷积计算的结合律,可以先用一个高斯核与另一个高斯核进行卷积,然后结果再和图像做卷积。因为作用于图像的卷积核宽度变小了(σ决定高斯核宽度),所以跟图像做卷积计算时计算量会少很多。

1.2 高斯差分金字塔

在介绍Blob检测中我们知道,LoG可以在不同的尺度下检测图像的关键点信息,从而确定图像的特征点。但LoG的计算量大,效率低。所以我们通过两个相邻高斯尺度空间的图像的相减,得到DoG(高斯差分)来近似LoG。如下图所示:

上图左边是不同尺度的高斯核作用于图像的结果,右边是DoG结果,其中σ值相当于是对应LoG多大的σ。

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

关键点1:DoG为什么能减少计算量?

简述:当计算完σ尺度的高斯核对图像的卷积后,要计算kσ尺度(其中k>1的高斯核对图像的卷积时,根据高斯卷积核性质,我们只要用如下尺度的高斯核对σ尺度的结果做进一步卷积即可得到:

原因如下:

所以,上层的计算可以基于下层结果用一个相对小的核进一步计算得到,计算效率大大提升。

关键点2octave概念(用一套σ,通过图像放缩而非σ增倍)

简述:为了得到每个像素点位置尽量多尺度的输出,一般需要非常多、不同尺度σ的归一化高斯核去和图像进行卷积。在SIFT中对此做了改进,提出高斯金字塔概念,每个octave(组)用一套σ。当我们要计算更大尺度的σ卷积结果时,不去用越来越大的σ高斯核与图像卷积,而是把图像缩小一倍,如此用同样一个σ和缩小一倍的图像进行卷积,检测到的特征(blob)其r半径翻倍就行,这里每次图像尺度缩小一倍进行的高斯卷积结果就是一个octave(组)。此方法优势之一:在小图上做,速度会快很多!

关键点3:k如何取值能够让每个octave组的不同尺度下的极值点检测尺度结果能够连续?

简述:假设S变量是你想要在1σ~2σ之间有多少个输出尺度输出(每个octave组是同样一套σ,只是作用的图像其尺度不断缩小一倍)。S定义了那么上图每组的DoG输出个数也就会确定,S=2那DoG就需要有S+2=4个输出(因为要做上下层的极大值判定)。DoG输出确定了,那么每个octave组需要的层也就确定了(4+1=5)。

只要另k=2^1/s,那么你会发现,每个octave组,其DoG输出尺度,刚好能等比例的衔接起来。

注意:第二个octave组第第一层可以由第一个octave组的倒数第3层直接下采样一倍得到。(例如,当2σ作用于原图像的结果,对结果下采样1倍得到的新结果,等价于原图先下采样一倍,然后在和σ尺度的高斯核卷积)(第二个octave组的其他层则基于第一层继续做高斯核卷积)

上面看懂了,下面这张图可以加深理解:

1.3 实现兼容仿射变换(视角)的方法

在介绍harris角点中,我们介绍了M矩阵,如下:

我们可以计算每个像素点所形成的圆,看两个特征值,如果两个特征值不一致,我们可以压扁小特征值的那个方向,压扁后的椭圆再去算M矩阵,继续看两个特征值是否一致,如果不一致,继续压扁圆,一致这样操作直到两个特征值结果一致。

带仿射变换的Blob检测和不带的Blob检测效果对比:

解决仿射变换问题后,我们能确保椭圆内内容是一致的,但角度可能不一致,如下:

2 特征点主方向确定

检测到特征后,里面的内容要和其他图进行匹配,还需要把它们统一方向然后才能对比。如何去判定一个特征要不要去旋转呢?用梯度方向直方图,方法如下:

计算该特征圆所覆盖的每个像素点位置的梯度大小和方向,然后把这些结果根据方向放到8个方向区间内做统计(0~2π),数量最多的那个区间作为此特征的方向,然后把这个特征选择到水平方向,这样就可以和其它特征做匹配了。

3 SIFT描述符

在SIFT算法中,某个SIFT特征,用128维度向量表示,如下图所示:

一个局部特征,用4x4的网格划分,每个小网格内像素点单独统计梯度直方图,16个网格,每个网格8个值,所以就有128维度。

如上图所示,最左边的两张图像虽然拍摄视角、拍摄位置、拍摄光照不一样,但是SIFT都能探测到如图白色圈所示的符合SIFT特征定义的特征,当它们方向统一后,各自得到的128维度特征向量,两种非常相似。这就能很好的让程序把它们匹配上,并区分其他特征。

虽然SIFT描述符是SIFT论文中提出的,但其可以直接应用在其他特征检测算法中,如:Harris+拉普拉斯+SIFT描述符。

为什么不直接统计SIFT特征的全局描述符而拆分成16个网格单独统计?

答:这样细分能提高匹配的准确度,当然为什么是16个网格只是个经验值。

SIFT真实应用的改进:通过比对第一高阈值和第2高阈值,来提升精度。

4 SIFT进行图像匹配的一个例子

5 好的参考资料

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值