`
v_JULY_v
  • 浏览: 69317 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

经典算法实现之一:教你一步一步用c语言实现sift算法、下

阅读更多

教你一步一步用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、二零一一年三月十二日声明。

分享到:
评论
2 楼 v_JULY_v 2011-03-14  
v_JULY_v 写道
晕死,怎么照片全死了...各位,有需要的话,还是看本人的CSDN博客吧。


ok,重新贴了下照片,可以了。
1 楼 v_JULY_v 2011-03-14  
晕死,怎么照片全死了...各位,有需要的话,还是看本人的CSDN博客吧。

相关推荐

    C语言实现SIFT算法(含C++.net代码)

    这个压缩包包含的资源是使用C语言实现的SIFT算法,同时也提供了C++和.NET的代码版本,方便在多种环境下应用。 SIFT算法的核心在于以下几个步骤: 1. **尺度空间极值检测**:SIFT算法首先通过高斯差分金字塔在多个...

    sift算法 C实现

    在不使用OpenCV、GSL等第三方库的情况下,我们需要从零开始实现SIFT算法。以下是一些关键的技术点: - **高斯函数计算**:利用C语言实现高斯函数,用于图像的卷积操作。 - **图像金字塔构建**:编写代码实现图像...

    sift算法 opencv c语言实现

    在这个项目中,我们将探讨如何使用OpenCV在C语言环境下实现SIFT算法。 首先,SIFT算法的核心在于其对图像尺度空间的构建。在处理图像时,SIFT首先通过高斯金字塔对图像进行多尺度分析,找出在不同尺度下都稳定的...

    用C语言实现的SIFT图像匹配算法

    这个压缩包包含的是一个使用C语言实现的SIFT算法,无需依赖GSL(GNU Scientific Library)库,使得代码更易于理解和部署。以下是对SIFT算法和C语言实现的详细解释: 1. **SIFT算法概述**: - **尺度空间极值检测**...

    sift算法c语言

    C语言实现的SIFT算法,尽管不如其他高级编程语言如Python或Java那样常见,但在某些特定场景下,比如嵌入式系统或者对效率有极高要求的环境中,仍然有其独特的价值。 SIFT算法主要分为以下几个步骤: 1. **尺度空间...

    基于SIFT特征全景图像拼接(C语言实现)

    在实际操作中,使用C语言实现SIFT算法可能需要集成OpenCV库,OpenCV提供了一些预编译的函数和数据结构,可以简化SIFT算法的实现过程。例如,OpenCV中的`xfeatures2d`模块包含了SIFT检测器和描述符的实现,可以方便地...

    SIFT算法实现C语言[收集].pdf

    总之,SIFT算法是计算机视觉领域中的基石之一,其C语言实现需要OpenCV库的支持。通过理解SIFT算法的原理和正确配置开发环境,开发者可以创建自己的图像处理应用,实现对图像的稳健特征检测和匹配。

    基于SIFT算法的图像拼接--C语言实现

    本项目是用C语言实现的SIFT算法,它包括了图像特征提取和基于这些特征的图像拼接功能,能够直接运行,为开发者提供了一个实用的工具。 1. SIFT算法详解: SIFT算法由David G. Lowe在1999年提出,主要分为四个步骤...

    SIFT的C语言实现

    在C语言实现SIFT算法时,我们需要关注以下几个关键步骤: 1. **尺度空间极值检测**:SIFT首先在不同尺度上寻找图像的局部最大值或最小值。通常使用高斯金字塔来构建尺度空间,通过对原始图像应用多尺度高斯模糊,...

    模式识别作业 用c语言实现sift算法.zip

    模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用项目...

    sift算法代码及实现

    SIFT算法代码及实现 在本文中,我们将对SIFT算法进行详细的介绍和实现,包括算法的原理、步骤和代码实现。SIFT算法是一种电脑视觉算法,用于侦测和描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其...

    纯C语言写的sift算法,亲测,可用,可以移植到linux,嵌入式

    移植完成后,这个纯C语言实现的SIFT算法可用于嵌入式设备上的图像处理任务,如机器人导航、图像识别或视觉检测,提供高效且稳定的特征匹配功能。对于嵌入式开发人员来说,这样的实现是宝贵的资源,因为它允许他们在...

    SIFT算法实现源代码

    SIFT(尺度不变特征变换)...总的来说,"SIFT算法实现源代码"这个资源为学习和应用SIFT算法提供了一个宝贵的起点,通过深入研究和实践,开发者可以更深入地理解这一经典视觉算法的工作原理,并将其应用于实际项目中。

    SIFT算法实现C语言.pdf

    根据提供的文件信息,我们...对于计划在C语言环境下实现或使用SIFT算法的开发者来说,这些信息非常重要,需要按照文档的指导去配置开发环境,解决可能出现的编译和链接错误,以及调整算法参数以适应不同的应用场景。

    pca—SIFT C语言

    PCA-SIFT(主成分分析-尺度不变特征变换)是一种在计算机视觉领域中用于图像匹配的高级技术...理解并掌握PCA-SIFT算法以及其C语言实现,对于进行图像处理和计算机视觉项目非常有帮助,可以提升图像匹配的效率和准确性。

    sift的linux下C语言源代码

    在学习这个源代码的过程中,你可以逐步理解SIFT算法如何在实际代码中实现,以及如何利用libpng库处理图像。这将有助于提升你的C语言编程技能,以及在Linux环境中开发图像处理软件的能力。通过阅读和理解源代码,你还...

    opencv249+C语言实现SIFT影像匹配

    OpenCV库是计算机视觉领域广泛使用的开源库,其中包含了对SIFT算法的支持。本项目是基于OpenCV 2.4.9版本,采用C语言实现SIFT影像匹配及特征提取的实践。 **一、SIFT特征提取** 1. **尺度空间极值检测**:SIFT算法...

    SIFT的演示代码(C语言)

    在这个名为"SIFT的演示代码(C语言)"的压缩包中,我们可以期待找到一个用C语言实现的SIFT算法示例。通常,这样的代码会包括以下组成部分: 1. **尺度空间构建**:SIFT算法首先通过高斯差分金字塔来构建尺度空间,以...

    sift算法的C源码(网上唯一原创版本,不基于opencv等)

    压缩包中的`sift_ex3`可能是一个示例程序或测试用例,用于演示如何使用这个C语言实现的SIFT算法。运行这个程序可以帮助你理解代码的运作流程,以及如何在实际应用中使用SIFT特征。 学习和理解SIFT算法的C源码,你...

Global site tag (gtag.js) - Google Analytics