
极市导读
本文详细论述了四个特征点检测算法:Harris, SIFT,SURF以及ORB的思路步骤以及特点,分析了它们的局限性,并对几个重要问题进行了探讨。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
Harris角点检测
Def. [角点(corner point)]
在邻域内的各个方向上灰度变化值足够高的点,是图像边缘曲线上曲率极大值的点。
-
[基于灰度图像的角点检测] 包括基于梯度的方法(通过计算边缘的曲率判断角点),基于模板的方法(考虑像素邻域点的灰度变化, 将与邻点亮度对比足够大的点定义为角点),基于模板梯度组合的方法 -
[基于二值图像的角点检测] 将二值图像作为单独的检测目标,可使用各种基于灰度图像的角点检测方法 -
[基于轮廓曲线的角点检测] 通过角点强度或曲线曲率提取角点
角点检测的基本思想是:使用角点检测算子,对图像的每个像素计算角点响应函数(Corner Response Function ),阈值化角点响应函数,根据实际情况选择阈值,对阈值化的角点响应函数进行非极大值抑制,并获取非零点作为角点。通过一个小的滑动窗口在邻域检测角点
在任意方向上移动窗口,若窗口内的灰度值都有剧烈的变化,则窗口的中心就是角点。定义角点响应函数
其中w为窗函数(window function),I为图像梯度,那么E就表示了灰度变化的剧烈程度。1977年,Moravec最先提出了如下的角点检测方法:
-
对于原始图像,取偏移量(Δx,Δy)为(1,0),(1,1),(0,1),(-1,1),分别计算每一像素点(xi,yi)的灰度变化 -
对于每一像素点(xi,yi),计算角点响应函数R(xi,yi)=min E -
设定阈值T,将角点响应函数R(xi,yi)中低于T的值设为0 -
在窗口范围内进行非极大值抑制:遍历角点响应函数,若某个像素的角点响应函数在窗口内不是最大,该像素置0 -
选择非零点作为角点检测结果
Moravec角点检测的缺点
-
二值的窗口函数导致角点响应函数不够光滑 -
只在四个方向上计算灰度值变化,导致角点响应函数在多处都有较大响应 -
对于每个点只考虑E的最小值,导致算法对边缘有很强的反应
1988年,Harris和Plessey对Moravec的方法进行了改进,提出了经典的Harris角点检测算法。Harris首先将Moravec算法中的窗口函数由阶跃函数改为二维高斯函数,并通过泰勒展开考察微小移动,也就是说,如果要求E的最大值以明确角点,就可以令 ,对E做泰勒展开,得
记 ,则上式可以写成 的形式,这表示了一个椭圆,自相关矩阵M描述了图像局部区域的灰度变化趋势,可以通过椭圆的形状来判定角点。
Proposition. 对于椭圆 ,设其半长轴和半短轴分别为a,b,那么 是矩阵M的特征值。
Proof. 椭圆上任意一点到原点(也就是椭圆的中心)的距离平方 ,条件为 ,那么拉格朗日函数
则
又可以改写为
由于(x,y)不是零向量,所以 ,即1/λ是矩阵 的特征值,所以
又
这样λ1,λ2就分别对应d^2的两个最值,也就是a^2和b^2,所以,
是矩阵M的特征值。由此我们还可以得到,椭圆面积
q.e.d.
得到M的特征值有什么用呢?若用奇异值分解的观点看这个问题。由于Jacobian矩阵 ,故M=JJ^T,这样M的特征值开根号后就是J的奇异值,因此M的特征值就可以体现I_X和I_Y的相对大小。
现在我们需要定义角点响应函数,进一步进行区分,令(一般k=0.04 ~ 0.06)
其中
则定性判断方法为
-
[边缘] 或 -
[角点] 都很大,E在各个方向显著变化 -
[平滑区域] 都很小, 在各个方向基本不变
定量判断方法为
-
[边缘] R<<0 -
[角点] R>>0 -
[平滑区域] |R|很小
一般增大k的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小k值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量。
下面我们介绍如何利用Harris角点特征进行特征点匹配。

