最近这些日子,我在中科院实习了一段时间,收获了很多宝贵的知识和经验,也认识了一些朋友,在这里感谢老师们对我的指导和建议。作为一名图像处理专业的数学Geek,我很喜欢做关于图像方面的算法研究,在这里把近几年的角点特征匹配方法做个总结,和大家分享一下。
图像匹配能够应用的场合非常多,如目标跟踪,检测,识别,图像拼接等,而图像匹配最核心的技术就要属角点匹配了,所谓角点匹配是指寻找两幅图像之间的特征像素点的对应关系,从而确定两幅图像的位置关系。
角点匹配可以分为以下四个步骤:
1.提取检测子:在两张待匹配的图像中寻找那些最容易识别的像素点(角点),比如纹理丰富的物体边缘点等。
2.提取描述子:对于检测出的角点,用一些数学上的特征对其进行描述,如梯度直方图,局部随机二值特征等。
检测子和描述子的常用提取方法有:sift, harris, surf, fast, agast, brisk, freak, brisk,orb等。
3.匹配:通过各个角点的描述子来判断它们在两张图像中的对应关系。常用方法如 flann
4.去外点:去除错误匹配的外点,保留正确的内点。常用方法有Ransac, GTM。
我对上述这些常用的检测子和描述子的性能和速度做了一个测试,以找出其中性价比最好的组合(不考虑后两步)
图一
图二
上面两幅图是对上述部分检测子与描述子进行测试的结果。
其中图一和图二的x坐标表示不同的检测子与描述子的组合,从1到30分别对应
(surf、agast、brisk、fast、sift、orb)检测子与 (brisk、agast、surf、sift、orb)描述子的线性组合,如第四组表示surf检测子+sift描述子的组合。
图一和图二的y坐标表示一系列测试图片组,每组由两张图组成,这些图片都是质量较低的卫星地图,约2000*2000像素,每组的两张图片是由不同卫星对地面上同一地区进行拍摄的。它们之间的关系可能包含旋转,缩放,仿射变换,亮度变化,模糊,噪音等。从1到11的测试图片组大概对应着以下变换关系:
1.强烈亮度变化
2.旋转
3.仿射变换+尺度变化+旋转
4.仿射变换+亮度变化+旋转
5.仿射变换+噪音
6.模糊+亮度变化
7.旋转+噪音
8.旋转+尺度变化
9.亮度变化+旋转+模糊+噪音
10. 亮度变化+旋转+尺度变化
11. 亮度变化+旋转+尺度变化+强烈噪音。
图一的z坐标表示成功匹配的像素对的个数。图二的z坐标表示所需计算时间。
从测试结果来看,orb检测子与surf描述子配合的效果是最好的,不过速度也是最慢的。古老的sift和surf依然好用,速度也还是那么不给力。在不考虑旋转和仿射变换的情况下,fast是很不错的选择,在小幅旋转(20度内)的情况下,fast也还是有一定的容错能力的。在旋转变化和尺度变化方面,各家武功相差不多,虽然在理论上sift支持旋转变化,不过测试中它并没有表现出明显的优势。在噪音方面,sift和orb明显强于其它算法;在亮度变化和仿射变换上,orb的鲁棒性是最好的;综合比较,orb的性价比在此次华山论剑中略胜一筹。
下面两张图是上面11组图片的均值,从平均值来看,orb也是最好的