Harris 角点定义为一个邻域内存在两个正交方向上梯度变化较大的点。
作 xy 平面上的二维函数,使用自相关函数可描述图像上一固定点在任意方向上的灰度变化;然后利用泰勒级数展开自相关函数,即可将其转换为矩阵特征值问题(参考博文 "光流跟踪")。
在某些应用中(如视觉测量),想获得更加精确的角点定位,可使用角点亚像素算法实现。
在提取亚像素边缘时,可以通过数学建模(最小二乘法)来描述边缘方向上一阶导数曲线,该曲线为一个二次函数;然后找到数学模型的最值点即为亚像素边缘位置。
对于 Harris 角点,考察 角点邻域内点 p 的梯度向量,p点与初始角点 q 构成的向量 ,在理想情况下,发现两向量点积均为 0。具体来说:
1)当 p 点位于平坦区域内,p 的梯度向量为 0,两向量点积为 0;
2)当 p 点位于边缘上,p 的梯度向量于向量 qp 正交,两向量点积仍然为 0。
如上图所示,将 q 点坐标当作未知量,通过解方程组即可求得更加精确的角点坐标。一旦求解到新的角点坐标,可以使用新的角点坐标位起点,按同样方法建立方程组,迭代求解,直到精度满足要求。
在实际应用中,当考察点离参考角点 q 较近时,角点附近点存在两个方向梯度,故合成梯度方向与 qp 边缘基本不能正交;
当考察点离参考角点 q 较远时,考察点多半位于边缘上,故考察点梯度方向与 qp 边缘基本正交;
所以,实际应用中会排除离 p 点较近的部分点,以提升线性方程组可解性。
另一方面,在平坦区域内点的梯度一般不等于 0,这会提升方程组真实解。可以设定一个梯度门限,方程组仅接收梯度门限较大值,从而提升可解性。
参考资料 Learning OpenCV 3