教你一步一步用c语言实现sift算法、下
作者:July、二零一一年三月十二日
出处:http://blog.csdn.net/v_JULY_v。
参考:Rob Hess维护的sift 库
环境:windows xp+vc6.0
条件:c语言实现。
说明:本BLOG内会陆续一一实现所有经典算法。
------------------------
本文接上,教你一步一步用c语言实现sift算法、上,而来:
函数编写
ok,接上文,咱们一个一个的来编写main函数中所涉及到所有函数,这也是本文的关键部分:
五个步骤
ok,接下来,进入重点部分,咱们依据上文介绍的sift算法的几个步骤,来一一实现这些函数。
为了版述清晰,再贴一下,主函数,顺便再加强下对sift 算法的五个步骤的认识:
1、SIFT算法第一步:图像预处理
CvMat *ScaleInitImage(CvMat * im) ; //金字塔初始化
2、SIFT算法第二步:建立高斯金字塔函数
ImageOctaves* BuildGaussianOctaves(CvMat * image) ; //建立高斯金字塔
3、SIFT算法第三步:特征点位置检测,最后确定特征点的位置
int DetectKeypoint(int numoctaves, ImageOctaves *GaussianPyr);
4、SIFT算法第四步:计算高斯图像的梯度方向和幅值,计算各个特征点的主方向
void ComputeGrad_DirecandMag(int numoctaves, ImageOctaves *GaussianPyr);
5、SIFT算法第五步:抽取各个特征点处的特征描述字
void ExtractFeatureDescriptors(int numoctaves, ImageOctaves *GaussianPyr);
ok,接下来一一具体实现这几个函数:
SIFT算法第一步
SIFT算法第一步:扩大图像,预滤波剔除噪声,得到金字塔的最底层-第一阶的第一层:
SIFT算法第二步
SIFT第二步,建立Gaussian金字塔,给定金字塔第一阶第一层图像后,计算高斯金字塔其他尺度图像,
每一阶的数目由变量SCALESPEROCTAVE决定,给定一个基本图像,计算它的高斯金字塔图像,返回外部向量是阶梯指针,内部向量是每一个阶梯内部的不同尺度图像。
SIFT算法第三步
SIFT算法第三步,特征点位置检测,最后确定特征点的位置检测DOG金字塔中的局部最大值,找到之后,还要经过两个检验才能确认为特征点:一是它必须有明显的差异,二是他不应该是边缘点,(也就是说,在极值点处的主曲率比应该小于某一个阈值)。
SIFT算法第四步
SIFT算法第五步
SIFT算法第五步:抽取各个特征点处的特征描述字,确定特征点的描述字。描述字是Patch网格内梯度方向的描述,旋转网格到主方向,插值得到网格处梯度值。
一个特征点可以用2*2*8=32维的向量,也可以用4*4*8=128维的向量更精确的进行描述。
ok,为了版述清晰,再贴一下上文所述的主函数(注,上文已贴出,此是为了版述清晰,重复造轮):
最后,再看一下,运行效果(图中美女为老乡+朋友,何姐08年照):
完。
版权声明:
1、本文版权归本人和CSDN共同拥有。转载,请注明出处及作者本人。
2、版权侵犯者,无论任何人,任何网站,1、永久追踪,2、永久谴责,3、永久追究法律责任的权利。
July、二零一一年三月十二日声明。
分享到:
相关推荐
这个压缩包包含的资源是使用C语言实现的SIFT算法,同时也提供了C++和.NET的代码版本,方便在多种环境下应用。 SIFT算法的核心在于以下几个步骤: 1. **尺度空间极值检测**:SIFT算法首先通过高斯差分金字塔在多个...
模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用项目...
### SIFT算法C语言实现详解 #### 一、引言 在深入了解SIFT算法之前,我们先回顾一下该算法的基本概念及其应用场景。SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种广泛应用于计算机视觉领域...
这个压缩包包含的是一个使用C语言实现的SIFT算法,无需依赖GSL(GNU Scientific Library)库,使得代码更易于理解和部署。以下是对SIFT算法和C语言实现的详细解释: 1. **SIFT算法概述**: - **尺度空间极值检测**...
在实际操作中,使用C语言实现SIFT算法可能需要集成OpenCV库,OpenCV提供了一些预编译的函数和数据结构,可以简化SIFT算法的实现过程。例如,OpenCV中的`xfeatures2d`模块包含了SIFT检测器和描述符的实现,可以方便地...
移植完成后,这个纯C语言实现的SIFT算法可用于嵌入式设备上的图像处理任务,如机器人导航、图像识别或视觉检测,提供高效且稳定的特征匹配功能。对于嵌入式开发人员来说,这样的实现是宝贵的资源,因为它允许他们在...
在这个项目中,我们将探讨如何使用OpenCV在C语言环境下实现SIFT算法。 首先,SIFT算法的核心在于其对图像尺度空间的构建。在处理图像时,SIFT首先通过高斯金字塔对图像进行多尺度分析,找出在不同尺度下都稳定的...
本项目是用C语言实现的SIFT算法,它包括了图像特征提取和基于这些特征的图像拼接功能,能够直接运行,为开发者提供了一个实用的工具。 1. SIFT算法详解: SIFT算法由David G. Lowe在1999年提出,主要分为四个步骤...
C语言实现的SIFT算法,尽管不如其他高级编程语言如Python或Java那样常见,但在某些特定场景下,比如嵌入式系统或者对效率有极高要求的环境中,仍然有其独特的价值。 SIFT算法主要分为以下几个步骤: 1. **尺度空间...
总之,SIFT算法是计算机视觉领域中的基石之一,其C语言实现需要OpenCV库的支持。通过理解SIFT算法的原理和正确配置开发环境,开发者可以创建自己的图像处理应用,实现对图像的稳健特征检测和匹配。
OpenCV库是计算机视觉领域广泛使用的开源库,其中包含了对SIFT算法的支持。本项目是基于OpenCV 2.4.9版本,采用C语言实现SIFT影像匹配及特征提取的实践。 **一、SIFT特征提取** 1. **尺度空间极值检测**:SIFT算法...
在C语言实现SIFT算法时,我们需要关注以下几个关键步骤: 1. **尺度空间极值检测**:SIFT首先在不同尺度上寻找图像的局部最大值或最小值。通常使用高斯金字塔来构建尺度空间,通过对原始图像应用多尺度高斯模糊,...
SIFT算法代码及实现 在本文中,我们将对SIFT算法进行详细的介绍和实现,包括算法的原理、步骤和代码实现。SIFT算法是一种电脑视觉算法,用于侦测和描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其...
在给定的压缩包文件"opensift"中,我们可以期待找到一个开源的C语言实现SIFT算法的项目。这个项目由俄亥俄州立大学的robhess在GitHub上维护,这意味着它可能是一个经过社区验证和不断更新的代码库,能够帮助开发者...
根据提供的文件信息,我们...对于计划在C语言环境下实现或使用SIFT算法的开发者来说,这些信息非常重要,需要按照文档的指导去配置开发环境,解决可能出现的编译和链接错误,以及调整算法参数以适应不同的应用场景。
压缩包中的`sift_ex3`可能是一个示例程序或测试用例,用于演示如何使用这个C语言实现的SIFT算法。运行这个程序可以帮助你理解代码的运作流程,以及如何在实际应用中使用SIFT特征。 学习和理解SIFT算法的C源码,你...
这个项目提供了纯C语言实现的SIFT特征匹配代码,特别强调不依赖于OpenCV库,这对于理解SIFT算法的基本原理和实现过程非常有帮助。 SIFT特征匹配的核心在于以下几个步骤: 1. **尺度空间极值检测**:SIFT算法首先在...
PCA-SIFT(主成分分析-尺度不变特征变换)是一种在计算机视觉领域中用于图像匹配的高级技术...理解并掌握PCA-SIFT算法以及其C语言实现,对于进行图像处理和计算机视觉项目非常有帮助,可以提升图像匹配的效率和准确性。
本篇文章将深入探讨SIFT算法的原理、实现步骤以及如何在OpenCV中使用C语言进行编程。 1. **SIFT算法的基本概念** - **尺度空间**:SIFT算法首先在不同尺度上构建高斯金字塔,以处理图像中的尺度变化。 - **关键点...
SIFT算法的C语言实现 只要OPENCV配置正确,保证可以运行