1. 概述
Harris角点检测是一种经典的图像特征提取算法,广泛应用于计算机视觉领域。其核心思想是通过数学方法检测图像中局部区域内灰度变化显著的点,这些点通常对应图像中的角点(corner)。
角点是图像中非常稳定的特征点,在视角、光照变化下仍具有良好的鲁棒性,因此在图像匹配、目标识别、三维重建等任务中具有重要作用。
本文将从数学原理出发,逐步讲解Harris角点检测的实现流程,并通过示例说明其实际应用效果。
2. 数学原理
2.1 角点的定义
角点是指在其局部邻域内,在所有方向上都具有显著灰度变化的点。这种特性使得角点在图像变换时具有稳定性。
2.2 灰度变化的度量
设图像为 $ I $,在点 $(x_0, y_0)$ 处取一个 $ m \times m $ 的窗口 $ W $。我们希望通过窗口的微小位移 $(u, v)$ 来衡量灰度变化的强度。这种变化可以通过平方差之和(SSD)来度量:
$$ \hbox{SSD}(u, v)=\sum_{(x, y) \in W} g(x,y) \left[I(x, y)-I(x+u, y+v)\right]^{2} $$
其中 $ g(x, y) $ 是窗口函数,可以是矩形窗或高斯窗。
由于 $ u $ 和 $ v $ 很小,我们可以使用一阶泰勒展开近似 $ I(x+u, y+v) $:
$$ I(x+u, y+v) \approx I(x, y)+u I_{x}(x, y)+v I_{y}(x, y) $$
代入上式后可得:
$$ \hbox{SSD}(u, v) \approx \sum_{(x, y) \in W} g(x, y)\left[u^{2} I_{x}^{2}+2 u v I_{x} I_{y}+v^{2} I_{y}^{2}\right] $$
进一步整理为矩阵形式:
$$ \hbox{SSD}(u, v) \approx [u \quad v] M \begin{bmatrix} u \ v \end{bmatrix} $$
其中矩阵 $ M $ 称为结构张量(structure tensor),其定义如下:
$$ M=\sum_{(x, y) \in W}g(x, y)\begin{bmatrix} I_{x}^2 & I_{x} I_{y} \ I_{x} I_{y} & I_{y}^2 \end{bmatrix} $$
2.3 Harris响应函数
Harris角点检测器使用以下响应函数来判断是否为角点:
$$ R = \operatorname{det}(M) - k \operatorname{tr}(M)^2 $$
其中:
- $ \operatorname{det}(M) = \lambda_1 \lambda_2 $
- $ \operatorname{tr}(M) = \lambda_1 + \lambda_2 $
- $ \lambda_1 $、$ \lambda_2 $ 是结构张量 $ M $ 的两个特征值
- $ k $ 是经验常数,通常取值在 $[0.04, 0.06]$ 之间
响应值 $ R $ 的大小决定了当前区域的性质:
- 若 $ \lambda_1 $、$ \lambda_2 $ 都小 → 平坦区域(flat)
- 若一个特征值远大于另一个 → 边缘(edge)
- 若两个特征值都大且接近 → 角点(corner)
2.4 特征值与区域类型的关系图示
3. 算法流程
Harris角点检测的具体实现步骤如下:
✅ 步骤1:图像灰度化
将原始彩色图像转换为灰度图像:
$$ I = 0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B $$
✅ 步骤2:计算图像梯度
使用Sobel算子计算图像在 $ x $、$ y $ 方向的梯度:
$$ I_x = \begin{bmatrix} +1 & 0 & -1 \ +2 & 0 & -2 \ +1 & 0 & -1 \end{bmatrix} * I,\quad I_y = \begin{bmatrix} +1 & +2 & +1 \ 0 & 0 & 0 \ -1 & -2 & -1 \end{bmatrix} * I $$
✅ 步骤3:计算梯度乘积
对每个像素点计算以下三个乘积:
- $ I_x I_x $
- $ I_x I_y $
- $ I_y I_y $
✅ 步骤4:平滑处理
使用高斯滤波器或均值滤波器对上述三个图像进行平滑处理,从而得到结构张量 $ M $ 的每个元素。
✅ 步骤5:计算响应函数
对每个像素点计算响应值 $ R $:
$$ R = \operatorname{det}(M) - k \operatorname{tr}(M)^2 $$
✅ 步骤6:非极大值抑制
设定一个阈值 $ T $,筛选出响应值大于 $ T $ 的候选角点,然后进行非极大值抑制(Non-Max Suppression)去除局部非最大值点,保留最终的角点。
4. 示例演示
下图展示了Harris角点检测在实际图像中的应用效果。
- 右上角图像:使用公式 $ R = \operatorname{det}(M) - k \operatorname{tr}(M)^2 $ 计算得到的角点响应图(k=0.04)
- 左下角图像:设定阈值 $ T = 10^8 $,将响应值高于该阈值的点保留下来
- 右下角图像:经过非极大值抑制后的最终检测结果
5. 总结
Harris角点检测是一种经典的图像特征提取方法,其核心在于通过结构张量和响应函数来判断图像中是否存在角点。
本文从数学角度详细推导了其原理,并给出了具体的实现步骤。Harris角点检测虽然在现代特征检测算法中已被更先进的SIFT、SURF等方法所取代,但其简洁高效的数学模型仍然具有重要的理论意义和教学价值。
如你有图像处理或特征匹配相关项目,了解Harris角点检测原理将有助于你更好地理解后续更复杂的特征检测算法。