`
v_JULY_v
  • 浏览: 69311 次
  • 性别: 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、二零一一年三月十二日声明。

分享到:
评论

相关推荐

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

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

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

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

    sift算法 C实现

    ### SIFT算法C语言实现详解 #### 一、引言 在深入了解SIFT算法之前,我们先回顾一下该算法的基本概念及其应用场景。SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种广泛应用于计算机视觉领域...

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

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

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

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

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

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

    sift算法 opencv c语言实现

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

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

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

    sift算法c语言

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

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

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

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

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

    SIFT的C语言实现

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

    sift算法代码及实现

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

    SIFT算法实现源代码

    在给定的压缩包文件"opensift"中,我们可以期待找到一个开源的C语言实现SIFT算法的项目。这个项目由俄亥俄州立大学的robhess在GitHub上维护,这意味着它可能是一个经过社区验证和不断更新的代码库,能够帮助开发者...

    SIFT算法实现C语言.pdf

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

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

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

    sift特征匹配_纯c语言实现

    这个项目提供了纯C语言实现的SIFT特征匹配代码,特别强调不依赖于OpenCV库,这对于理解SIFT算法的基本原理和实现过程非常有帮助。 SIFT特征匹配的核心在于以下几个步骤: 1. **尺度空间极值检测**:SIFT算法首先在...

    pca—SIFT C语言

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

    基于Opencv的sift算法

    本篇文章将深入探讨SIFT算法的原理、实现步骤以及如何在OpenCV中使用C语言进行编程。 1. **SIFT算法的基本概念** - **尺度空间**:SIFT算法首先在不同尺度上构建高斯金字塔,以处理图像中的尺度变化。 - **关键点...

    SIFT算法 C实现

    SIFT算法的C语言实现 只要OPENCV配置正确,保证可以运行

Global site tag (gtag.js) - Google Analytics