SURF分析算法

一个、整体形象

这个概念是积分图像Viola和Jones建议。随机位积分图像(i。j)的值原始图象的左上角随机点(i,j)级配相应的重点领域值的总和,其数学公式如图1所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

那么,当我们想要计算图片一个区域的积分,就仅仅需计算这个区域的四个顶点在积分图像里的值,便能够通过2步加法和2步减法计算得出。其数学公式例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

二、Hession矩阵探測器

1、斑点检測

斑点:与周围有着颜色和灰度区别的区域。

在一个一维信号中,让它和高斯二阶导数进行卷积。也就是拉普拉斯变换,那么在信号的边缘处就会出现过零点。例如以下图所看到的:

高斯拉普拉斯Log探測器的响应值就是在衡量图像的相似性。例如以下图是一个图像的高斯拉普拉斯变换的三维图和灰度图显示。在图像中的斑点尺寸与高斯拉普拉斯函数

的形状趋于一致时,图像的拉普拉斯响应抵达最大。

Hession矩阵就是利用二阶微分来进行斑点检測,其矩阵例如以下:

2、Hession矩阵与盒子滤波器

在图像中的Hession矩阵例如以下:

他们的三维图和灰度图例如以下所看到的:

由此。我们把模板(图像中的区域)与图像的卷积运算转化为盒子滤波器的运算,例如以下图所看到的:

3、hession矩阵行列式的简化

当我们用sigma = 1.2.的高斯二阶微分滤波,模板尺寸为9X9最为最小的尺度空间值对图像进行滤波和斑点检測,Hession矩阵的行列式可做例如以下简化:

常数C不影响极值点的比較,所以终于简化式例如以下,这也是SURF论文里面Hession响应值计算公式的来源:

另外,响应值还要依据滤波器大小进行归一化处理。以保证随意大小滤波器的F范数是统一的。

0.9^2是滤波器响应的相关权重w是为了平衡Hessian行列式的表示式。这是为了保持高斯核与近似高斯核的一致性。

理论上来说对于不同的σ的值和相应尺寸的模板尺寸。w值是不同的,但为了简化起见,能够觉得它是同一个常数。 使用近似的Hessian矩阵行列式来表示图像中某一点x处的斑点响应值。遍历图像中全部的像元点,便形成了在某一尺度下琉璃点检測的响应图像。使用不同的模板尺寸,

便形成了多尺度斑点响应的金字塔图像,利用这一金字塔图像,就能够进行斑点响应极值点的搜索。

三、3D非极大值抑制

1、尺度金字塔构造

在SURF中。採用不断增大盒子滤波器模板尺寸与积分图像求取Hession矩阵响应。然后在响应图像上採用3D非极大值抑制。求取各种不同尺度

的斑点,下面是两种不同的金字塔,SURF的金字塔属于另外一种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

SURF中採用9X9尺寸的滤波器作为起始滤波器。之后的滤波器尺寸可由下面公式计算得出:

octave、interval在公式中都是从1開始。也就是当第0组第0层时,在公式中octave = 1, interval = 1。

採用这样的方式来定义滤波器尺寸的理由例如以下;

滤波器响应长度、滤波器尺寸、组索引O、层索引S

尺度sigma之间的关系例如以下:

採用类似的方法来处理其它几组的模板序列。其方法是将滤波器尺寸添加量翻倍(6,12。24。38)。这样。能够得到第二组的滤波器尺寸。它们分别为15。27,39,51。第三组的滤波器尺寸为27,51。75,99。假设原始图像的尺寸仍然大于相应的滤波器尺寸,尺度空间的分析还能够进行第四组,其相应的模板尺寸分别为51。99,147,195。下图显示了第一组至第三组的滤波器尺寸变化:

在通常尺度分析情况下,随着尺度的增大。被检測到的斑点数量迅速衰减。所以一般进行3-4组就能够了。与此同一时候,为了降低运算量。提高计算的速度,能够考虑在滤波时,将採样间隔设为2。

2、为了在图像及不同尺寸中定位兴趣点,我们用了3×3×3邻域非最大值抑制:

全部小于预设极值的取值都被丢弃,添加极值使检測到的特征点数量降低。终于仅仅有几个特征最强点会被检測出来。

检測过程中使用与该尺度层图像解析度相相应大小的滤波器进行检測,以3×3的滤波器为例,该尺度层图像中9个像素点之中的一个图2检測特征点与自身尺度层中其余8个点和在其之上及之下的两个尺度层9个点进行比較,共26个点。图中标记‘x’的像素点的特征值若大于周围像素则可确定该点为该区域的特征点。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

3、局部极大值精确定位

採用3维线性插值法得到亚像素级的特征点。同一时候也去掉那些值小于一定阈值的点。

四、特征点描写叙述符

1、特征点方向分配

以特征点为中心。计算半径为6s(S为特征点所在的尺度值)的邻域内的点在x、y方向的Haar小波(Haar小波边长取4s)响应,Harr小波

模板如图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

计算出图像在哈尔小波的x和y方向上的响应值之后,对两个值进行因子为2S的高斯加权。加权后的值分别表示在水平和垂直方向上的方向分量。

Harr特征值反应了图像灰度变化的情况,那么这个主方向就是描写叙述那些灰度变化特别剧烈的区域方向。

接着,以特征点为中心。张角为π/3的扇形滑动。计算窗体内的Harr小波响应值dx、dy的累加:

扇形窗体的滑动如图所看到的:

在OpenSURF的C++代码实现例如以下:

  for(int i = -6; i <= 6; ++i)
  {
    for(int j = -6; j <= 6; ++j)
    {
      if(i*i + j*j < 36)
      {
        gauss = static_cast<float>(gauss25[id[i+6]][id[j+6]]);
        resX[idx] = gauss * haarX(r+j*s, c+i*s, 4*s);
        resY[idx] = gauss * haarY(r+j*s, c+i*s, 4*s);
        Ang[idx] = getAngle(resX[idx], resY[idx]);
        ++idx;
      }
    }
  }

通过i,j来控制以特征点为中心的6X6的范围,(i*i + j*j < 36)则筛选落在以特征点为中心。半径为6s的圆形区域内的点,然后计算HaarX与HarrY并与通过事先计算好的Gauss

滤波。并计算出每一个点的角度。

最后将最大值那个扇形的方向作为该特征点的主方向。

在OpenSURF寻找扇形中具有最大值得方向代码例如以下:

 for(ang1 = 0; ang1 < 2*pi;  ang1+=0.15f) {
    ang2 = ( ang1+pi/3.0f > 2*pi ? ang1-5.0f*pi/3.0f : ang1+pi/3.0f);
    sumX = sumY = 0.f;
    for(unsigned int k = 0; k < Ang.size(); ++k)
    {
      // get angle from the x-axis of the sample point
      const float & ang = Ang[k];

      // determine whether the point is within the window
      if (ang1 < ang2 && ang1 < ang && ang < ang2)
      {
        sumX+=resX[k];
        sumY+=resY[k];
      }
      else if (ang2 < ang1 &&
        ((ang > 0 && ang < ang2) || (ang > ang1 && ang < 2*pi) ))
      {
        sumX+=resX[k];
        sumY+=resY[k];
      }
    }

    // if the vector produced from this window is longer than all
    // previous vectors then this forms the new dominant direction
    if (sumX*sumX + sumY*sumY > max)
    {
      // store largest orientation
      max = sumX*sumX + sumY*sumY;
      orientation = getAngle(sumX, sumY);
    }
  }

2、特征点特征矢量的生成

以特征点为中心,沿主方向将20SX20S的图像划分为4X4个子块,每一个子块用尺寸2S的Harr模板进行响应值计算,并统计每一个子块中

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

这样就有4X4X4=64维的特征数据。例如以下图所看到的:

在计算这个矩形区域时并非先把它旋转到主方向。而是先计算出每个点的Harr响应值dx、dy并高斯加权处理后。把dx、dy进行旋转变换,计算

公式例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ1hQMjIwNTQ1NTI1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

在OpenSURF的实现源代码中採用的是第二种方式,通过点旋转公式。把点旋转到主方向上并进行近期邻插值的相应点,公式例如以下:

五、匹配

为了加速匹配过程。SURF借助Laplacian(在之前计算Hessian是能够顺便得出,不占用太多的时间)的符号使匹配过程索引加快。这样能够将以下的情况区分开,然后在进行描写叙述符匹配:

參考资料:

http://www.cnblogs.com/ronny/p/4045979.html

http://doc.okbase.net/ronny/archive/107771.html

http://www.tuicool.com/articles/2i6fqq3

http://wenku.baidu.com/view/cf0c164f2e3f5727a5e96238.html

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-12 21:45:35

SURF分析算法的相关文章

(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 关联规则分析算法)

前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:Microsoft决策树分析算法.Microsoft聚类分析算法.Microsoft Naive Bayes 算法.Microsoft 时序算法,后续还补充了二篇结果预测篇.Microsoft 时序算法——结果预算+下期彩票预测篇,看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每篇文章都有它自己的应用场景介绍,有兴趣的同学可以参阅.本篇我们总结微软挖掘算法系列中一款比较重要的算法:Microsoft关联规则分析算法,根

链接分析算法之:HITS算法

转自 http://blog.csdn.net/hguisu/article/details/8013489 HITS(HITS(Hyperlink - Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jon Kleinberg 博士于1997 年首先提出的,为IBM 公司阿尔马登研究中心( IBM Almaden Research Center) 的名为"CLEVER"的研究项目中的一部分. HITS算法是链接分析中非

【微软100题】一个台阶总共同拥有n 级,假设一次能够跳1 级,也能够跳2 级,求总共同拥有多少总跳法,并分析算法的时间复杂度

package ms100; /** * 一个台阶总共同拥有n 级,假设一次能够跳1 级.也能够跳2 级,求总共同拥有多少总跳法.并分析算法的时间复杂度 *注: 这道题近期常常出现.包含MicroStrategy 等比較重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题. 首先我们考虑最简单的情况: 假设仅仅有1 级台阶,那显然仅仅有一种跳法. 假设有2 级台阶,那就有两种跳的方法了:一种是分两次跳.每次跳1 级:第二种就是一次跳2 级. 如今我们再来讨论普通情况: 我们把n 级台阶时的跳

3.4 网页分析算法

在搜索引擎中,爬虫爬取了对应的网页之后,会将网页存储到服务器的原始数据库中,之后搜索引擎会对这些网页进行分析并确定各网页的重要性,即会影响用户的检索的排名结果.对于这些重要性的确定及排名结果的确定需要算法来解决,所以先来了解一下算法. 搜索引擎的网页分析算法主要分为3类:基于用户行为的网页分析算法.基于网络拓扑的网页分析算法.基于网页内容的网页分析算法.接下来我们分别对这些算法进行讲解. 搜索引擎的网页分析算法主要分为3类:基于用户行为的网页分析算法.基于网络拓扑的网页网页分析算法.基于网页内容

第十四篇:Apriori 关联分析算法原理分析与代码实现

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度

package ms100; /** * 一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度 *注: 这道题最近经常出现,包括MicroStrategy 等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题. 首先我们考虑最简单的情况: 如果只有1 级台阶,那显然只有一种跳法, 如果有2 级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1 级:另外一种就是一次跳2 级. 现在我们再来讨论一般情况: 我们把n 级台阶时的跳法看成是n

微软数据挖掘算法:Microsoft 关联规则分析算法(7)

前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:微软数据挖掘算法:Microsoft 决策树分析算法(1).微软数据挖掘算法:Microsoft 聚类分析算法(2).微软数据挖掘算法:Microsoft Naive Bayes 算法(3).微软数据挖掘算法:Microsoft 时序算法(5),后续还补充了二篇微软数据挖掘算法:结果预测篇(4).微软数据挖掘算法:Microsoft 时序算法之结果预测及其彩票预测(6),看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每

微软数据挖掘算法:Microsoft 决策树分析算法(1)

介绍: Microsoft 决策树算法是分类和回归算法,用于对离散和连续属性进行预测性建模. 对于离散属性,该算法根据数据集中输入列之间的关系进行预测. 它使用这些列的值(也称之为状态)预测指定为可预测的列的状态. 具体地说,该算法标识与可预测列相关的输入列. 例如,在预测哪些客户可能购买自行车的方案中,假如在十名年轻客户中有九名购买了自行车,但在十名年龄较大的客户中只有两名购买了自行车,则该算法从中推断出年龄是自行车购买情况的最佳预测因子. 决策树根据朝向特定结果发展的趋势进行预测. 对于连续

链接分析算法之:SALSA算法

SALSA算法的初衷希望能够结合PageRank和HITS算法两者的主要特点,既可以利用HITS算法与查询相关的特点,也可以采纳PageRank的“随机游走模型”,这是SALSA算法提出的背景.由此可见,SALSA算法融合了PageRank和HITS算法的基本思想,从实际效果来说,很多实验数据表明,SALSA的搜索效果也都优于前两个算法,是目前效果最好的链接分析算法之一. 从整体计算流程来说,可以将SALSA划分为两个大的阶段:首先是确定计算对象集合的阶段,这一阶段与HITS算法基本相同:第二个