一句话定义
角点是局部邻域内沿两个以上方向亮度都显著变化的点;Harris 检测器用自相关矩阵的特征值把「平坦/边缘/角点」量化成一个可排序的响应值。
为什么重要
平移小块图像时,平坦区找不到位置、边缘沿走向滑动不定,只有角点能被唯一定位——它是传统视觉做跟踪、拼接、重建的第一枚「图像锚点」,也是理解「什么才算好的局部特征」的最小案例。
直观类比
在一扇纯色墙(平坦)、一条桌沿(边缘)和一个桌角(角点)上各按住一枚硬币并小幅晃动:墙上硬币挪来挪去没区别,桌沿硬币只能沿桌沿滑,桌角硬币怎么动画面都明显不同——「怎么动都变」就是角点的定义。
前置知识
kp-003(梯度估计)。
核心概念
- 兴趣点/关键点(Interest Point / Keypoint):位置稳定、可重复检测的显著点。
- 自相关(窗口函数 W):衡量窗口平移 (u, v) 后变化量的能量函数。
- 结构张量 M:由窗口内梯度外积求和得到的 2×2 矩阵,特征值 λ₁、λ₂ 刻画两个主方向的变化强度。
- Harris 响应 R:det(M) − k·trace(M)²,把两个特征值压成一个分数。
- Shi-Tomasi 准则:直接取 min(λ₁, λ₂) 作为响应,即「两个方向都要足够强」。
- 非极大值抑制:响应图上只留局部最大点,避免相邻重复。
原理与机制
对窗口内每个像素做一阶泰勒展开,平移能量近似为二次型 E(u,v) ≈ [u v] M [u v]ᵀ。M 的两个特征值给出三种情形:两个都小(平坦)、一个大一个小(边缘)、两个都大(角点)。Harris 用行列式与迹的组合避免显式求特征值(1988 年的算力考量,如今依然高效);k 常取 0.04–0.06。由于泰勒展开在旋转下协变、能量对亮度偏移不变,Harris 角点具有旋转不变性与亮度偏移不变性,但没有尺度不变性——放大图像后同一物理角点会丢检,这正是 kp-007 引入尺度空间的动机。
公式与模型
E(u, v) = Σ_{(x,y)∈W} w(x, y) · [ I(x+u, y+v) − I(x, y) ]²
M = Σ w(x, y) · [ Ix² IxIy ; IxIy Iy² ]
R = det(M) − k · trace(M)² = λ1λ2 − k(λ1 + λ2)²图示
实例与案例
视觉里程计:SLAM 前端常用 Shi-Tomasi(goodFeaturesToTrack)选点,再用 LK 光流(kp-022)逐帧跟踪这些点,稳定且快。视频防抖:跟踪角点估计帧间全局运动,反向 warp 补偿。增强现实中角点 + 平面跟踪仍是无标记 AR 的经典方案。
import cv2
corners = cv2.goodFeaturesToTrack(gray, maxCorners=200, qualityLevel=0.01,
minDistance=10, blockSize=3) # Shi-Tomasi
dst = cv2.cornerHarris(gray_f, blockSize=2, ksize=3, k=0.04) # Harris 响应图常见误区
- 把 Harris 当尺度不变特征:它只保证旋转与亮度偏移不变;跨尺度匹配必须升级到 SIFT/ORB。
- k 值随意调:k 过大压制弱角点、过小把边缘误判为角点,默认 0.04 起步即可。
- 忽略非极大值抑制与最小间距:同一物理角点会得到一簇响应,不去重会破坏后续匹配一一对应。
- 在低纹理场景硬找角点:白墙、天空里没有可靠角点,跟踪失败往往源于选点阶段而非跟踪算法。
与其他知识点的关系
kp-008 给角点配描述子并跨图匹配;kp-007 把 Harris 的尺度缺陷补齐;kp-023 的相关滤波跟踪同样以「局部窗口可定位」为前提。
自测题
- 为什么边缘点不能作为唯一锚点?
答案要点:沿边缘走向平移窗口,能量几乎不变,位置不可唯一确定;角点沿任意方向平移都会引起显著变化。
- Harris 响应 R 中 det 与 trace 分别对应什么?
答案要点:det = λ₁λ₂,trace = λ₁+λ₂;两个特征值都大时 R 为大正值(角点),一大一小时 R 为负(边缘)。
- Harris 具备哪些不变性、缺什么?
答案要点:具备旋转不变与亮度偏移不变;缺少尺度不变与对大范围亮度尺度变化的稳健性。
延伸阅读
- Harris 与 Stephens 1988《A Combined Corner and Edge Detector》
- Shi 与 Tomasi 1994《Good Features to Track》