《sift算法详解》阅读笔记
原博客来自: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尺度空间理论
历史:
尺度空间理论的基本思想:
在图像信息处理模型中,引入一个被称为尺度的参数,