原博客来自:http://blog.csdn.net/zddblog/article/details/7521424

定义:

尺度不变特征转化是一种计算机视觉算法,用于侦测和描述物体的局部性特征,在空间尺度中寻找极值点,这个点是关于大小,明暗,仿射变换稳定的,由David Lowe在1999年发表,2004年总结。

应用场景:

物体识别、机器人地图感知与导航、影像缝合、3d场景建立、手势识别、影像追踪、动作对比。

专利所属:

英属哥伦比亚大学。

简述:

局部影像特征的描述与侦测可以帮助识别物体,sift特征是基于物体上的一些局部外观的兴趣点而与影响的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。由于sift存在的这些特性,使得他们十分显著并且相对容易被撷取(采择精华)。在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用sift特征描述被部分遮挡的物体的准确率也相当高,最少只需要三个点就能确定物体的位置与方位。在先进的电脑硬件速度下和小型的特征数据库条件下,便是速度接近即时运算。sift特征的信息量大,适合在海量数据库中快速准确匹配。

sift算法的特点:

1、sift特征是图像的局部特征,它对旋转、大小缩放、亮度明暗保持不变性,对视角变化、放射变化、噪声也保持一定程度的稳定性;

2、独特性(Distinctiveness)好,信息量丰富,适合在海量特征数据库中进行快速准确地匹配。

3、多量性,即使少数几个物体也会产生大量的sift特征

4、高速性,经过优化的sift匹配算法甚至可以达到实时要求

5、可扩展性,可以很方便的与其他形式的特征向量联合。

sift算法可以解决的问题:

由于目标自身状态、场景所处的环境和城乡器材的城乡特性等因素会影响配准/目标识别跟踪的性能。而sift算法在一定程度上可以解决:

1、目标的旋转、缩放、平移(RST)

2、图像仿射/投影变换(视点viewpoint)

3、光照影响(illumination)

4、目标遮挡(occlusion)

5、杂物场景(clutter)

6、噪声

sift算法实质:

在不同尺度空间上查找关键点(特征点),并计算出关键点的方向。sift所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪声等因素而变化的点,如角点,边缘点,暗区的亮点及亮区的暗点等。

实现sift算法的步骤:

4步

1、尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。

2、关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选取则依据他们的稳定程度。

3、方向确定:基于图像局部的梯度方向,给每个位置的关键点一个或多个方向。所有后面对图像数据的操作都对图像进行方向、尺度、旋转的变换,从而提供针对于这些变换具有健壮性的特征点。

4、关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和明暗变化。

第一步:高斯模糊
概述。

sift算法是在不同的尺度空间上查找关键点,而尺度空间的获取需要使用搞死模糊来实现。【使用高斯卷积实现尺度变化。他们说这是唯一靠谱的方式。

来源:

http://ask.csdn.net/questions/157428

https://www.zhihu.com/question/23341785

记住它是唯一变换核儿好了。

先看 http://blog.csdn.net/zddblog/article/details/7521424

了解概况,然后看 http://bbs.csdn.net/topics/390340232  你发现已经能用上一篇文章的知识点回答一些这篇文章中网友的一些提问了。比如把2维高斯模糊采用分离的方式进行计算,会大幅提高运算速度。

然后这里有一个高斯模糊的完成版本:http://www.cnblogs.com/hoodlum1980/p/4528486.html

然后看看阮一峰先生的这个分享:

http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

看到0 3 10个像素的模糊我忽然想到了,或许尺度不变的缘由就在高斯模糊,记得把图像放大会失真么?对了!就是这里,如果一张已经确定的图片放在计算机上显示,不断放大,看到的东西会越来越接近像素点,那么,那么如果无论多少个像素的模糊都能提取到兴趣点,那么这个兴趣点是不是与缩放无关也就是大小不敏感的特征点。

【阮一峰先生这里有这样一句话:“如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。”跟李飞之前说的:“老师说有颜色的互相渗透,一个深色的葡萄酒瓶上面不可能只是深色,必然有灯光以及其他地方映到瓶子上的浅色,如果你这个视角后面是白色的墙,那么就应该把很少的白色点在瓶子上,同时白色的墙上也应该有深色瓶子的印记,并且两个色区越是靠的近这种渗透就要越多,如果越远渗透就越小。”来自:http://blog.csdn.net/bzdwdmzjsmff/article/details/51317430 第二个点像素部分的描述有了契合。】

看到某些东西总是不知道是什么,比如。其实我现在就是不知道是什么。解释是正态分布的标准差。并且我也知道越大图像越扁平,越小,图像越高瘦。可是对于某一张图片来说,要进行高斯模糊,这个是什么呢?

在opencv里面cvSmooth(img, out, CV_GAUSSIAN,1,31);

要指定,关于x的模糊和y的模糊,也就是说这个函数已经把2维高斯模糊变成了分离高斯模糊用以减小计算量。并且可以让图像完成对水平竖直两个维度的平滑。

哦哦哦,好想想清了,是指图像的偏离程度,我们以前学的只是,是说通常只要算左右3内的计算量,用以运算权重影响,也就是采用3结果比较不准确,但我们当时的学习其实计算到这个范围内就准了,如果是6的话,就可以保证相关像素的影响。但是如果我们取了10,准确率还会高,事实上如果包含了整个数轴的话,必然会符合真实的结果,但是这样做并不值得,因为没有必要,所以通常把这个在计算机图像处理程序中取到(6+1)*(6+1),3在左,1是它本身,3在右。可是的取值是什么来着?

具体的运算过程如:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html

中四五所描述的那样。灰图直接算,彩图就按rgb分别算。

1、可是还是不懂的取值是怎么得到的。

模糊部分就算是完成了,sigma的取值从0.6,到默认的1 【这里说默认是1.http://www.cnblogs.com/JohnShao/archive/2011/06/02/2067800.html】到10,好像多少都是可以的,可是 这个的取值有什么规范么?

所以第一大步就完成了,接下来,是关键点定位,方向确定,关键点描述。

第二大步:尺度空间极值检测

尺度空间使用高斯金字塔表示。Tony Linderberg指出尺度规范化的LoG(Laplacion of Gaussian)算子具有真正的尺度不变性,Lowe使用高斯差分金字塔近似LoG算子,在尺度空间检测稳定的关键点。【还不知道是啥意思】

3.1尺度空间理论

历史:

尺度空间理论的基本思想:

在图像信息处理模型中,引入一个被称为尺度的参数,

《sift算法详解》阅读笔记的更多相关文章

  1. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  2. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  3. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  4. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...

  5. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  6. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  7. element-ui Carousel 走马灯源码分析整理笔记(十一)

    Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  10. element-ui switch组件源码分析整理笔记(二)

    源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...

随机推荐

  1. redis的string类型

    string : string类型是二进制安全的, 可以包含任何数据,比如jpg图片或者序列化的对象 . 方法 : set : 设置key对应的值为string类型的value set  name   ...

  2. [cocos2d-x]File文件的IO读写处理

    转载:http://blog.csdn.net/chiuan/article/details/8618411 为了保存自定义数据文件,需要保存文件和读取文件,也就是File的IO处理: 针对cocos ...

  3. Linux使用locate命令定位文件

    FIND命令 很多Linux用户喜欢使用find命令来查找文件,例如他们通常喜欢这样做: find / -name 'pattern' 确实find的强大功能不仅仅用来查找文件,它能用来定位更加细节的 ...

  4. C# 中的sealed修饰符学习

    转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...

  5. 去掉 CONSOLE 窗口(转)

    建立一个win32 console application的话,linker的/subsystem选项应该为CONSOLE,可以在VC开发环境的project->setting->link ...

  6. Webstorm2016激活码[ 转]

    转至:http://blog.csdn.net/tingwode2014_/article/details/51063657 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QT ...

  7. libevent的使用方法--回显服务器的简单实例

    #include <event.h> #include <sys/types.h> #include <sys/socket.h> #include <net ...

  8. kaptcha验证码插件的使用

    kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.K ...

  9. 如何给word 文章的每段段尾添加 脚注

    新建一个宏,其代码如下 Sub 段尾加脚注() ' ' 段尾加脚注 宏 ' 'ActiveDocument.Paragraphs.Count返回文档的段落数 ' 定义一个整形变量numpara,来存储 ...

  10. cocos2d-x CCArray

    转自:http://blog.csdn.net/onerain88/article/details/8164210 1. CCArray只是提供了一个面向对象的封装类 其继承于CCObject类(CC ...