当前位置: 首页 > news >正文

计算机视觉(opencv)实战十九——角点检测图像特征(Harris 角点、Shi-Tomasi 角点)


角点检测详解

1. 什么是角点?

在计算机视觉中,**角点(Corner)**指的是图像中灰度变化剧烈、具有显著方向性的特征点,通常位于两个边缘的交点处。
角点具有以下特性:

  • 方向唯一性:从角点向任意方向移动,灰度都会明显变化。

  • 稳定性好:在图像平移、旋转、尺度变化时仍能被检测到。

  • 稀疏性强:角点数量远少于边缘或纹理区域,计算代价低。

常见的角点包括:

  • 物体轮廓的拐角

  • 窗口、门框等直角边缘

  • 图案、棋盘格的交叉点

角点检测是许多计算机视觉任务的基础,例如:

  • 图像配准(Image Registration)

  • 相机标定(Camera Calibration)

  • 运动跟踪(Object Tracking)

  • 特征匹配(Feature Matching)

角点检测的作用非常广泛,它是计算机视觉和图像处理里的“基础积木”。简单来说,角点是图像中最容易识别和跟踪的点,因此很多高阶任务都会用到它。以下给你总结一下主要用途:


1. 特征匹配与图像拼接

  • 角点可以用来表示图像的局部特征。

  • 在两张图像中找到相同的角点后,可以实现特征匹配,进而估计它们的几何关系。

  • 应用场景:

    • 全景拼接:通过匹配不同照片中的角点来对齐、拼合图像。

    • 三维重建:利用多张图片中同一点的角点匹配,推算出3D空间坐标。


2. 相机标定(Camera Calibration)

  • 标定板上的黑白棋盘格角点非常适合角点检测,因为它们清晰且稳定。

  • 检测到角点后,可求解相机的内外参,从而完成畸变矫正。

  • 这是很多机器人、AR/VR 系统必做的步骤。


3. 目标跟踪(Object Tracking)

  • 角点在视频帧之间的移动可以用来估计物体运动轨迹。

  • 常用算法:Lucas-Kanade 光流法,就是在角点附近跟踪像素块。

  • 应用场景:

    • 行人、车辆跟踪

    • 运动分析(体育、工业)


4. SLAM 和 AR 应用

  • SLAM(Simultaneous Localization and Mapping)依赖角点或特征点来识别场景中稳定的锚点。

  • AR 眼镜、ARKit 等用角点做特征跟踪,让虚拟物体“粘”在真实世界的表面。


5. 特征描述与识别

  • 角点是提取局部特征描述子的天然选择(如 SIFT、ORB、BRISK)。

  • 有助于:

    • 目标识别

    • 模式识别

    • 图像检索


6. 机器人导航与路径规划

  • 移动机器人或无人机利用角点检测识别环境特征,从而构建地图。

  • 在无 GPS 环境下,也可以通过角点进行视觉里程计(Visual Odometry)。


总结一句话:
角点检测的作用就是帮计算机找到“独特且稳定的兴趣点”,方便后续做匹配、跟踪、定位、识别等任务。


2. 角点检测的数学原理

设灰度图像为 I(x,y)I(x,y),考虑一个小窗口 WW 在图像上的平移 (u,v)(u,v),计算窗口内的灰度差平方和:

对 I(x+u,y+v)进行一阶泰勒展开:

代入后得:

其中,矩阵 MM 称为结构张量(Second Moment Matrix),它反映了窗口内的梯度分布情况。
通过求 MM 的特征值 λ1,λ2\lambda_1,\lambda_2 可判断该区域特性:

  • 平坦区域:λ1≈0,λ2≈0

  • 边缘区域:一个特征值大,一个接近 0

  • 角点区域:两个特征值都较大


3. 常用角点检测算法

3.1 Harris 角点检测

Harris 算法利用矩阵 MM 的行列式和迹构造响应函数:

其中:

  • det⁡(M)=λ1λ2

  • trace⁡(M)=λ1+λ2

  • k∈[0.04,0.06]为经验参数

当 R>0 且数值较大时,该点为角点。
优点:

  • 计算效率高

  • 稳定性好
    缺点:

  • 对尺度不变性不敏感


3.2 Shi-Tomasi (Good Features to Track)

Shi-Tomasi 算法直接使用最小特征值判断角点:

R=min⁡(λ1,λ2)

只要最小特征值大于阈值,就认为该点是角点。
这种方法比 Harris 更稳定,因为避免了参数 kk 带来的不确定性,常用于光流跟踪(如 Lucas-Kanade 光流)。


3.3 FAST 角点检测

FAST(Features from Accelerated Segment Test)是一种更快的角点检测算法:

  1. 以候选点为中心,取周围 16 个像素。

  2. 选定阈值 tt,比较这些像素与中心像素灰度差。

  3. 若有至少连续的 n 个像素亮度都大于中心 +t 或小于中心 -t,则判定为角点。

优点:速度快,适合实时应用
缺点:不如 Harris 稳定,容易受噪声干扰


4. OpenCV 实现示例

下面给出一个对比 Harris 和 Shi-Tomasi 的示例代码:

import cv2
import numpy as np# 读取图像并转为灰度
img = cv2.imread('chessboard.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# ---------- Harris 角点 ----------
gray_f = np.float32(gray)
harris = cv2.cornerHarris(gray_f, blockSize=2, ksize=3, k=0.04)
harris = cv2.dilate(harris, None)
img_harris = img.copy()
img_harris[harris > 0.01 * harris.max()] = [0, 0, 255]# ---------- Shi-Tomasi 角点 ----------
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
img_shi = img.copy()
for corner in corners:x, y = corner.ravel()cv2.circle(img_shi, (int(x), int(y)), 3, (0, 255, 0), -1)cv2.imshow('Harris Corners', img_harris)
cv2.imshow('Shi-Tomasi Corners', img_shi)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解析:

  • cv2.cornerHarris:执行 Harris 角点检测

    • blockSize: 窗口大小

    • ksize: Sobel 算子大小

    • k: Harris 响应参数

  • cv2.goodFeaturesToTrack:执行 Shi-Tomasi 算法

    • maxCorners: 最大检测角点数

    • qualityLevel: 阈值(相对于最大角点响应)

    • minDistance: 角点间的最小距离


5. 结果对比

  • Harris 检测会产生较多响应点,可能需要后处理(非极大值抑制)。

  • Shi-Tomasi 输出点更稳定且更适合光流跟踪。

  • FAST 速度最快,但可能产生误检。


6. 总结

角点检测是特征提取的重要步骤,常用于目标跟踪、特征匹配和 3D 重建。
选用建议:

  • 若追求稳定性 → Shi-Tomasi

  • 若需要速度 → FAST

  • 若进行特征描述 → 通常与 SIFT、ORB 等结合使用


文章转载自:

http://3juNRyie.qzzmp.cn
http://fK0uUzUM.qzzmp.cn
http://yRK1PcKP.qzzmp.cn
http://K125EEUD.qzzmp.cn
http://VrE9iVtD.qzzmp.cn
http://ABiwBNzu.qzzmp.cn
http://1RhhGbmy.qzzmp.cn
http://k4ylQFoH.qzzmp.cn
http://8nvl3acj.qzzmp.cn
http://6zHEhAXw.qzzmp.cn
http://uReJ7i3K.qzzmp.cn
http://Xxe44AH7.qzzmp.cn
http://phaB2yRX.qzzmp.cn
http://kKYlqKMu.qzzmp.cn
http://F803Cymi.qzzmp.cn
http://ny2jSihe.qzzmp.cn
http://h1MzBbHw.qzzmp.cn
http://XfUvg0bh.qzzmp.cn
http://SbagnTWM.qzzmp.cn
http://Th8Z8C9q.qzzmp.cn
http://M2Rvy0qD.qzzmp.cn
http://FcCaRNOQ.qzzmp.cn
http://QrQjpgRd.qzzmp.cn
http://j4jatZB9.qzzmp.cn
http://yJKIseyj.qzzmp.cn
http://3pZAJ3L1.qzzmp.cn
http://w1CzYrtE.qzzmp.cn
http://tZKESIQ4.qzzmp.cn
http://zajEWceM.qzzmp.cn
http://Np4xCp0o.qzzmp.cn
http://www.dtcms.com/a/382126.html

相关文章:

  • 【限流器设计】固定窗口计数法
  • Estimator and Confidence interval
  • 构建AI智能体:三十二、LangChain智能体:打造会使用工具(Tools)、有记忆(Memory)的AI助手
  • AI内容标识新规实施后,大厂AI用户协议有何变化?(六)科大讯飞
  • 机械应答到自然交流,声网AI陪练改变我的口语
  • 贪心算法应用:信用评分分箱问题详解
  • 【Spring AI】Filter 简单使用
  • html各种常用标签
  • Linux 进程信号之信号的捕捉
  • 实验-高级acl(简单)
  • C++之特殊类设计
  • stm32教程:USART串口通信
  • 地级市绿色创新、碳排放与环境规制数据
  • ES——(二)基本语法
  • 中级统计师-统计法规-第十一章 统计法律责任
  • 拥抱直觉与创造力:走进VibeCoding的新世界
  • Python进程和线程——多进程
  • 论文阅读 2025-9-13 论文阅读随心记
  • leecode56 合并区间
  • 用R获取 芯片探针与基因的对应关关系 bioconductor的包的 三者对应关系
  • xxl-job的使用
  • 2025 年 9 月 12 日科技前沿动态全览
  • 高德地图自定义 Marker:点击 悬停 显示信息框InfoWindow实战(Vue + AMap 2.0)
  • 猿辅导Java后台开发面试题及参考答案
  • 启动项目提示:org.springframework.context.annotation不存在问题
  • 从零开始的指针(3)
  • “移动零”思路与题解
  • 大模型训练框架:Swift 框架
  • [笔记] 来到了kernel 5.14
  • 【算法笔记】快速排序算法