全景拼接,顾名思义就是将同一场景下几张图片拼接在一起,形成一张全貌图。现在的手机相机普遍有这一个功能,今天我们就来学习一下这一有趣的东西,世界如此之大,无奇不有。
一、图像拼接原理
首先,我们先了解一下全景拼接的原理。
全景拼接的基础流程如下:
(1)针对同一场景拍摄系列图像
(2)提取图像的特征和匹配
(3)将匹配转化成齐次坐标点
(4)估计单应性矩阵
(5)拼接图像
接下来我们就这几部分分别讲解,当然,第一个步骤拍照,就不赘述了,地球人都会的
1.提取图像的特征和匹配(SIFT算法)
本文运用SIFT算法来提取图像的特征和匹配,是因为SIFT算法对于旋转和尺度均具有不变性,并且对于噪声、视角变化和光照变化具有良好的鲁棒性。关于SIFT算法,博主在之前的博客已经详细讲述了,这里就不重复了,详见下方链接:
https://blog.csdn.net/qq_40369926/article/details/88597406
2.将匹配转化成齐次坐标
将匹配转化成齐次坐标是为了矩阵乘法和点的操作更容易,因为后面计算的单应性矩阵是齐次的。
为什么要引入齐次坐标呢?这是因为齐次坐标可以将图像的各种变化统一成矩阵乘法,详见下方链接:
https://blog.csdn.net/saltriver/article/details/79680364
3.估计单应性矩阵(RANSAC算法)
单应性变换是将一个平面内的点映射到另一平面内的二维投影变换,而两张图像变换的对应关系就叫做单应性矩阵,值得注意的是单应性矩阵是齐次的,单应性变换用数学表示如:
其中,为1。
因为为1,所以单应性矩阵H有8个自由度,求解图像之间的单应性变换其实就是求解单应性矩阵H中的这8个自由度。单应性矩阵可以通过SIFT找到的特征对应点对计算出来。一个完全映射变换需要8个自由度。根据对应点越是,每个对应点可以写出两个方程,分别对应于
和
坐标,因此,计算单应性矩阵H需要4个对应点对。
我们RANSAC(RANdom ASmple Consensus,随机一致性采样)来估计单应性矩阵。这其实是DLT(Direct Linear Transformation,直接线性变换)的优化。DLT算法是将给定的4个或更多个对应点方程的系数堆叠到一个矩阵中,使用SVD(奇异值分解)算法求得H的最小二乘解。但是,值得注意的是并非所有的对应点对都是正确的,如下图所示:
这样一口气把所有对应点堆叠在一起求H,很容易导致结果错误,也就是说DLT算法对噪声的鲁棒性并不强。而RANSAC算法经常用来在边矩阵的求解中剔除噪声。RANSAC的基本思想是,数据包含正确的点和噪声点,合理的模型应该能在描述正确数据点的同时摒弃噪声点。RANSAC的求解过程如下:
(1)随机选择4对匹配特征对应点对
(2)根据DLT计算单应性矩阵H(唯一解)
(3)对所有匹配点,计算映射误差(对每个对应点使用该单应性矩阵,然后返回平方距离之和)
(4)根据误差阈值,确定正常值inliers(小于阈值的点看做正确点,否则认为是错误的点)
重复步骤(1)-(4)
(5)针对最大inliers集合,重新计算单应性矩阵H