opencv-python 详解图像特征(一)

作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


目录

什么是图像的特征:

在图像中举例什么是特征:

一些常见的特征:

图像特征相关的三个任务:

Harris哈里斯角检测:

角点的定义: 

角点的数学形式表示:

 角点数学形式推导:

 灰度值变化的大小积分计算:

分析λ1、λ2特征值可得是不是角点的结果

 相关函数cornerHarris():

 Shi—tomasi拐角检测器

 Harris和Shi-Tomasi区别:


什么是图像的特征:

        可以表达图像中对象的主要信息,并且以此为依据可以从其他未知图像中检测出相似或者相同对象。

在图像中举例什么是特征:

  • 边缘
  • 角点
  • 纹理

一些常见的特征:

  • SIFT
  • SURF
  • HOG
  • Haar
  • LBP
  • KAZE
  • AKAZE
  • BRISK

图像特征相关的三个任务:

  • Detection特征检测
  • Description 特征描述
  • Matching 特征匹配

Harris哈里斯角检测:

角点的定义: 

        角点是图像中向任意方向发生改变时,都引起图像强烈变动的区域,说白了就是平直棱线的交汇点(颜色梯度方向改变的像素点的位置)

角点的数学形式表示:

转换成数学的形式,基本上是去求出位移(u,v)在各个方向上的强度差,这表示如下: 

        窗口函数可以是一个矩形窗口,也可以是一个给与它覆盖像素权重的高斯窗口。

 角点数学形式推导:

        为了要做角点检测,我们需要令这个函数 E(u,v) 最大。也就是说二元函数求极限的时间到了。将泰勒展开应用于上述方程,一阶二维的泰勒展开式为:  

 那么看下展开推导过程

 所以E(u,v)表达式最终形式可以更新为:

 其中:

        在此,Ix 和 Iy 分别是x 和 y方向上图像的导数。(可以被简单用索贝尔函数算出来 cv.Sobel())(M其实就是梯度的协方差矩阵),最后是把实对称矩阵对角化处理后的结果,可以把R看成旋转因子,其不影响两个正交方向的变化分量。
        经对角化处理后,将两个正交方向的变化分量提取出来,就是 λ1 和 λ2(特征值)

 灰度值变化的大小积分计算:

        上边我们得到了E(u,v)的最终形式了,而灰度值变化的大小则取决于矩阵M,那么如何找到这些窗口,我们可以使用矩阵的特征值来实现。计算每个窗口对应的得分(角点响应函数R)。

 其中det(M)=λ1λ2是矩阵的行列式trace(M)=λ1 + λ2是矩阵的迹

         λ1 和 λ2 是矩阵M的特征值k是一个经验常数在(0.04,0.06)范围之间 。

分析λ1、λ2特征值可得是不是角点的结果

这些特征值决定了一个区域是角、边还是平面:

a、当 |R| 较小时,是因为 λ1 和 λ2 都很小,说明这片区域是平面。

b、当 R<0时,是因为 λ1 >> λ2 或者反过来(其中一个远大于另外一个),此时区域是边。

c、当 R较大时,是因为 λ1 和 λ2 都较大,且 λ1∼λ2,此时这片区域应为角。

它可以用下图来表示:

        所以哈里斯角点检测算法的结果,是一个带着这些得分的灰度图像,使用一个合适的阈值,就能给到我们图中的角点。

 相关函数cornerHarris():

cv2.cornerHarris( ),通常结合cv.cornerSubPix() 亚像素精细化函数使用

 Shi—tomasi拐角检测器

 Harris和Shi-Tomasi区别:

        Harris 角点检测中每个窗口的分数公式是将矩阵 M 的行列式与 M 的迹相减:

        由于 Harris 角点检测算法的稳定性和 k 值有关,而 k 是个经验值,不好设定最佳值。
        Shi-Tomasi 发现,角点的稳定性其实和矩阵 M 的较小特征值有关,于是直接用较小的那个特征值作为分数。这样就不用调整k值了。
        所以 Shi-Tomasi 将分数公式改为如下形式:

         如果大于阈值,则将其视为拐角。如果像在Harris Corner Detector中那样在 

空间中绘制它,则会得到如下图像: 

 从图中可以看出,只有当两个值都大于最小值时,才将其视为拐角,也就是绿色区域。

 Shi-Tomasi 的函数: cv2.goodFeaturesToTrack() ,用法可以参考我的另一篇文章:

 opencv-python 实现角点检测和棋盘角点检测_RayChiu757374816的博客-CSDN博客

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值