引言: 在我写的关于sift算法的前倆篇文章里头,已经对sift算法有了初步的介绍:九、图像特征提取与匹配之 SIFT算法,而后在:九(续)、sift算法的编译与实现里,我也简单记录下了如何利用 opencv,gsl等库编译运行 sift程序
但据一朋友表示,是否能用 c语言实现 sift算法,同时,尽量不用到 opencv,gsl等第三方库之类的东西
而且,Rob Hess维护的sift 库,也不好懂,有的人根本搞不懂是怎么一回事
那么本文,就教你如何利用 c语言一步一步实现 sift算法,同时,你也就能真正明白 sift算法到底是怎么一回事了
ok,先看一下,本程序最终运行的效果图,sift 算法分为五个步骤(下文详述),对应以下第二 --第六幅图: sift算法的步骤 要实现一个算法,首先要完全理解这个算法的原理或思想
咱们先来简单了解下,什么叫sift算法: sift,尺度不变特征转换,是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe 在1999年所发表,2004年完善总结
所谓,Sift算法就是用不同尺度(标准差)的高斯函数对图像进行平滑,然后比较平滑后图像的差别, 差别大的像素就是特征明显的点
以下是sift算法的五个步骤: 一、建立图像尺度空间(或高斯金字塔),并检测极值点 首先建立尺度空间,要使得图像具有尺度空间不变形,就要建立尺度空间,sift算法采用了高斯函数来建立尺度空间,高斯函数公式为: G(x,y,e) = [1/2*pi*e^2] * exp[ -(x^2 + y^2)/2e^2] 上述公式 G(x,y,e),即为尺度可变高斯函数
而,一个图像的尺度空间L(x,y,e) ,定义为原始图像I(x,y)与上述的一个可变尺度的2维高斯函数G(x,