OpenCV 之 角点检测

本文详细介绍了OpenCV中的角点检测方法,包括Harris角点检测和Shi-Tomasi角点检测。通过泰勒展开和矩阵运算解释了角点检测的原理,并给出了代码示例,展示了如何使用cornerHarris()和goodFeaturesToTrack()函数进行角点检测。此外,还讨论了亚像素角点检测的cornerSubPix()函数的应用。
摘要由CSDN通过智能技术生成

    角点 (corners) 的定义有两个版本:两条边缘的交点,或者,邻域内具有两个主方向的特征点

    从人眼来看,角点是图像亮度发生剧烈变化的点 或 边缘曲线上曲率为极大值的点。例如,下图 E 和 F 便是典型的角点

        

1  检测思路

    在图像中定义一个局部小窗口,然后沿各个方向移动这个窗口,则会出现 a) b) c) 三种情况,分别对应平坦区、边缘和角点

     a)  窗口内的图像强度,在窗口向各个方向移动时,都没有发生变化,则窗口内都是 “平坦区”,不存在角点

     b)  窗口内的图像强度,在窗口向某一个 (些) 方向移动时,发生较大变化;而在另一些方向不发生变化,那么,窗口内可能存在 “边缘”

     c)  窗口内的图像强度,在窗口向各个方向移动时,都发生了较大的变化,则认为窗口内存在 “角点”

         

                 a)  flat region              b)  edge                     c)  corner

2  Harris 角点

2.1  泰勒展开

    图像在点 $(x,y) $ 处的灰度值为 $I(x, y)$,当在 $x$ 方向上平移 $\Delta u$,且 $y$ 方向上平移 $\Delta v$ 时,图像灰度值的变化为

 \qquad E(\Delta u,\Delta v) = \sum\limits_{x,y} \, \underbrace{w(x,y)}_\text{window function} \; [\underbrace{I(x+\Delta u, y+\Delta v)}_\text{shifted intensity} - \underbrace{I(x, y)}_\text{intensity}]^2

    $I(x,y)$ 的偏导数分别记为 $I_x$ 和 $I_y$,则上式用一阶泰勒级数近似展开

    \qquad \sum\limits_{x,y} \; [I(x+\Delta u, y+\Delta v) - I(x, y)]^2 \approx \sum\limits_{x,y} \; [I(x, y) +\Delta uI_x + \Delta vI_y - I(x, y)]^2 = \sum\limits_{x,y} \; [\Delta u^2I_x^2 + 2\Delta u \Delta vI_x I_y + \Delta v^2I_y^2 ]

    写成矩阵形式

   

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值