角点是同时在多个方向上变化的点,相对于边缘,更加具有独特性。角点检测普遍应用在很多场合,如指纹检测中的指纹特征提取,稀疏光流计算。
Harris corner角点的基本思想是通过一个小窗口来观察,因此很容易识别出角点来。因为在这些方向上,想任意方向移动窗口都会在窗口的亮度分布上给出很大的变化。图像中的点可以分为三类:“flat”,“edge”,“corner”,Harris 算法就是要提取出“corner”。
下面使用2D的灰度图像来给出Harris 角点检测的数学推导,图像记为I,考虑(u,v) 范围内的图像块,以及将其平移(x,y)后的图像块,这两块加权后的SSD 记为S:
将I(u+x,v+y)做近似泰勒展开得
代入上式得
其中Ix和Iy分别为I在x和y方向上的偏导,上式又可以写为:
其中A为
其中<>表示在(u,v)块内取平均,一般采用Guass窗。
对角点来说S对各个方向的平移都有很大的变化,因此,通过分析A 的特征值可以判断某个点是否是角点:
1. 如果且,则在(x,y)像素上没有感兴趣的特征。
2. 如果且是比较大的正值,则为边缘点
3. 如果和均是比较大的正值,则为角点
在实际应用中,直接求解特征值的计算复杂度是比较高的,因此Harris 等人提出了用下面的Mc 函数来进行度量,其中κ 是可调的灵敏度参数,一般采用经验值0.04-0.15:
因此算法并不需要直接计算特征根,而是将问题转化为行列式值和迹的求解。
实验结果为