【VC++开源代码栏目提醒】:网学会员VC++开源代码为您提供sift算法 - 技术总结参考,解决您在sift算法 - 技术总结学习中工作中的难题,参考学习。
尺度不变特征转换Scale-invariant feature transform 或 SIFT是一种电脑视觉的算法用来侦测与描述影像中的局部性特征它在空间尺度中寻找极值点并提取出其位置、尺度、旋转不变量此算法由 David Lowe 在1999年所发表2004年完善总结。
Sift算法就是用不同尺度标准差的高斯函数对图像进行平滑然后比较平滑后图像的差别差别大的像素就是特征明显的点。
一、Sift算法的步骤 SiftScale Invariant Feature Transform是一个很好的图像匹配算法同时能处理亮度、平移、旋转、尺度的变化利用特征点来提取特征描述符最后在特征描述符之间寻找匹配。
该算法主要包括5个步骤进行匹配 1、构建尺度空间检测极值点获得尺度不变性 2、特征点过滤并进行精确定位剔除不稳定的特征点 3、在特征点处提取特征描述符为特征点分配方向值 4、生成特征描述子利用特征描述符寻找匹配点 以特征点为中心取1616的邻域作为采样窗口将采样点与特征点的相对方向通过高斯加权后归入包含8个bin的方向直方图最后获得448的128维特征描述子。
示意图如下 5、计算变换参数。
当两幅图像的Sift特征向量生成以后下一步就可以采用关键点特征向量的欧式距离来作为两幅图像中 关键点的相似性判定度量。
取图1的某个关键点通过遍历找到图像2中的距离最近的两个关键点。
在这两个关键点中如果次近距离除以最近距离小于某个阙值则判定为一对匹配点。
最后看下Sift 算法效果图 下图左边部分Sift算法匹配结果右边部分是其它算法匹配结果 二、Sift算法的描述 在上述的Sift算法步骤一中提到了尺度空间那么什么是尺度和尺度空间呢 尺度就是受delta这个参数控制的表示。
而不同的Lxydelta就构成了尺度空间实际上具体计算的时候即使连续的高斯函数都要被离散为一般为奇数大小2k1 2k1矩阵来和数字图像进行卷积运算。
David Lowe关于Sfit算法2004年发表在Int. Journal of Computer Vision的经典论文中 对尺度空间scal space是这样定义的 It has been shown by Koenderink 1984 and Lindeberg 1994 that under a variety of reasonable assumptions the only possible scale-space kernel is the Gaussian function. Thereforethe scale space of an image is defined as a function Lx y delta that is produced from the convolution of a variable-scale Gaussian Gx y delta with an input image Ix y: 因此 一个图像的尺度空间Lxydelta 定义为原始图像I xy与一个可变尺度的2维高斯函数Gxydelta 卷积运算。
即原始影像Ixy在不同的尺度e下与高斯滤波器Gxye进行卷积得到Lxye如下 Lxye GxyeIxy 其中Gxye是尺度可变高斯函数 Gxye 1/2pie2 exp -x2 y2/2e2 xy是空间坐标 e是尺度坐标。
为了更有效的在尺度空间检测到稳定的关键点提出了高斯差分尺度空间DOG scale-space。
利用不同尺度的高斯差分核与原始图像Ixy 卷积生成。
Dxye Gxyke - Gxye Ixy Lxyke - Lxye DOG算子计算简单是尺度归一化的LoG算子的近似。
Gaussian卷积是有尺寸大小的使用同一尺寸的滤波器对两幅包含有不同尺寸的同一物体的图像求局部最值将有可能出现一方求得最值而另一方却没有的情况但是容易知道假如物体的尺寸都一致的话它们的局部最值将会相同。
SIFT的精妙之处在于采用图像金字塔的方法解决这一问题我们可以把两幅图像想象成是连续的分别以它们作为底面作四棱锥就像金字塔那么每一个 截面与原图像相似那么两个金字塔中必然会有包含大小一致的物体的无穷个截面但应用只能是离散的所以我们只能构造有限层层数越多当然越好但处理时 间会相应增加层数太少不行因为向下采样的截面中可能找不到尺寸大小一致的两个物体的图像。
有了图像金字塔就可以对每一层求出局部最值但是这样的稳定 点数目将会十分可观所以需要使用某种方法抑制去除一部分点但又使得同一尺度下的稳定点得以保存 图像金字塔的构建图像金字塔共O组每组有S层下一组的图像由上一组图像降采样得到。
如