Harris 角点检测
通过分析局部梯度自相关矩阵的特征值来检测图像中角点的算法,识别在两个方向上具有显著强度变化的点。
Harris 角点检测由 Chris Harris 和 Mike Stephens 于 1988 年提出,用于识别图像中强度在多个方向上显著变化的兴趣点。角点区别于边缘(仅在一个方向变化)和平坦区域(无变化),通过检查局部区块在各方向小位移下的强度变化来判断。
该算法的核心是结构张量(自相关矩阵)M,一个由局部窗口内高斯加权的梯度乘积 Ix 和 Iy 之和构成的 2x2 矩阵。当该矩阵的两个特征值 λ1 和 λ2 都较大时,该点在两个独立方向上表现出强变化,符合角点条件。
- 角点响应函数:Harris 不直接计算特征值,而是使用
R = det(M) - k * trace(M)^2,其中 k 通常设为 0.04 到 0.06。R 超过阈值的点为角点候选 - 非极大值抑制:在相邻响应值中,仅保留窗口(通常 3x3 或 5x5)内的局部最大值,消除近距离的重复检测
- 旋转不变性:由于结构张量的特征值在旋转下不变,Harris 角点在图像旋转时保持稳定。但该检测器本身不具有尺度不变性
在 OpenCV 中,cv2.cornerHarris() 实现了该算法,参数包括块大小、Sobel 核大小和 k 常数。Harris 检测器因其计算效率和检测稳定性,在实时跟踪、相机标定以及特征匹配流水线的预处理步骤中仍被广泛使用。