目录
0 特征点/关键点
试想,从不同的距离,不同的方向、角度,不同的光照条件下观察一个物体时,物体的大小、形状、明暗都会有所不同。但我们依然可以判断它是同一件物体。 这是因为什么呢?因为特征点!
图像中的那些特殊位置,比如山的顶部、建筑物的角点处、门口或者特殊形状的雪块,这些局部的特征通常被叫“关键点特征”(keypoint feature)或者“兴趣点”(interest point),或者还可以叫“角点”(corner),它们通常用其位置点周围像素块的表观来描述,另外一类特征是“边缘”(edge),比如,对着天空的山峰的轮廓。基于它们的方向和局部表观(边缘结构),可以对这些不同类型的特征进行匹配,而且这些特征还可以作为图像序列中出现物体边界和遮挡情况的理想指示器。边缘可以聚成长的曲线和直线片段,这些线段可以直接用于匹配或者用于分析寻找消失点,从而获取摄像机的内部参数和外部参数。
特征点可以看作是不同视角图片之间的映射,稳定的局部特征点应该具有以下特性:
1)可重复性、显著性
2)抗图片变换,包括外貌变换(亮度、光照)和几何变换(平移、选择、尺度)
其中,在大小、方向、明暗不同的图像中,同一特征点应具有足够相似的描述,就称之为可复现性。
特征点(关键点)的应用场景:
- 图片的配准/拼接
- 运动跟踪
- 物体识别
- 机器人导航
- 3D重建
1 特征检测子
1 Harris角点检测
Harris角点检测算子的原理是基于特征点具有局部差异性,假设现在有一个足够小的观察窗口,在任何方向上移动小观察窗,导致大的像素变动的区域就是Harris角点。
如图所示,第一张图在平滑区域移动,则任何方向都不会出现像素的变动,第二张图在垂直方向移动,则不会出现像素变动,直到第三张图,观察窗口移动到角点区域,则在任何方向上的移动都会出现像素的大的变动!
1.1 数学模型
1)求偏移后窗口内图像块的变化,利用两幅图像的加权差的平方和:
2)取E(u, v)最大的区域
1.2 判断
将上面的公式进行泰勒式展开:
其中H被称为Harris矩阵:
进而可以得到Harris矩阵的两个特征值(x、y方向上的变化情况),根据这两个特征值就可以判断观察到的是什么样的区域:
- 兴趣点处于直线上(边缘区域):一个特征值大,另一个特征值小(t1大于0,t2约等于0或者相反)。
- 兴趣点处于平面上(光滑区域):两个特征值都小,且近似相等(t1约等于t2约等于0)。
- 兴趣点处于角点上(特征点区域):两个特征值都大,且近似相等(t1和t2都大于0)。
1.3 Harris角点响应
只有当两个特征值同时取得最大值,C才取得较大值,k越小,检测越敏感。
非极大值抑制:选取局部响应的最大值,避免重复检测(比如边缘上的点,在不进行非极大值抑制的情况下会有多个特征点被检测到)。
1.4 Harris算子的处理流程
2 LoG特征检测算子
https://blog.csdn.net/simonyucsdy/article/details/100175427
高斯拉普拉斯算子概念参考:图像分割。LoG特征点检测算子的原理是,高斯拉普拉斯函数的极值点对应着图像的特征点。
2.1 尺度空间
对于一幅图像,利用不同的高斯滤波核进行滤波得到的一系列图像构成的图像系列,构成图像的尺度空间。
2.2 LoG算子模型
原理上,对原图像进行求拉普拉斯变换然后进行高斯滤波,相当于对高斯滤波核进行拉普拉斯变换然后进行滤波,所以高斯拉普拉斯算子(LoG算子),对高斯滤波核进行拉普拉斯变换得到的结果,如红色方框所示。
2.3 LoG算子尺度归一化
可以想象得到,不同尺度下的LoG响应值不具有可比性,如下图所示。
为了构建不同尺度之间的可比较性,首先构建尺度空间,同时在位置空间和尺度空间寻找归一化LoG极值(极大/极小)点作为特征点。
在LoG算子前面加变换率,就变成了尺度归一化LoG算子如下所示:
2.4 LoG算子的处理流程
3 基于DoG的特征检测算子(SIFT-尺度不变特征变换)
3.1 DoG近似LoG
LoG近似等价于相邻尺度空间的高斯差分(DoG),由上文可知,LoG尺度空间可以表示为:
则相邻尺度空间的高斯差分(DoG)就可以用LoG尺度空间表示为:
相邻尺度的高斯滤波核先做差,再做图像滤波(卷积)。
3.2 图像金字塔
前面已经介绍了尺度空间,图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像素采样的方式,生成N个不同分辨率的图像。把具有最高级别分辨率的图像放在底部,以金字塔形状排列,往上是一系列像素(尺寸)逐渐降低的图像,一直到金字塔的顶部只包含一个像素点的图像,这就构成了传统意义上的图像金字塔。
获得图像金字塔一般包括二个步骤:
1. 利用低通滤波器平滑图像
2. 对平滑图像进行抽样(采样),有两种采样方式:上采样(分辨率逐级升高)和下采样(分辨率逐级降低)。
3.3 高斯金字塔
首先高斯金字塔并不是一个金字塔,而是有很多组(Octave)金字塔构成,并且每组金字塔都包含若干层(Interval)。高斯金字塔的构建比较简单,高斯卷积核是尺度变换的唯一线性核。
高斯金字塔构建过程:
高斯金字塔构建过程中,一般首先将图像扩大一倍,在扩大的图像的基础之上构建高斯金字塔,对该尺寸下图像进行高斯模糊,几幅模糊之后的图像集合构成了一个八度,然后对该八度下的最模糊的一幅图像进行下采样,长和宽分别缩短一倍,图像面积变为原来四分之一。这幅图像就是下一个八度的初始图像,在初始图像图像的基础上完成属于这个八度的高斯模糊处理,以此类推完成整个算法所需要的所有八度构建,这样这个高斯金字塔就构建出来了。构建出的金字塔如下图所示:
1. 先将原图像扩大一倍之后作为高斯金字塔的第1组第1层,将第1组第1层图像经高斯卷积之后作为第1组金字塔的第2层,高斯核的卷积参数σ,在Sift算子中取的是固定值1.6;
2. 将σ乘以一个比例系数k,得到一个新的卷积参数σ=k*σ,用它来平滑第1组第2层图像,结果图像作为第3层;
3. 重复2,最后得到L层图像,同一组中,每一层图像的尺寸都是一样的,只是卷积参数不一样。它们对应的卷积参数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ;
4. 将第L层图像进行下采样,作为第2组的原始图像,重复上述高斯卷积过程。
3.4 尺度空间的解释
上文提到使用高斯核来实现尺度变换,那么具体实现过程中,尺度体现在哪里?是如何量化的呢?
在高斯金字塔中,两个变量很重要,即第几个八度(o)和八度中的第几层(s),这两个量合起来(o,s)就构成了高斯金字塔的尺度空间。尺度空间也不难理解,首先一个八度中图像的长和宽是相等的,即变量o控制的是塔中尺寸这个尺度;区分同一个尺寸尺度下的图像,就需要s了,s控制了一个八度中不同的模糊程度。这样(o,s)就能够确定高斯金字塔中的唯一一幅图像了,这是个三维空间,两维坐标,一维是图像。
(o,s)作用于一幅图像是通过以下公式确定卷积参数的:
通过公式也可以看出,尺度空间是连续的,两个变量控制着δ的值,其中在第一个八度中有 1<(o+s/S)<=2 ,同理在第二个八度中有2<(o+s/S)<=3,以此类推,δ中的关键部分(o+s/S)部分是逐渐增大的。
第一个八度的中图像的尺度分别是δ,kδ,k^2δ......,第二个八度的尺度分别是2δ,2kδ,2k^2δ........,同理第三个八度的尺度分别是4δ,4kδ,4k^2δ........。这个序列是通过下式来确定的:
所以每增加一级八度,δ都要扩大2倍,在一个八度中,k的上标s来区分不同的高斯核。
3.5 构建差分高斯金字塔
构建高斯金字塔是为了后续构建差分高斯金字塔,对同一个八度的两幅相邻的图像做差得到插值图像,所有八度的这些插值图像的集合,就构成了差分高斯金字塔。过程如下图所示,差分高斯金字塔的好处是为后续的特征点的提取提供了方便。
3.6 尺度空间的连续性
先解决一个问题,为什么高斯金字塔中每个八度有s+3幅高斯图像?
s的意思是将来我们在差分高斯金字塔中求极值点的时候,我们要在每个八度中求的有效差分层数,由上图可知,因此为了获得s有效层,那么在差分高斯金字塔中需要有s+2图像,而如果差分高斯金字塔中有s+2幅图像,那么高斯金字塔中就必须要有s+3幅图像,因为差分高斯金字塔是由高斯金字塔相邻两层相减得到的。
第二个问题,我们上来就假设“我们要在每个八度中求s层点”,为什么要s层点呢?是为了保持尺度的连续性!
可以观察到,其中红色标注数据所代表的是有效层,是差分高斯金字塔中获得极值点的层,也就是说只有在这些层上才发生与上下两层比较获得极值点的操作。
下面将这些红色数据连成一串:2^(1/3)σ, 2^(2/3)σ, 2^(3/3)σ,2×2^(1/3)σ,2×2^(2/3)σ,2×2^(3/3)σ......。发现了什么?对了,这些数据是连续的,我们通过在每个八度中多构造三幅高斯图像,达到了尺度空间连续的效果,这一效果带来的直接的好处是在尺度空间的极值点确定过程中,我们不会漏掉任何一个尺度上的极值点,而是能够综合考虑量化的尺度因子。
3.7 特征点位置确定
极点位置就好确定了,在位置和尺度空间组成的三维空间中寻找极值点。
3.8 旋转不变性
通过统计梯度直方图的方法确定主方向,使算法具有旋转不变性。
3.9 总结
SIFT特征检测算子,具有旋转不变性、尺度不变性、亮度变化不变性,对视角变化、仿射变换有一定程度的稳定性。
SIFT特征检测从计算尺度空间到生成描述子的步骤为:
4 FAST角点
FAST(Feature from Accelerated Segment Test),是一种通过检测局部像素灰度变化来确认特征点的位置的特征检测,若某像素点与其周围领域内足够多的像素点处于不同的区域,则该像素点可能为角点,也就是某些属性与众不同。
4.1 数学模型
1)确定一个阈值t,观察某像素点为中心的一个半径等于3像素的离散化的圆,这个圆的边界上有16个像素。
2)如果在这个大小为16个像素的圆上有n个连续的像素点,它们的像素值要么都比Ip+t大,要么都比Ip−t小,则p就是一个角点。
2 特征描述子
特征描述子是每个特征点的神分认证,具有以下特性:
- 同一空间点在不同视角的特征点具有高度相似的描述子;
- 不同特征点的的描述子差异性尽量大;
- 通常描述子是一个具有固定长度的向量,特征点匹配其实是计算特征向量之间的距离。
根据描述子的表达方式,可以分成以下几种:
- 基于直方图的描述子;
- 基于不变性的描述子;
- 二进制描述子。
1 特征支持区域
图为两种形式的特征支持区域,包含两个重要的概念:
- 主方向:进行旋转并重新插值,以保证特征点的旋转不变性。
- 特征尺度:影响支持区域的大小,当尺度较大时,特征区域的面积也要响应的变大。
2 基于直方图的描述子
适用于微小运动的描述子,以特征点为中心的矩形区域内所有像素的灰度值作为描述子。
适用于微小变化的图像对,图像存在明显的旋转、尺度、光照和透视变换时不稳定。
3 SIFT描述子
SIFT描述子之所以具有旋转不变性,是因为梯度向量本身就是具有方向信息的,我们只需要简单的获取到特征向量的主方向,根据主方向对支持区域进行旋转就可以保证描述子的旋转不变性。并通过双线性插值重构就可以去除图像的光照变化。
统计局部梯度信息
将区域划分成4x4的block,每个block内统计梯度方向的直方图(高斯加权梯度作为系数)。
归一化处理
-
门限处理-直方图每个方向的梯度幅值不超过0.2
-
描述子长度归一化
归一化处理进一步提升了特征点光度变化的不变性。
4 二进制描述子(BRIEF)
描述向量由N个0或者1组成,N=128,256,512,生成速度快,匹配效率高,不具有旋转不变性,匹配的时候计算汉明距离即可判断向量的近似程度。
3 特征匹配
计算两幅图像中特征描述子的匹配关系。
1 距离度量
2 匹配策略
- 最近邻搜索
- 最近邻距离比
3 高效匹配
快速最近邻搜索,比如Kd-tree。