zoukankan      html  css  js  c++  java
  • 特征提取算法(4)——Harris角点提取

    1、角点

    1.1 特征点与角点

    特征点是计算机视觉算法的基础,使用特征点来代表图像的内容。

    角点是一类重要的点特征,图像分析的角度来定义:

    1. 角点可以是两个边缘的角点;
    2. 角点是邻域内具有两个主方向的特征点;

    有以下特点:

    • 局部窗口沿各方向移动,均产生明显变化;
    • 图像局部曲率突变;

    不同类型的角点:

    1.2 典型的角点检测算法

    一种需要对图像边缘进行编码,这在很大程度上依赖于图像的分割与边缘提取,具有相当大的难度和计算量,且一旦待检测目标局部发生变化,很可能导致操作的失败。

    另一种基于图像灰度的方法通过计算点的曲率及梯度来检测角点,避免了第一类方法存在的缺陷,此类方法主要有Moravec算子、Forstner算子、Harris算子、SUSAN算子等。

    比较著名的角点检测方法还有jianbo Shi和Carlo Tomasi提出的Shi-Tomasi算法,这个算法开始主要是为了解决跟踪问题,用来衡量两幅图像的相似度,我们也可以把它看为Harris算法的改进。OpenCV中已经对它进行了实现,接口函数名为GoodFeaturesToTrack()

    另外还有一个著名的角点检测算子即SUSAN算子,SUSAN是Smallest Univalue Segment Assimilating Nucleus(最小核值相似区)的缩写。SUSAN使用一个圆形模板和一个圆的中心点,通过圆中心点像素与模板圆内其他像素值的比较,统计出与圆中心像素近似的像元数量,当这样的像元数量小于某一个阈值时,就被认为是要检测的角点。我觉得可以把SUSAN算子看为Harris算法的一个简化。这个算法原理非常简单,算法效率也高,所以在OpenCV中,它的接口函数名称为:FAST() 。

    2、Harris角点检测

    Harris角点检测算子是于1988年由CHris Harris& Mike Stephens提出来的。在具体展开之前,不得不提一下Moravec早在1981就提出来的Moravec角点检测算子。

    2.1 Moravec角点检测算子

    在图像上取一个W*W的“滑动窗口”,不断的移动这个窗口并检测窗口中的像素变化情况E。像素变化情况E可简单分为以下三种:

    1. 如果在窗口中的图像是什么平坦的,那么E的变化不大;
    2. 如果在窗口中的图像是一条边,那么在沿这条边滑动时E变化不大,而在沿垂直于这条边的方向滑动窗口时,E的变化会很大;
    3. 如果在窗口中的图像是一个角点时,窗口沿任何方向移动E的值都会发生很大变化。

    上图就是对Moravec算子的形象描述。用数学语言来表示的话就是图像I(x,y),当点(x,y)处平移(Δx,Δy)后的自相似性,自相关函数给出:

    其中W(x,y)是以点(x,y)为中心的窗口,ω(u,v)是加权函数,可以是常数,也可以是高斯加权函数:

    其中(Δx,Δy就表示四个移动方向(1,0)(1,1)(0,1)(-1,1),E就是像素的变化值。Moravec算子对四个方向进行加权求和来确定变化的大小,然和设定阈值,来确定到底是边还是角点。

    2.2 Harris角点检测算子原理

    Harris角点检测算子实质上就是对Moravec算子的改良和优化。

    作者提出了三点Moravec算子的缺陷并且给出了改良方法:

    (1)Moravec算子对方向的依赖性太强,在上文中我们可以看到,Moravec算子实际上只是移动了四个45度角的离散方向,真正优秀的检测算子应该能考虑到各个现象的移动变化情况。为此,作者采用微分的思想:

    泰勒公式展开:

    也就是说图像I(x,y在点)(x,y)处平移(Δx,Δy)后的自相关函数可以近似为二项函数:

    其中:

     

    二次项函数本质上就是一个椭圆函数。椭圆的扁率和尺寸是由M(x,y)的特征值λ1λ2λ1、λ2决定的,椭贺的方向是由M(x,y)M(x,y)的特征矢量决定的,如下图所示,椭圆方程为:

    椭圆函数特征值与图像中的角点、直线(边缘)和平面之间的关系如下图所示。共可分为三种情况:

    1. 一个特征值大,另一个特征值小,自相关函数值在某一方向上大,在其他方向上小,则表示检测到边;
    2. 两个特征值都小,且近似相等;自相关函数数值在各个方向上都小,则表示检测到图像中的平面(平坦部分);
    3. 两个特征值都大,且近似相等,自相关函数在所有方向都增大。表示检测到了角点。

    根据二次项函数特征值的计算公式,我们可以求M(x,y)矩阵的特征值。但是Harris给出的角点差别方法并不需要计算具体的特征值,而是计算一个角点响应值R来判断角点。R的计算公式为:

    其中detM为矩阵M的行列式,traceM为矩阵M的直迹,取值范围为0.04~0.06。事实上,特征是隐含在detM和traceM中,因为:

    2.2 Harris角点检测实现

    2.3 Harris角点的性质

    参考自:https://www.cnblogs.com/ronny/p/4009425.html

  • 相关阅读:
    虚方法、重写方法以及抽象类的知识小结
    DateTime时间格式
    JavaScript中Eval()函数的作用
    JQuery Event属性说明
    正则表达式30分钟入门教程
    dwz的form表单中url的变量替换
    dwz中权限的控制
    Dwz下拉菜单的二级联动
    Win7下用IIS发布网站
    IntelliJ IDEA 常用快捷键列表及技巧大全
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11380040.html
Copyright © 2011-2022 走看看