SIFT算法:DoG尺度空间生产 
SIFT算法:KeyPoint找寻、定位与优化
SIFT算法:确定特征点方向 
SIFT算法:特征描述子

目录:

1、找寻

2、定位

3、优化


1 KeyPoint找寻

  极值的检测是在DoG空间进行的,检测是以前点为中心,3pixel*3pixel*3pixel的立方体为邻域,判断当前点是否为局部最大或最小。如下图所示,橘黄色为当前检测点,绿色点为其邻域。因为要比较当前点的上下层图像,所以极值检测从DoG每层的第2幅图像开始,终止于每层的倒数第2幅图像(第1幅没有下层,最后1幅没有上层,无法比较)。

2 KeyPoint定位

  以上极值点的搜索时在离散空间中进行的,检测到的极值点并不是真正意义上的极值点。如下图所示,连续空间中极值与离散空间的区别。通常通过插值的方式,利用离散的值来插值,求取接近真正的极值的点。

对于一维函数,利用泰勒级数,将其展开为二次函数:

f(x) ≈ f(0) + f'(0)x + f''(0)x2

对于二维函数,泰勒展开为:

矩阵表示为:

矢量表示为:

当矢量为n维时,有:

求取f(x)的极值,只需求取∂f/∂x = 0。对于极值,x,y,σ三个变量,即为三维空间。利用三维子像元插值,设其函数为D(x, y, σ),令x = (x, y, σ)T,那么在第一节中找到的极值点进行泰勒展开为(式-1)如下:

其中D为极值点的值,∂DT/∂x为在极值点各自变量的倒数,∂2D/∂x2为其在展开点相应的矩阵。对上式求导,另∂D(x)/∂x = 0,结果如下式,对应的(为了表示方便,ˆx代替)向量即为真正极值点偏离插值点的量。求解得(式-2)如下:

最终极值点的位置即为插值点xx,且多次迭代可以提高精度(一般为5次迭代)。

问题 1:

  《图像局部不变性特征与描述》中提到,对于偏移量ˆx任何方向上偏移大于0.5的特征点,要删除该点。

  对于Lowe的原文为:If the offset ˆx is larger than 0.5 in any dimension, then it means that the extremum lies closer to a different sample point. In this case, the sample point is changed and the interpolation performed instead about that point.

  本人英语水平有限,个人认为原作者并未说要删除此类点,只是说这个点偏移了,所以需要插值来进行替换。且在OpenCV sift的源码中,并未删除上述类型的点,在vlfeat的开源代码中,也未删除上述点。

3 KeyPoint优化

  对KeyPoint定位后,要剔除一些不好的KeyPoint,那什么是不好的KeyPoint的呢?

  1. DoG响应较低的点,即极值较小的点。
  2. 响应较强的点也不是稳定的特征点。DoG对图像中的边缘有较强的响应值,所以落在图像边缘的点也不是稳定的特征点。一方面图像边缘上的点是很难定位的,具有定位的歧义性;另一方面这样的点很容易受到噪声的干扰变得不稳定。

  对于第一种,只需计算矫正后的点的响应值D(ˆx),响应值小于一定阈值,即认为该点效应较小,将其剔除。将(式-2)带入(式-1),求解得:

在Lowe文章中,将|D(ˆx)|<0.03(图像灰度归一化为[0,1])的特征点剔除。

  对于第二种,利用Hessian矩阵来剔除。一个平坦的DoG响应峰值在横跨边缘的地方有较大的主曲率,而在垂直边缘的地方有较小的主曲率。主曲率可以通过2×2的Hessian矩阵H求出:

  D值可以通过求临近点差分得到。H的特征值与D的主曲率成正比,具体可参见Harris角点检测算法。为了避免求具体的值,我们可以通过H将特征值的比例表示出来。令为最大特征值,为最小特征值,那么:
 
  Tr(H)表示矩阵H的迹,Det(H)表示H的行列式。令表示最大特征值与最小特征值的比值,则有:
  
  上式与两个特征值的比例有关。随着主曲率比值的增加,也会增加。我们只需要去掉比率大于一定值的特征点。Lowe论文中去掉r=10的点。

参考资料:

  1. David G. Lowe Distinctive Image Features from Scale-Invariant Keypoints
  2. 王永明 王贵锦 《图像局部不变性特征与描述》

SIFT算法:KeyPoint找寻、定位与优化的更多相关文章

  1. SIFT算法原理(2)-极值点的精确定位

    在SIFT解析(一)建立高斯金字塔中,我们得到了高斯差分金字塔: 检测DOG尺度空间极值点 SIFT关键点是由DOG空间的局部极值点组成的.以中心点进行3X3X3的相邻点比较,检测其是否是图像域和尺度 ...

  2. SIFT算法:特征描述子

    SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 目录: 1.确定描述子采样区域 2.生成描述子 2.1 旋 ...

  3. SIFT算法:确定特征点方向

    SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 目录: 1.计算邻域梯度方向和幅值 2.计算梯度方向直方图 ...

  4. SIFT算法:DoG尺度空间生产

    SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 目录: 1.高斯尺度空间(GSS - Gauss Scal ...

  5. SIFT算法详解(转)

    http://blog.csdn.net/zddblog/article/details/7521424 目录(?)[-] 尺度不变特征变换匹配算法详解 Scale Invariant Feature ...

  6. 【转】 SIFT算法详解

    尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)Just For Fun zdd  zddmail@gmail.com 对于初学者,从Davi ...

  7. 《sift算法详解》阅读笔记

    原博客来自:http://blog.csdn.net/zddblog/article/details/7521424 定义: 尺度不变特征转化是一种计算机视觉算法,用于侦测和描述物体的局部性特征,在空 ...

  8. SIFT算法详解

    尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)Just For Fun zdd  zddmail@gmail.com or (zddhub@ ...

  9. 转:sift算法详解

    转自:http://blog.csdn.net/pi9nc/article/details/23302075 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越. 1.SIF ...

随机推荐

  1. 小技巧之指定refer

    在当前页面A的控制台输入window.location.href='要跳去的页面B',B页面的refer即为A页面.

  2. 安装aptana插件报Error opening the editor. java.lang.NullPointerException

    Aptana的官方网站下载eclipse的插件:  http://update.aptana.com/update/studio/3.2/ ,可以在线安装也可以下载插件后再安装,我是以在线的形式安装的 ...

  3. POJ 3254 Corn Fields(DP + 状态压缩)

    题目链接:http://poj.org/problem?id=3254 题目大意:Farmer John 放牧cow,有些草地上的草是不能吃的,用0表示,然后规定两头牛不能相邻放牧.问你有多少种放牧方 ...

  4. Codevs 1814 最长链

    1814 最长链 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少, ...

  5. 文件操作 系统备份和还原,压缩,解压 tar dump/restore

    基本操作命令: ls -a 显示指定目录下的目录和文件,包括隐藏的文件和目录 ls -l 将文件和目录详细列出来,包括文件状态,权限,拥有者,文件名,文件大小等 改变工作目录命令 cd cd .. 进 ...

  6. c#NPOI导出

    按行列导出数据: HSSFWorkbook hssfworkbook = new HSSFWorkbook(); //命名空间:using NPOI.HSSF.UserModel; Sheet she ...

  7. JavaScript学习总结【11】、JS 运动

    动画效果在网站中是一种非常常见的交互式体验效果,比如侧边栏分享.图片淡入淡出,我们把这种动画效果就叫做运动,也就是让物体动起来.如果想让一个物体动起来,无非就是改变它的速度,也就是改变属性值,比如 l ...

  8. jquery 的新使用用法

    在1.9.1jquery版本中,live 被替换了,现在使用on事件 在动态添加的行中使用下面可响应 $("tbody").on("click","b ...

  9. Pyhon编码事项

    1. 永远不要使用import * Pylint代码审查:Wildcard import XXX 如果函数名重名,或者要导入的内容里面包含了from datetime import datetime, ...

  10. Using .NET 4's Lazy<T> 实现单实例

    Using .NET 4's Lazy<T> type Explanation of the following code: If you're using .NET 4 (or high ...