前言
什么是全景拼接?简单来说就是将两幅或多幅具有重叠区域的图像,合并成一张大图 如图所示,7张不同的图像最后拼接成一幅大图,那么问题很明显,如何拼接呢?
1.单应性变换
如果是最简单图像拼接,很明显,我们只需要对其进行平移,将重叠区域叠加,很轻松的就能得到一幅拼接图像。但实际上两幅图像之间有很多种关系,包括但不限于平移,旋转,尺度变换,仿射,透视映射,桶状映射等等。 左边的图像由右边两幅图像拼接而成,很明显,右边两幅图像之间不仅有平移,还有旋转,还有拉伸等等,我们将右边的两幅图像转换成我们想要的平面图像,这个过程就是单应性变换。 上面这个表格显示了不同变换方式所带的未知参数个数,我们以平移为例子,两幅具有平移关系的图像,我们如何拼接呢? 如图所示,两幅图像之间的映射关系如何得到呢,很明显,理论上来说如果匹配的特征点完全正确,我们只需要一个匹配对就可以得到映射关系,比如这对匹配对为(25,25)和(50,50),那么右图先与左图重叠,再将右图往左移动25像素点,然后再向下移动25个像素点,就可以将两幅图像拼接了。 当然,完全正确的匹配点一般只存在于理论当中,所以我们需要一个误差函数来判断每个映射关系的好坏,通过这个误差函数来选择最合适的映射关系。而这个误差函数采用的方法就是我们熟悉的最小二乘法。这里就不对最小二乘法展开讲了,有兴趣的可以自行百度搜索,很多大佬讲的都很清晰。 而对于单应性变换,我们有以下公式 很显然,8个位置参数,我们需要4个匹配特征才能得出一种映射关系,如果将每种可能性都进行计算,所需要的资源量是非常巨大的,所以我们使用RANSAC(RAndom SAmple Consensus)算法来对其进行优化求解。
2.RANSAC算法(待续)
3.代码实现(待续)
|