利用SURF算法进行散斑图案拼接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33810188/article/details/83350689

最近项目中需要将两个相机拍摄的散斑局部图拼接成一个完整的散斑图,特将实际项目中使用的特征点匹配和拼接算法记录如下,便于后续查阅。

----------------------------------------------------

基本概念

要对图像进行拼接,首先要进行图像特征匹配(找到图像的对应关系),而要进行图像特征匹配,首先要进行图像特征的检测,所以整个流程可以表示为:图像特征检测 ——> 图像特征匹配 ——> 图像拼接

目前特征检测主要有关键点检测、边缘检测、线检测、块检测等。由于散斑图中点特征较为明显,特以关键点作为图像特征检测对象。

主流的特征点检测算法有以下几类:

1.SIFT

Scale-Invariant Feature Transform尺度不变特征转化。该算法具备投影变换不变性(欧式变换不变性、尺度变换不变性...),且可以较好对抗噪声和遮挡影响,具有很高的特征点检测精度,但是算法实现较为繁琐,处理速度较慢。

2.SURF

Speed Up Robust Feature加速稳健特征。SURF是SIFT的升级版,主要是为了解决SIFT速度慢的缺点。

3.FAST

Feature from Accelerated Segment Test加速分割测试获取特征。该算法仅仅是特征点检测,不涉及特征描述,不具备欧式变换不变性和尺度变换不变性,但是该算法的检测速度超级快(名不虚传!)

4.ORB

Oriented BRIEF是FAST+BRIEF的组合体,结合了FAST检测和BRIEF特征描述子,具备较高的特征提取精度和效率!同时具备旋转不变性(BRIEF特点),且对噪声不敏感,但是任然不具备尺度变换不变性!

5.Harris

应用十分广泛的角点提取算法,通过图像梯度计算,根据卷积思想进行图像角点检测。

还有HOG、Haar、LBP等特征点检测算法。

----------------------------------------------------

源图像

----------------------------------------------------

匹配效果

结合散斑图特点,并考虑在线实时匹配要求,最开始考虑使用ORB进行散斑图的一系列处理,但是在实际的操作中发现其实现效果并不好(也许是算法本身欲速则不达,也许是本人参数设置不合理!),最后果断采用SURF算法,经过实际的散斑图案匹配测试,发现该算法实现效果明显,可以满足实际要求!

以下是用于匹配拼接的两幅散斑图(两个工业相机获取后并截取300*400区域):

利用SURF算法匹配后的效果图如下:

从匹配效果图中可以看出,图中的10对匹配点效果良好。需要说明的是,匹配点对数量较大,并且包含了大量误差匹配点对,为此从matchPoints中选取汉明距离最小的前10个值最为最终的匹配点对数据。后面进行散斑图案的拼接,可以利用这10个匹配点对计算拼接参数。通过不同的样本测试,这种方式的匹配效果非常稳定,可以进行后续的拼接。

----------------------------------------------------

拼接效果

拼接效果不错,看不出是两幅散斑图像拼接之后的结果(拼接的位置在中心暗区域靠右1/3处)。

需要说明的是,匹配采用中心区域的散斑图案(全图像进行匹配效率很低!),中心区域匹配成功之后,利用匹配点对建立左右散斑图的透视变换矩阵,之后校正右散斑图像,并将左散斑图像连接在校正后右图像的左边。

采用SURF算法进行2048*2448的两幅图像拼接,算法耗时控制在1s之内!整个拼接过程精度较高,效率也不错,后续对算法进行鲁邦性测试,以便满足实际的工程需求。

----------------------------------------------------

函数说明

SURF算法实现采用OpenCV库函数,主要如下:

特征点检测类:

cv::SurfFeatureDetector

特征点描述类:

cv::SurfDescriptorExtractor

特征点匹配:

cv::FlannBasedMatcher

最后在匹配点对集中挑选前10个匹配点对,并将其余的点对删除!

特征点匹配效果函数:

cv::drawMatches( )

透视变换函数:

cv::warPerspective( )

----------------------------------------------------

20181030增加:

针对优秀匹配点对仍然有匹配错误的情况,可以由以下方式避免:

1.对汉明距离进行严格管控;

2.对匹配点对连线斜率进行严格管控;

----------------------------------------------------

----------------------------------------------------

猜你喜欢

转载自blog.csdn.net/qq_33810188/article/details/83350689