已经有很多博客已经将sift特征提取算法解释的很清楚了,我只是记录一些我不明白的地方,并且记录几个理解sift特征比较好的博客。

1. http://aishack.in/tutorials/sift-scale-invariant-feature-transform-introduction/

2. http://blog.csdn.net/abcjennifer/article/details/7639681/

3.http://blog.csdn.net/xiaowei_cqu/article/details/8067881

4.https://en.wikipedia.org/wiki/Scale_space

5.http://blog.csdn.net/pi9nc/article/details/23302075

一、说到sift特征就不得不提什么是尺度空间(scale-space)

一个感观的认识就是人眼在看一个物体的时候远和近时,物体在视网膜上成像。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。在图像形成的过程中不可避免的会有将摄像头拉近或者拉远的操作,而这种操作带来的就是尺度的变化,这也是想寻找尺度不变特征的原因。

一个理论上的解释参考WIKI:The main type of scale space is the linear (Gaussian) scale space:

就是说尺度空间就是用不同参数t的高斯核去卷积图像得到的。我们可以从参考材料的1和4中可以看到模糊的例子,上面的t是方差,也就是下文将要说的sigma的平方。

二、尺度不变性

参考这个网址:http://dsp.stackexchange.com/questions/397/why-is-the-difference-of-gaussians-scale-space-scale-invariant?rq=1,对尺度不变性给出了一个简单的回答:

The term "scale-invariant" means the following here. Let's say you have image I, and you have detected a feature (aka an interest point) f at some location (x,y) and at some scale level s. Now let's say you have an image I', which is a scaled version of I (downsampled, for instance). Then, if your feature detector is scale-invariant, you should be able to detect the corresponding feature f' in I' at the corresponding location (x',y') and corresponding scale s', where (x, y, s) and (x', y', s')are related by the appropriate scaling transformation.

我的理解就是说如果你的图片I在尺度s下被检测出在(x,y)下具有特征点f,那么如果你有另一张在其他尺度s'下的图片I',如果你的特征检测器是尺度不变的话,你应该可以检测出对应的特征点f',位置于(x',y')使得(x,y,s)与(x',y',s')只差一个放缩变换。下面有一个我自己的理解,不一定正确,有时间我在看看尺度理论。假设在sigma尺度下找到的特征点为(x,y,sigma)则有下面这个等式成立,这里的sigma是方差:

如果另一张图片在另外一个尺度下,也就是将图片I进行模糊后,在求极值寻找特征点会有以下的式子(误,只是一种数学上的感觉):

(这里的t和一中的t不是同一个)我们用G(x,y,t)对图片I进行模糊得到另外一个尺度的图片,然后我们再用DOG对其进行卷积并在尺度sigma下求极值。根据卷积的结合律(可以参考WIKI:https://en.wikipedia.org/wiki/Convolution)就有上式第二行的结果,然后根据卷积的交换律有第三行的结果,然后t和sigma是独立的或者说t是常量所以从求导符号中提出来,然后根据上上式就会发现上上式求得的极值点也是另一个尺度图片下求得的极值点。用一篇论文的一个图片例子:

上图就发现在相对应的特征点是不同scale上的极值点。

三、为什么要用GOG(difference of Gaussian)去替换LOG(Laplancian of Gaussian)

根据这篇文章:http://www.scholarpedia.org/article/Scale_Invariant_Feature_Transform

也就是说Lindeberg在他的两篇关于blob detection论文中发现blob可以通过scale-normalized Laplacian检测出来,那么什么是尺度归一化的拉普拉斯呢?文章又给出了定义,就是上图的第一个公式(s是方差,也就是sigma的平方)。然后在sift中为什么不用尺度归一化的拉普拉斯变换来计算尺度不变的特征点呢?原因是他又发现DOG是LOG的一个近似,而且据说计算速度更快。是怎么证明DOG是LOG的近似呢?这里我来证明一下。这里有几个定义混淆了,我们先区分一下:

1. 拉普拉斯变换,对函数f(x,y)进行拉普拉斯变换就是求二阶偏导数相加:

2. Laplacian of Gaussian (LOG)

3. 尺度不变的拉普拉斯变换,根据上面文章第一个公式,由于卷积与导数的运算法则,可以知道尺度不变的拉普拉斯变换是:

4. Difference of Gaussian (DOG)

5. 二维的高斯分布,均值为0,方差为sigma平方

6. 证明DOG是LOG的一个近似,首先我们证明下面这个式子成立:

非常简单,只要你知道如何求高斯函数的导数就好了,等式右边的求导过程可以参考网址:http://fourier.eng.hmc.edu/e161/lectures/gradient/node8.html, 在这里我给一个简单的证明。

因此等式右边等于:

等式左边对sigma进行求导,求导过程非常简单,我就不打算记录很详细了:

因此我们左边等于右边,只需稍微化简一下。因此有下面这个成立:

因此DOG和尺度归一化的LOG只差一个常数因子(k-1)并不影响极值点位置的求取,见博客(blog.csdn.net/pi9nc/article/details/23302075)。整个近似就证明完毕(*)。

  上面只是说了一些我对尺度空间明白的地方,当然还有很多不明白的地方等我以后看懂了再回头记下,又回到sift特征,还有几个主题想记录一下。

四、我们在每座高斯金字塔中额外的新增了3层,为什么能够满足尺度变化的连续性。我觉得参考文章2中已经解释的很清楚,我直接转和复制一下,并且附上我自己手绘的一幅图便于理解:

暂时明白了这么多,以后再加,剩下的理解在源码中注释了,见另外的一篇博客

sift特征的更多相关文章

  1. SIFT特征详解

    1.SIFT概述 SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的.SIFT特征对旋转.尺度缩放.亮度变 ...

  2. opencv获取图片sift特征

    利用opencv2.3来获取图片的sift特征,并输出到标准输出,可用重定向到文件. #include<cstdio> #include"opencv2/opencv.hpp&q ...

  3. opencv java api提取图片sift特征

    opencv在2.4.4版本以后添加了对java的最新支持,可以利用java api了.下面就是我利用opencv的java api 提取图片的sift特征. import org.opencv.co ...

  4. [Computer Vision] SIFT特征学习笔记

    SIFT(Scale Invariant Feature Transform),尺度空间不变特征,目前手工设计的最好vision特征. 以下是学习http://blog.csdn.net/zddblo ...

  5. SIFT特征点检测学习一(转载)

    新手上路,先转载学习tornadomeet的博客:http://www.cnblogs.com/tornadomeet/archive/2012/08/16/2643168.html 特征点检测学习_ ...

  6. 基于SIFT特征的全景图像拼接

    基于SIFT特征的全景图像拼接 分类: image Machine learning2013-07-05 13:33 2554人阅读 评论(3) 收藏 举报 基于SIFT特征的全景图像拼接 分类: 计 ...

  7. 机器学习进阶-案例实战-图像全景拼接-书籍SIFT特征点连接 1.cv2.drawMatches(对两个图像的关键点进行连线操作)

    1.cv2.drawMatches(imageA, kpsA, imageB, kpsB, matches[:10], None, flags=2)  # 对两个图像关键点进行连线操作 参数说明:im ...

  8. OpenCV教程(47) sift特征和surf特征

         在前面三篇教程中的几种角检测方法,比如harris角检测,都是旋转无关的,即使我们转动图像,依然能检测出角的位置,但是图像缩放后,harris角检测可能会失效,比如下面的图像,图像放大之前可 ...

  9. 使用sift特征点进行knn最近邻匹配

    #include <opencv2/xfeatures2d/nonfree.hpp> #include <opencv2/features2d/features2d.hpp> ...

随机推荐

  1. ios UIWebView自定义Alert风格的弹框

    之前开发过一个App,因为公司之前写好了网页版的内容和安卓版本的App,我进去后老板要求我ios直接用网页的内容,而不需要自己再搭建框架.我一听,偷笑了,这不就是一个UIWebView吗?简单! 但是 ...

  2. Android开发学习—— 消息队列

    ###主线程不能被阻塞* 在Android中,主线程被阻塞会导致应用不能刷新ui界面,不能响应用户操作,用户体验将非常差* 主线程阻塞时间过长,系统会抛出ANR异常* ANR:Application ...

  3. iOS 性能调试

    性能调优的方式: 1.通过专门的性能调优工具 2.通过代码优化 1. 性能调优工具: 下面针对iOS的性能调优工具进行一个介绍: 1.1 静态分析工具–Analyze 相信iOS开发者在App进行Bu ...

  4. mac,/usr/local is not writable 解决方法

    mac,/usr/local is not writable 解决方法 mac 问题 今天在mac上装mongodb,发现提示权限不足问题,错误提示如下: mac安装mongodb错误提示.jpg 尝 ...

  5. 批处理bat 命令

    1.批处理常用符号: - echo 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置 语法:@echo [{ on|off }]  echo{"显示 ...

  6. Database first with EntityFramework (Migration)安装和升级

    最近看了国外几个项目,发现用EntityFramework做Code First的项目现在很流行. 最让我有兴趣的一个功能则是,EntityFramework对于数据库的安装和升级的无缝完美支持,且很 ...

  7. [问题]apparmor 问题导致mysql切换datadir目录失败

    问题: 在mysql切换datadir后,mysql服务无法启动.出现错误说plugin表无法读取,需要用mysql_upgrade创建.但是其实不是这个问题. 原因: apparmor 会限制程序对 ...

  8. centos7中没有安装ifconfig命令的解决方法

    初装centos 7时,运行config报 command not found 错误,我在网上找了大量资料,下面的资料中查找原因和解决方式最详细,能很好的解决这个问题. ifconfig命令是设置或显 ...

  9. 介绍几个好用的vs插件

    1.打开扩展管理器. 1.jsenhancement插件. 参考文章:http://www.cnblogs.com/dudu/archive/2011/02/27/vs2010_extension_J ...

  10. linux top命令结果参数详解

    非常详细的top结果说明文档. http://www.cnblogs.com/sbaicl/articles/2752068.html http://bbs.linuxtone.org/forum.p ...