Opencv下利用SIFT、SURF、ORB三种特征点实现图像匹配
本文介绍了SIFT、SURF、ORB三种特征点算法在视频项目中的应用。SIFT具有良好的不变性,但匹配效率较低;SURF在速度和鲁棒性上优于SIFT;ORB在速度上是SIFT的10倍,但尺度不变性效果较差。在视频项目中,三种算法用于图像匹配,其中改进方向包括特征点提取优化和匹配算法改进(如RANSAC剔除误匹配)。实验结果展示了三种算法的匹配效果,特别是在视频拼接中的应用前景。
Opencv下利用SIFT、SURF、ORB三种特征点实现图像匹配
在视频项目中,拼接操作被用作特征提取和匹配的基础步骤。为了记录和比较不同特征点的性能,本文选取了SIFT、SURF、ORB三种算法作为研究对象。本文不展开理论分析,仅通过OpenCV框架实现三种特征点匹配算法的对比验证。其中,改进部分的代码尚未发布。
新的下载地址:
在OpenCV框架下,基于SIFT、SURF、ORB三种特征点的图像匹配技术实现及其应用下载
环境设置:
本项目基于Windows 7 SP1平台,使用Visual Studio 2010进行开发,编译环境配置为OpenCV 2.4.9。
在代码的release版本下进行编译,编译后的工程release版本的.exe文件可以直接运行。
编译工程需要配置OpenCV,具体配置方式请参考OpenCV配置说明。
项目需要包含以下依赖库:
-
opencv_core249.lib
-
opencv_highgui249.lib
-
opencv_imgproc249.lib
-
opencv_features2d249.lib
-
opencv_nonfree249.lib
-
opencv_legacy249.lib
SIFT算法是一种用于图像处理的特征提取方法。SIFT特征能够有效识别图像中的局部特征,并且在平移、旋转、尺度缩放、亮度变化、遮挡和噪声等场景下表现出良好的不变性,同时保持一定的稳定性。SIFT算法的时间复杂度主要集中在描述子的建立和匹配阶段,因此如何优化特征点的描述方法是提升SIFT效率的关键。作者David Lowe的论文《Distinctive image features from scale-invariant keypoints》附带了演示代码,该论文深入介绍了SIFT算法的原理和应用。论文下载地址为:http://www.cs.ubc.ca/~lowe/keypoints/。此外,关于SIFT算法的讲解可以参考以下资源:
SURF算法相比SIFT,算法在速度和稳定性方面均表现出色。具体而言,其运行速度是SIFT的约3倍。在质量方面,SURF算法的鲁棒性较强,其特征点识别率显著高于SIFT。在视角、光照条件以及尺度变化等多方面,SURF的表现均优于SIFT。速动鲁棒特征(SURF)
ORB算法体系
三种特征点进行对比分析,包括以下几点:
1)ORBBach算法在尺度方面表现不佳;
2)ORBBach的运行速度是SIFT的3倍,是SURF的10倍;
3)SURF的鲁棒性表现更为出色。
具体可见这篇文章的性能对比分析:[链接]
衡量指标与改进方向
一般用于图像匹配或配置及拼接时,常有以下评估标准:
检测关键点数、检测耗时、匹配对数量、匹配耗时;误匹配对数;主观视觉效果。
优化策略:
在特征点提取环节,可对上述三种算法的特征点提取及描述方法进行改进。
在匹配环节,通常采用kd树搜索、双向匹配方法;在视频场景中,可在首帧进行匹配求解变换矩阵,在后续的k帧中持续使用该变换矩阵。通过RANSAC算法剔除误匹配对。
效果图:
简单使用:

匹配效果:
第一组:
SIFT:

SURF:

ORB:

第二组:
在提取特征点之后,仅采用OpenCV自带的BruteForceMatcher进行特征点匹配,并未进行误匹配点的剔除。即使在两幅完全不相关的图像之间,该匹配方法也会产生较多的误匹配点。所有情况下,采用上述三种算法进行特征点提取后,需要在匹配过程中进行改进。改进版将在下次进行介绍。
