【论文精读】Parallax-tolerant Image Stitching

1,369 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

目录

0.简介

1.具体实现

1.1整体思路

1.2对齐模型的选择

1.3对齐质量的评估

1.4单应性初筛选

1.5对齐算法总结

1.6网格变换优化的那一套

 


0.简介

本篇文章主要处理具有视差图像的拼接问题,主要采用局部的拼接方法。考虑到仅需要局部区域对齐,就可以无缝的融合在一起。整体思路:在配准方法上,结合单应性变换和局部扭曲bian'huan(APAP)去解决视差和局部失真,具体实现上,论文首先采用随机搜索算法进行单应性矩阵的搜索并,并寻找拼接缝(考虑到几何对齐和图像内容)和采用拼接缝成本作为一个质量度量函数。然后我们用单应性矩阵进行预对齐,并采用局部扭曲矩阵进行局部对齐。最后使用标准的切割缝算法和多波段融合算法将对齐的图像组合在一起。

本文的思想建立于:

本文提出了一种视差容忍图像拼接方法。我们的方法是建立在一个观察,对齐图像完美的整个重叠区域是不需要的图像拼接。相反,我们只需要将它们对齐,使重叠区域中存在一个局部区域,可以将这些图像拼接在一起。我们称这种方法为局部拼接,并开发了一种有效的方法来找到这种允许最优拼接的局部对齐。我们的局部拼接方法采用了一种混合对齐模型,该模型同时使用了单应性和内容保持的翘曲。单应性可以保持全局图像结构,但不能处理视差。与此相反,内容保持翘曲比单应变换能更好地处理视差,但不能像单应变换那样保持全局图像结构。此外,局部拼接仍然偏爱配准比较好、较大的局部公共区域。(但配准的好和想要局部区域比较大是冲突的)因此采用松散的单应性矩阵

1.具体实现

1.1整体思路

检测SIFT特征点→随机选择一个种子特征点→并对邻近的特征点进行分组→估计对齐结果(对齐结果希望找到一个特征分布紧凑的局部区域上,并估计拼接质量,不断循环,若质量够好)→缝合下面我们首先讨论该算法的一些关键组成部分,然后给出一个详细的算法描述。

1.2对齐模型的选择

目前拼接的主流选择有:全局2D变换,经典的Homography变换,空间变形(如内容保留变形),其中全局2D变化最大的优点是,不会有令人反感的局部变形,但是由于其地灵活性,无法处理视差。在图像拼接中,没有必要在整个重叠区域精准的对齐图像,但是可以在尽可能大的公共区域内对齐图像。相比之下,内容保留变形更加灵活,可以更好的对齐图像,但是存在局部失真的问题。因此作者选择了,内容卷曲保留和单应性变换结合,以最小的失真在一个公共区域上对齐图像。具体实现思路:给定一个随机种子点,以其最邻近的点作为一组,设定一个较大的阈值,是尽可能多的特征点能够加入配准,尽管单应性矩阵没有办法很好的拟合这些特征点,但是松弛的单应性可以通过稍后的APAP进行补偿。

1.3对齐质量的评估

若直接对H矩阵+APAP进行变形,比对参考图像检测对齐情况。但是这种方式下,不能预测是否能够在重叠区域找到良好的拼接缝,并且没有考虑图像内容对拼接的影响(显著性区域需要更好的对齐,低纹理区域可以步进行很好的对齐),而且很慢。

解决方案:提取图像边缘,只估计单应性如何拼接,并对大致对齐的图像中找到一个合理的接缝,并使用接缝成本进行评分解决这个问题。

具体实现:输入(变换后的图img_{1}​编辑,参考图img_{2}​编辑(细小误配准的容忍)→ canny提取边缘 → 得到变换后的边缘图img_{1}​编辑和参考图的边缘图img_{2}​编辑→进行差分

合理的拼接缝应该避免穿过差分图中值比较大的区域,并采用graph-cut寻找核里的拼接缝(全局最小割算法:寻找切割成两张图片能量最小的路径组),并将重叠区域的每个像素作为一个图节点,并定义边界损失值为:

​编辑​编辑

 其中e(s,t)代表一个边的两个点的损失值,其损失值由两个点的损失值进行加和,主要是两个节点的差分图的值大小,越大就代表这两个点越有可能是差分区域。并引入特征点的稀疏情况f(c)进行加权处理。其中f(c)中 Ps代表每一个图节点,Pi 代表每一个特征点,g代表就行了高斯函数,保证每一个节点的值传递到局部区域,

(困惑的点,按照这个公式,稀疏区域离其余特征点更远,按逻辑其f(c)的权重就比较小,而对于特征点密集的区域,f(c)的权重就比较大。而作者前文讲,对于特征点密集的区域,利用APAP修复的可能性就越大,应该降低其 错误对齐的权重,按照这个公式应该权重比稀疏区域更大了。)

(可能性:因为引入了高斯函数,对于稀疏的特征点的网格,其3\sigma​编辑区域内的特征点很少,而超过3\sigma​编辑区域的特征点,权重几乎为0,因此不提供贡献。因此密集区域的欧式距离和会更大。fc(s)更小) 这个问题有朋友有其他理解可以一起讨论。

结论:对于差分区域为0的区域,损失值应该为0,而对于差分区域,特征点密集的区域损失值低于特征点稀疏的区域。因此寻找拼接缝的优先级:

  1. 配准好的区域
  2. 特征点密集的未配准好的区域
  3. 特征点稀疏的未配准好的区域

1.4单应性初筛选

在上诉,我们通过得到单应性矩阵,计算拼接缝的质量,并试图得到最优局部单应性。但是对于有些非常离谱的H矩阵,这样计算就很浪费时间,因此可以进行一次初筛。

​编辑

 H矩阵会比相似矩阵拟合所有点的变换拟合的更好,但有时候会使图片严重的变形(有可能其中有错误的点)而相似矩阵会在平移旋转上进行变形,因此不会导致严重的失真。同时也没有单应性矩阵这么贴合所有点。C_{i}​编辑是输入图像的四角,\hat{C}_{i}​编辑是经过H变换后的输入图像四角。并用最小优化问题得到最优相似矩阵。得到相似矩阵后,计算H变换后的四角和A变换后的四角欧式距离和并归一化,大于0.01就丢弃此矩阵。

1.5对齐算法总结

随机算法是怎么做的:

  1. 得到两张图的SIFT特征点并计算边缘图
  2. 随机选择种子点和他最邻近的点作为备选点选择组,并不断的加入最邻近的点(最近的加入了就选择次近)直到不能单应性拟合失败(1.4的单应性拟合丢弃的条件)。并为每个特征点保留一个惩罚值,以确定它在迭代过程中被选择的次数,一旦一个特征点被选择,就增加一次它的惩罚值。在每次迭代中,要选择一个特征点作为有效种子,选择过的不能要,且该特征点的惩罚分数低于所有特征点的平均惩罚值。

原因:除了第一次迭代,每一次迭代都代表,已经有一批特征点去拟合,但没有拟合得到正确的点。被选择过的种子点,不能再使用,并且其局部区域被选择的点是上一次失败拟合的点,下一次选择种子点,也多半会得到错误的H矩阵,因此这一类的点我们也不优先选择。最后就是得到的剩余点作为随机点。

总结:其实是分区域分区域的寻找最优H矩阵并保证可以得到一个较好的拼接缝。但是其实复杂度反而比较高,首先每个点都要计算其最邻近的点集(N的复杂度)→计算得到H矩阵(opencv封装比较快)→计算相似矩阵 →反复迭代直到H矩阵符合1.4的条件→计算graph-cut对齐质量(不符合又要重新迭代寻找新的种子点)。最终只拿到一个局部区域符合寻找拼接缝的配准。 

1.6网格变换优化

不细写了...主要是三角约束变形+内容保留变形+全局变换约束