如何在球面/立方体贴图上混合​​图像

信息处理 图像处理 3d 图像配准
2022-01-08 10:27:30

我已经有了一种算法,可以通过图像配准制作全景图像马赛克,然后在重叠区域中混合图像。

来自维基百科的下图说明了通过在重叠区域中找到最佳分割线将平移运动缝合在一起的几张图像:

在此处输入图像描述

现在我想将这种混合算法扩展到各种全景图像投影。

最简单的情况是平面投影,其中不存在任何混合问题。下图说明了两个图像和缝合线。

我基本上可以从画布中获取一个区域(已经缝合的合成图像)和图像中的相应区域,然后将两者混合在一起并将混合区域渲染回画布:

在此处输入图像描述

这是针对每个新图像按顺序完成的。

但是,当我尝试使用球面投影和 360° 马赛克时,当两个图像及其重叠区域跨越 360° 边界时会出现问题:

在此处输入图像描述

我不能再取出一个简单的矩形区域来混合,因为我必须依靠wrapping

更糟糕的是,在立方体贴图上混合​​图像可以将重叠区域分成两部分或三部分:

在此处输入图像描述

我提出了一些关于如何在球面或立方体贴图上混合​​图像的解决方案,但没有一个是令人满意的:


解决方案 1

分别处理立方体的每个面(或类似地,分别处理球面图的每个部分)。不幸的是,这会在立方体的两个面相交处产生可见的伪影,因为相邻面中的图像混合是不同的次优解决方案。


解决方案 2

在新添加的图像的上下文中执行混合。这需要在新添加图像的坐标系中从立方体贴图(或球面贴图)逆投影合成图像,将两个图像融合并将重叠区域投影回合成表面上。

这应该可以工作并消除伪影,但由于数据反复来回投影,因此需要更多计算。


解决方案 3

始终在球形表面上混合,然后将整个马赛克投影到任何表面上。

这减少了单一类型表面上的混合问题,但球面投影会不均匀地处理图像部分,并且需要更精细的方法(例如在三角球上混合图像)以确保高质量的重新投影。


解决方案 4

执行混合时,提供一个正确映射越界坐标的函数。

这与解决方案 2 类似,但由于映射函数会被过于频繁地调用(混合算法可能会多次访问相同的像素位置),因此计算量可能会更大。


如何在球面或立方体贴图或其他一些常见的合成面上有效地融合多个图像?

1个回答

我最终在名为“为纹理 3D 模型混合图像”的论文中找到了解决方案的简单想法。

这个想法不是对添加到画布的每个新图像进行完全混合,而是构建单独的低通和高通画布(用于双波段混合)。然后将它们合并为渲染的最后一步。

寻找接缝仍然有点棘手,并且没有在论文中使用。它需要将数据从画布重新投影到图像,计算接缝,然后将混合蒙版投影到画布上。

论文中描述的方法很简单,不会留下任何混合伪影。

唯一的缺点是更多的数据必须保存在内存中。


更新

如果渲染的画布小于原始图像,则此解决方案不起作用。此外,梯度域混合也不容易应用。