Automatic Panoramic Image Stitching using Invariant Features笔记
第一次接触全景图像的拼接,先简单的来做个论文笔记。
简单来说,全景图像拼接过程可以简述为:寻找所有图像重叠区域鲁棒的特征点,根据图像特征点匹配得到不同图像间的单应性矩阵,以某个图像为基准图像(k-d tree 得到),将其余图像拼接到这幅图中,然后通过图像融合得到最终结果。当然这中间还有一些其他的问题,在后面在赘述。
该篇论文最终算法为:
在这里我将按照论文最终算法步骤来介绍整篇论文内容,而非原文中的顺序:
-
提取图像中的sift特征点;
-
进行sift特征点的匹配,对于图像A中的某个特征,可以利用K-NN算法在另一幅图中寻找K个最近的特征点,然后将K个特征点进行比较,从而判断是否找到了匹配点,在寻找K个最近的特征点时,k-d tree是一个很有效的算法 (这里的k和KNN的K不同)。
-
由于不是每幅图和所有的图都是可以拼接的,因此这里对于每幅图选择m个候选图像(有最大匹配点数量的),接下来要根据匹配的特征点求解两幅图像之间的变换矩阵:
论文中变换矩阵建模即在Feature Matching部分参考相机成像模型,考虑相机是围绕中心只做了旋转而没有做平移(或者考虑物体离相机足够远),很容易得到
其中,旋转矩阵我们一般是通过三个角度来描述,这里采用的是指数形式便于运算即:
这里论文还把上面的过程简化为了一个仿射变换(实际上应该更倾向于射影变换),自由度为6,该变换模型需要在RANSAC部分需要使用,
射影变换公式,自由度为8:
- 为了计算射影变换的参数值,显然只需要四个点,由于得到的匹配点中点数显然多于四个为了,提高计算精度,可以使用最小二乘法;此时有一个问题为得到的匹配点对中有内点和外点,内点数量越多,可以得到更为准确的结果,如何区分内点和外点,即RANSAC算法:
抽n次中至少有一次匹配点为正确的概率为:
--------------------------(2)
这里是内点概率,代表每次抽出点的数量,这里为4。
从(1)中可以推导出:
--------------------------(3)
那么RANSAC算法基本步骤为
- 初始化p, 内点的阈值 迭代次数N
- 进入迭代
1) 随机选取4个匹配点对,要求三个不能共线
2)根据公式(1)计算H
3)对所有的匹配点对:计算重投影误差: ,如果误差小于阈值,则为内点,反之则为外点;
4)根据3)即可计算出内点概率,进而通过公式(3)更新迭代次数N
*由迭代循环内最大的内点数计算投影矩阵H
-
进一步验证候选图像是否需要拼接:
这里是内点数,为匹配点数量, 和为实验参数,论文给的为8.0,3.0满足该条件即认为两幅图有较好的匹配关系,需要拼接; -
尽管通过RANSAC方法已经初步计算出了单应性矩阵,但是上面方法是孤立的处理图片,没有考虑到多幅图像的空间一致性,也会造成错误的累积,因此这里采用光束平差法(Bundle Adjustment)处理所有的图像,得到更为准确的单应性矩阵,这里定义的误差不是前面标准的欧氏距离,而是Huber robust error function
绿色代表的Huber robust error, 蓝色代表平法误差,Huber robust error function好处在于当误差很大时为线性,一些误差很大的异常点的影响较小。
求解时采用Levenberg-Marquardt方法,迭代因子为:
解析解通过链式法则来求,这部分的数学计算我还不是特别懂。 -
Panorama Straightening,直接拼接起来的图像会有明显的波纹,如图需要将其校正为水平方向:
-
Gain Compensation,如果不同图片曝光程度不同,那么在拼接时候就会有明显的痕迹,因此需要对其进行曝光补偿。
其中代表的是重合区域,使用重叠区域的平均值来代替。
这样显然即是最优解,但显然不是我们想要的结果,因而论文中加了一个prior term。该公式可以通过求导得到闭式解。 -
Multi-Band Blending 多频段融合,论文中给出的说法略复杂,可以参照这篇博客
首先分别建立各个图像的拉普拉斯金字塔,然后针对重叠区域,把它们的金字塔的相同层 应用进行合并,最后对该合并后的金字塔进行逆拉普拉斯变换,从而得到最终的融合图像
构建Laplace金字塔: , L G代表Laplace变换和Gaussian模糊;
构建融合图像:
, 其中为合成金字塔,这里采用公式进行合成;S_{n}为融合金字塔
参考博客1
参考博客2
参考文章:Automatic Panoramic Image Stitching using Invariant Features