教你一步一步用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特征匹配算法,不用配置GSL库,会C语言的人都能看懂,SIFT的函数用C语言重新实现,每一步SIFT步骤都有图像输出演示,很好的东东!
在对sift算法有了初步的了解后,有人表示,是否能用c语言实现sift算法,同时,尽量不用到opencv,gsl等第... 那么本文,就教你如何利用c语言一步一步实现sift算法,同时,你也就能真正明白sift算法到底是怎么一回事了。
sift算法 opencv c语言实现 图像匹配 优点:角度,亮度,运动不会影响
SIFT算法实现C语言[收集].pdf
模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用c语言实现sift算法.zip模式识别作业 用项目...
基于C语言实现的SIFT算法,实现SIFT图像特征提取,以及基于SIFT的图像拼接。能直接运行
SIFT算法实现C语言.pdf
本原码是用C语言实现的SIFT算法,可以提取SIFT特征和利用SIFT特征进行图像拼接和全景图构造,只需进行一些简单的OPENCV配置,就可以顺利运行。
用c语言写的sift算法。需要装上opencv才能打开
对于图片特征描述符SIFT的C代码实现,带匹配算法,可显示
C语言写的sift算法,亲测,可用,可以移植到linux,嵌入式
用c语言实现sift算法,我认为比较好,希望对大家有用。-sift arithmetic
SIFT算法的C语言实现 只要OPENCV配置正确,保证可以运行
SIFT 算法,代码 非matlab源码
改代码是由Rob Hess编写的最新的版本。关于SIFT的c语言代码。运行速度快。算法流程清晰。
九(再续)、教你一步一步用c语言实现sift算法、下 九(三续):SIFT算法的应用--目标识别之Bag-of-words模型 十、从头到尾彻底理解傅里叶变换算法、上 十、从头到尾彻底理解傅里叶变换算法、下 十一、从头到尾彻底...
C语言实现SIFT算法 亲测可用要实现一个算法,首先要完全理解这个算法的原理或思想 sift,尺度不变特征转换,是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、...
sift算法可执行代码,环境为OPENCV2.2.0和C语言。
Opencv249+C语言实现sift影像匹配、特征提取,武大数字摄影测量编程实习,内部包含可执行打包文件,可直接使用,也有源码。