sift特征
已经有很多博客已经将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特征的更多相关文章
- SIFT特征详解
1.SIFT概述 SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的.SIFT特征对旋转.尺度缩放.亮度变 ...
- opencv获取图片sift特征
利用opencv2.3来获取图片的sift特征,并输出到标准输出,可用重定向到文件. #include<cstdio> #include"opencv2/opencv.hpp&q ...
- opencv java api提取图片sift特征
opencv在2.4.4版本以后添加了对java的最新支持,可以利用java api了.下面就是我利用opencv的java api 提取图片的sift特征. import org.opencv.co ...
- [Computer Vision] SIFT特征学习笔记
SIFT(Scale Invariant Feature Transform),尺度空间不变特征,目前手工设计的最好vision特征. 以下是学习http://blog.csdn.net/zddblo ...
- SIFT特征点检测学习一(转载)
新手上路,先转载学习tornadomeet的博客:http://www.cnblogs.com/tornadomeet/archive/2012/08/16/2643168.html 特征点检测学习_ ...
- 基于SIFT特征的全景图像拼接
基于SIFT特征的全景图像拼接 分类: image Machine learning2013-07-05 13:33 2554人阅读 评论(3) 收藏 举报 基于SIFT特征的全景图像拼接 分类: 计 ...
- 机器学习进阶-案例实战-图像全景拼接-书籍SIFT特征点连接 1.cv2.drawMatches(对两个图像的关键点进行连线操作)
1.cv2.drawMatches(imageA, kpsA, imageB, kpsB, matches[:10], None, flags=2) # 对两个图像关键点进行连线操作 参数说明:im ...
- OpenCV教程(47) sift特征和surf特征
在前面三篇教程中的几种角检测方法,比如harris角检测,都是旋转无关的,即使我们转动图像,依然能检测出角的位置,但是图像缩放后,harris角检测可能会失效,比如下面的图像,图像放大之前可 ...
- 使用sift特征点进行knn最近邻匹配
#include <opencv2/xfeatures2d/nonfree.hpp> #include <opencv2/features2d/features2d.hpp> ...
随机推荐
- android基于口令加密快速搞懂(一)
import java.util.Random; import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypt ...
- Git 少用 Pull 多用 Fetch 和 Merge
本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让它更短些.在Git的邮件列表里有很多关于本文的讨论,我会尽量把其中相关的观点列在下面. 我最常 ...
- 关于在安装MySQL时报错"本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止"的解决方法
首先将你下载的MySQL安装或者解压(对应安装版和解压版),下载地址http://dev.mysql.com/downloads/mysql/ 然后复制你安装目录中的my-default.ini,更改 ...
- JavaScript基本知识
如何把 JavaScript 放入 HTML 页面 如果需要把一段 JavaScript 插入 HTML 页面,我们需要使用 <script> 标签(同时使用 type 属性来定义脚本语言 ...
- 前端小菜鸟的Mobile之旅---开篇
背景:前段时间有幸参与了公司一个基于H5的手机APP项目,(我们用的React+ES6+Webpack+Cordova开发),由此开始接触一些关于H5开发手机APP方面的知识,下面Shar ...
- JAVA中整型的存储和左右移位运算
byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...
- JAVA基础知识xml,date
虽然说看文档最好是看官方原来的文档,但是呢,下面是我看别的人的总结,算做抛砖引玉吧,如果有不对的,我会在后期给更正或者自己来写一篇 1,JAVA中对xml的操作,包括schema,dtd等相关知识:标 ...
- C# 7.0 新功能代码范例
随着新版本的IDE Visual Studio 15 紧锣密鼓的开发中,2016年8月24日,微软发布了与之配套的C# 7.0 preview 的新特性. 其主要特性有: 内联声明out变量 (Out ...
- css一些进入条
http://www.jq22.com/jquery-info5309 http://www.jq22.com/jquery-info10964 http://www.jq22.com/jquery- ...
- Ubuntu上基于开源代码PhoneMe的J2ME环境搭建及使用
测试环境:Ubuntu 14.04.5 LTS J2ME背景知识及PhoneME介绍 J2ME相关介绍 在正式开始介绍J2ME之前,这里我列出一些常见名词,方便与下文参照:J2ME(Java2 Pla ...