一、SIFT介绍
1.1 SIFT(尺度不变特征变换)原理
SIFT包括兴趣点检测器和描述子。SIFT描述子具有非常强的稳健性,经常和许多不同的兴趣点检测器结合使用。SIFT特征对于尺度,旋转和亮度都具有不变性,因此,它可用于三维视角和噪声的可靠匹配。
SIFT 描述子h(x, y,θ)是对特征点附近邻域内高斯图像梯度统计结果的一种表示,它是一个三维的阵列,但通常将它表示成一个矢量。矢量是通过对三维阵列按一定规律进行排列得到的。特征描述子与特征点所在的尺度有关,因此,对梯度的求取应在特征点对应的高斯图像上进行。
1.2 SIFT算法的实现步骤
构建尺度空间,检测极值点,获得尺度不变性;
特征点过滤并进行精确定位,剔除不稳定的特征点;
在特征点处提取特征描述符,为特征点分配方向值;
生成特征描述子,利用特征描述符寻找匹配点;
计算变换参数。
1.3 SIFT算法的数学表达
确定描述子采样区域
SIFI 描述子h(x, y,θ)是对特征点附近邻域内高斯图像梯度统计结果的一种表示。将特征点附近邻域划分成BpX Bp个子区域,每个子区域的尺寸为mσ个像元,其中,m=3,Bp=4。σ为特征点的尺度值。考虑到实际计算时,需要采用双线性插值,计算的图像区域为mσ(Bp+ 1)。如果再考虑旋转的因素,那么,实际计算的图像区域应大mσ(Bp+ 1)√2。
生成描述子
2.1 旋转图像至主方向
为了保证特征矢量具有旋转不变性,需要以特征点为中心,将特征点附近邻域内(mσ(Bp+ 1)√2 x mσ(Bp+ 1)√2)图像梯度的位置和方向旋转一个方向角θ,即将原图像x轴转到与主方向相同的方向。旋转公式如下:
在特征点附近邻域图像梯度的位置和方向旋转后,再以特征点为中心,在旋转后的图像中取一个mσBp x mσBp大小的图像区域。并将它等间隔划分成Bp X Bp个子区域,每个间隔为mσ像元。
2.2 生成特征向量
在每子区域内计算8个方向的梯度方向直方图,绘制每个梯度方向的累加值,形成一个种子点。与求特征点主方向时有所不同,此时,每个子区域的梯度方向直方图将0° -360°划分为8个方向范围,每个范围为45°,这样,每个种子点共有8个方向的梯度强度信息。由于存在4X4(Bp X Bp)个子区域,所以,共有4X4X8=128个数据,最终形成128维的SIFT特征矢量。
3.归一化特征向量
为了去除光照变化的影响,需对上述生成的特征向量进行归一化处理,在归一化处理后,对特征矢量大于α的要进行截断处理,即大于α的值只取α,然后重新进行一次归一化处理,其目的是为了提高鉴别性
二、实验结果及分析
SIFT特征提取
起初选取15张图片作为数据集,但因各种原因导致像素不同无法运行,后加入数张其他图片,最终数据集总量为20张
1.结果及代码展示
2.结果分析
1)SIFT特征提取和检测算法提取到的特征点明显多于Harris角点检测,由于在一定程度上增加了图像的特征点,从后续的特征匹配的工作角度上考虑可知:SIFT算法明显优于Harris算法。在一定程度上这体现了SIFT特征提取与检测算法的优越性。
2) 从时间效率上来分析,SIFT特征提取和检测消耗了大量的时间,对于一些特征点丰富且像素点较多的图像的检测时间多达5分钟左右,但其提取特征的准确性不可忽略,大可忽略其时间效率影响。可进行进一步分析,对SIFT算法进行简单优化。
SIFT特征匹配
1.结果及代码展示
以1.jpg这张图片作为匹配图
匹配结果如下
2.结果分析
1)匹配的时候通过把每张图的特征向量表示出来,然后找到特征向量重合度最高的图片。一开始运行速度很慢,后压缩图片格式,将图片大小减小为200kb左右,运行速度有了显著提升。
三、总结
1.图片可能由横屏或是竖屏拍摄存在尺寸上的差异,可是该算法只能对尺寸相同图片进行匹配,可通过裁剪或者再截图使其化为相同尺寸。
2.SIFT算法比起Harris算法,提取图像的特征点更加准确全面精准,更具有稳健性,效果上比起Harris算法更好。但是SIFT算法的运行速度相对来说慢很多。
3.SIFT算法匹配出的特征点多,即使两张图大小不一样、角度不一致也不会影响匹配结果,具有准确性和稳定性。
4.SIFT算法的可扩展性强,可以很方便的与其他形式的特征向量进行联合。
原文:https://www.cnblogs.com/zzb123456789/p/12442407.html