为便于理解,先简要介绍角点的概念和角点检测背景
一、角点及角点检测背景:
角点概念:
角点,通常可理解为两条边的角点,也可理解为像素值在多个方向有显著变化的点或局部区域内某个属性明显的点。如多个轮廓的交界处的点、轮廓边缘凸出的点等。对于角点的具体定义,目前并没有一个明确的概念,只需理解其大致含义即可。以下是对角点的一些描述,帮助理解:
(1)、一阶导数(灰度的梯度)的局部最大所对应的像素点;
(2)、两条及两条以上边缘的交点;
(3)、图像中梯度值和梯度方向的变化率都很高的点
(4)、角点处的一阶导数最大、二阶导数为零,指物体边缘变化不连续的方向。
角点检测背景:
目前角点检测可分为三类,基于灰度图的角点检测、基于二值化图像的角点检测和基于轮廓曲线的角点检测。博主目前受实力限制,仅了解基于灰度图的Harris角点检测,后续实力有变,再续更。
二、Harris角点检测原理:
概念:
Harris角点检测可理解为以像素点为中心的窗口向多个方向移动,通过窗口像素值有无显著变化判断有无角点。下面上图,便于理解:
窗口多个方向移动,像素值无 窗口多个方向移动,像素值 窗口多个方向移动,像素值
显著变化 仅在竖直方向有明显变化 在多个方向有明显变化
算法:
对I(x,y)图像中的像素点(x,y),进行自相关平移w(x+∆x、y+∆y)得到自相关函数:
c(x,y,∆x,∆y) = ∑wh(x,y)(I(x,y)-I(x+∆x,y+∆y))2
其中 ∑w表示窗口内的点,h(x,y)表示加权函数,可为高斯函数或常数等,感兴趣可取下方源代码,根据自己喜好进行修改。
有泰勒公式可得:
I(x+∆x,y+∆y) = I(x,y)+∆xIx(x,y)+∆yIy(x,y)+p ≈ I(x,y)+∆xIx(x,y)+∆yIy(x,y)
代入上式(为便于理解和方便(懒),加权函数暂时忽略):
c(x,y,∆x,∆y) = ∑w(I(x,y)-I(x+∆x,y+∆y))2≈∑w((∆xIx(x,y))2+2∆x∆yIx(x,y)Iy(x,y)+(∆yIy(x,y))2)
由于某园对公式输入不太友好,下面取道友的图一用(道友图中,w(x