图像拼接
图像拼接是指将拍摄到的具有重叠区域的的若干图像拼接成一张无缝全景图, 以获得更大的视角和分辨率的图像。例如:
输入下面一组有重叠区域的图片:

得到下面这张拼接大图:

图像拼接流程和涉及的算法

图像拼接的完整流程如上所示,首先对输入图像提取鲁棒的特征点,并根据特征描述子完成特征点的匹配,然后根据已经匹配的特征点对得到相邻图像的位置关系从而进行图像配准,由于直接进行图像配准会破坏视场的一致性,因而一般先将图像投影在球面或者柱面上,最后计算相邻图像的拼缝并完成重叠区域的融合,得到最终的全景图像。
第一步:图像特征点提取
特征点指的是图像灰度值发生剧烈变化的点或者在图像边缘上曲率较大的点,用直白的话来说就是指,从不同的角度对同一个场景进行拍照,在每一幅照片中都能鲁棒的提取的图像的点。一个好的特征点提取算法需要具有以下的特征:数量多,在不同场景下都能提取得到足够数量的特征点;独特性好,从而便于对特征点进行匹配;抗旋转,抗亮度变化,抗尺度缩放等。特征是要匹配的两个输入图像中的元素,它们是在图像块的内部,这些图像块是图像中的像素组,对输入图像进行Patch匹配。目前比较流行的特征检索算法有:
- Harris:检测角点
- SIFT(Scale Invariant Feature Transform ):检测斑点
- SURF(Speeded Up Robust Features):检测斑点
- FAST(Features from Accelerated Segments Test):检测角点
- BRIEF(Binary Robust Independent Elementary Features):检测斑点
- ORB(Oriented Fast and Rotated Brief):带方向的FAST算法和具有旋转不变性的BRIEF算法
第二步:图像特征点匹配
在特征点被检索出来之后,提取出其特征描述子,然后用SSD、NCC、BBF、KNN或brute-force等算法对不同图片中提取到的相同的特征点进行特征匹配。第三步:图像配准
在得到了匹配对之后,需要根据这些匹配对得到图像的相对位置,从而把多幅图像融合成为一幅图像,该步骤的计算思路是计算两幅图像的单应性矩阵(homography matrix),从而得到一幅图像相对于另一幅图像的位置。而匹配点对是有噪声的,需要对匹配点对进行筛选,在这一步,用到的筛选算法有Lowe’s算法或RANSAC算法。得到初始单应矩阵之后,也可以运用L-M算法对初始单应矩阵加以改进,获得准确性较高的单应矩阵,从而实现图像的准确配准。第四步:图像融合
在最后图像融合阶段,也可以进行寻找最佳拼接缝(常见方法:逐点法,动态规划法和图割法)和融合处理(常见算法:羽化融合和拉普拉斯融合),消除拼接图像中的“裂缝”和“鬼影”。
拼接系统拟实现方案
特征提取阶段改进
在图像特征点提取配准阶段,传统算法存在运算时间长、对输入图像相似度要求高的问题,打算采用深度学习提取ROI的方式提取图像特征,这样降低了图像配准的时间,且使得图像的变换更符合所关注的区域。
在拼接系统实现算法间的对比
- 采用B/S架构,前端使用vue.js,后端使用Python为主语言
- 图片上传后,先使用SSIM算法计算图像相似度
- 将自己实现的特征提取方案,与SIFT、SURF、ORB、Harris等传统算法进行运行效率对比、拼接质量对比,拼接质量采用PSNR指标
- 对比数据使用MongoDB数据库进行落库