首页 > 学院 > 开发设计 > 正文

特征检测:白话Harris角点检测

2019-11-06 09:01:53
字体:
来源:转载
供稿:网友

角点是一个可重复、可靠、显著的特征。在特征匹配中用来检测特征点的位置。

本篇博客,用大白话谈一谈自己对Harris角点检测算法的理解。

Harris实际上是设计了一个准则来度量角点的特点。角点有啥特点呢?显著的特点就是:在角点的邻域,图像邻域有两个以上的主方向,即邻域范围内方向导数的和有多个极值。直观感受下图,

这里写图片描述

下式还不是度量角点的准则,它是描述邻域方向导数和:

E(u,v)=∑x,yw(x,y)[I(x+u,y+v)−I(x,y)]2

这里写图片描述

分析这个式子:xy是图像坐标。uv是滑动的坐标主轴方向,是式子的变量E是邻域各个方向导数的和值。

窗口函数说明是通过邻域信息得到的角点。这是合理的,因为单点只可确定一个梯度,如果单纯依据单个点的信息,是不可能的。窗口是对各个点的梯度贡献的加权。可以是二维阶跃,这种情况下所有点权值相同。可以是二维高斯,这种情况离中心点越近,权值越大。

中括号里的差式,表征了尝试从不同的滑动方向求取邻域方向导数的和。可以预料到,如果结果是角点,该式会有两个以上显著的极值。


数学家总能利用数学工具演化和提取信息。怎么抽离变量(u,v),依据图像邻域像素信息,来判断角点呢?

推导式子:

E(u,v)≈[uv]M[uv]

其中 M=∑x,yw(x,y)[I2xIxIyIxIyI2y]

M式子前面表示在需要检测角点的邻域窗口求和。


再来, M=⎡⎣∑I2x∑IxIy∑IxIy∑I2y⎤⎦=[λ100λ2]

已经很简化了,将M带入E(u,v)≈[uv]M[uv],可知当λ1越大,该点的邻域在x方向导数越大,当λ2越大,该点的邻域在y方向导数越大。对应如下角点:

这里写图片描述

但如果两个“梯度”不是x方向和y方向呢?比如这样的角点:

这里写图片描述

既然M是对称的,可以写作(奇异值分解):

M=R−1[λ100λ2]R

我们可以把M看成一个椭圆,长轴和短轴由两个特征值决定,R影响椭圆的方向。

这里写图片描述

这里写图片描述


所以角点的特征就是λ1λ2都尽可能大,而且两者的值差异应该小一些。

这里写图片描述

怎么定量描述?作者设计了一个响应函数: θ=det(M)−αtrace(M)2=λ1λ2−α(λ1+λ2)2

这么设计有它的优点。特征值之和对应矩阵的迹,积对应矩阵行列式的值,这样就可避免计算费时的特征值的计算。在回头看看M矩阵的初始形式,可以看出整个算法计算量大的运算,包括求导数图像和高斯模糊。

α是个经验值,一般取0.04-0.06之间最好。

整个算法的计算过程,总结如下图: 这里写图片描述


参考资料:Lecture6_Detectors_Harris_cs131 Stanford University CS 131 Computer Vision: Foundations and applications


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表