角点是一个可重复、可靠、显著的特征。在特征匹配中用来检测特征点的位置。
本篇博客,用大白话谈一谈自己对Harris角点检测算法的理解。
Harris实际上是设计了一个准则来度量角点的特点。角点有啥特点呢?显著的特点就是:在角点的邻域,图像邻域有两个以上的主方向,即邻域范围内方向导数的和有多个极值。直观感受下图,
下式还不是度量角点的准则,它是描述邻域方向导数和:
分析这个式子:
x
与
窗口函数说明是通过邻域信息得到的角点。这是合理的,因为单点只可确定一个梯度,如果单纯依据单个点的信息,是不可能的。窗口是对各个点的梯度贡献的加权。可以是二维阶跃,这种情况下所有点权值相同。可以是二维高斯,这种情况离中心点越近,权值越大。
中括号里的差式,表征了尝试从不同的滑动方向求取邻域方向导数的和。可以预料到,如果结果是角点,该式会有两个以上显著的极值。
数学家总能利用数学工具演化和提取信息。怎么抽离变量
推导式子:
其中
M 式子前面表示在需要检测角点的邻域窗口求和。
再来,
已经很简化了,将
M
带入
但如果两个“梯度”不是
既然
我们可以把
M
看成一个椭圆,长轴和短轴由两个特征值决定,
所以角点的特征就是 λ1 和 λ2 都尽可能大,而且两者的值差异应该小一些。
怎么定量描述?作者设计了一个响应函数:
这么设计有它的优点。特征值之和对应矩阵的迹,积对应矩阵行列式的值,这样就可避免计算费时的特征值的计算。在回头看看 M 矩阵的初始形式,可以看出整个算法计算量大的运算,包括求导数图像和高斯模糊。
整个算法的计算过程,总结如下图:
参考资料:Lecture6_Detectors_Harris_cs131
Stanford University
CS 131 Computer Vision: Foundations and Applications