关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

SIFT算法详解(附有完整代码)

发布时间:2023-06-26 16:00:09

说明:本文旨在给出 SIFT 算法的具体实现,而在 SIFT 详解上只是做出简单介绍,在这里可以给大家推荐一篇好文:https://blog.csdn.net/zddblog/article/details/7521424;结合这篇文章和下文的具体代码实现,我相信你能很快掌握并运用 SIFT 算法,加油哦!!!如有疑问大家可以一起讨论学习!!!


一、SIFT算法简介


    SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。该方法于1999年由David Lowe 首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整理完善后发表于International journal of computer vision(IJCV)。截止2014年8月,该论文单篇被引次数达25000余次。


1、SIFT算法的特点


(1) SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;


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


(3)多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;


(4)高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;


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


2、SIFT算法可以解决的问题


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


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


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


(3)光照影响(illumination)


(4)目标遮挡(occlusion)


(5)杂物场景(clutter)


(6)噪声


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


二、SIFT算法分为如下四步


1. 尺度空间极值检测


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


2. 关键点定位


        在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。


3. 方向确定


        基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。


4. 关键点描述


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


三、SIFT具体实现


说明:代码实现主要有七个源文件,我和大家一样有时候下载了好几个资源然而没有一个能用的,导致最后都不知道要下载哪一个、是否要下载;所以这里直接把代码贴出来了!


1、mySift.h

因涉及一些执行语句,禁止写入,请联系客服获取

   


2、mySift.cpp


因涉及一些执行语句,禁止写入,请联系客服获取

   


3、 myMatch.h


因涉及一些执行语句,禁止写入,请联系客服获取

   


4、 myMatch.cpp


因涉及一些执行语句,禁止写入,请联系客服获取



5、 myDisplay.h

因涉及一些执行语句,禁止写入,请联系客服获取


6、 myDisplay.cpp


因涉及一些执行语句,禁止写入,请联系客服获取

 


7、 main.cpp


因涉及一些执行语句,禁止写入,请联系客服获取


四、SIFT 算法实验结果


1、实验数据


说明:该数据是从网上下载的两个时相影像,左侧为旧时相影像,右侧为新时相影像; 


2、实验结果 


(1)特征点检测结果



(2)最终匹配结果



(3)配准效果 


说明:把两张图像交叉重叠在一起,可以观察其配准效果; 


 五、配置说明


        该结果是在 VS2019 + opencv4.4.0 + Debug x64 环境下跑出来的;

  如果感觉复制麻烦,完整工程见:SIFT算法C++代码实现-C/C++文档类资源-CSDN下载


/template/Home/leiyu/PC/Static