菜单

论文阅读: Rectangling Panoramic Images via Warping 核心内容翻译

9月 14, 2020 - 机器学习&大数据, 算法

摘要

拼接的全景图像大多具有不规则的边界。艺术家和普通用户通常更喜欢矩形边界,可以通过裁剪或图像完成技术获得矩形边界。在本文中,我们提出了一种内容感知的变形算法,该算法可以从拼接的全景图像生成矩形图像。算法包括两个步骤。第一步是无网格操作(meshfree),并将图像初步变形为矩形。在此矩形上放置网格后,第二个全局步骤将优化网格以保留形状和直线。在各种实验中,我们证明了我们方法的结果通常在视觉上看似合理,并且引入的失真通常不明显。

概述

随着图像对齐和拼接技术的发展,创建全景图像已成为越来越受欢迎的应用程序。由于投影(例如圆柱形,球形或透视图)会扭曲源图像以进行对齐,再加上由于偶然的相机移动造成的影响,拼接后的全景图像会显示不规则的边界几乎是不可避免的。但是大多数用户都喜欢使用矩形边界来发布,共享和打印照片。例如,Flickr(flickr.com)的“全景”标签中超过99%的图像具有矩形边界。在本文中,我们研究了从不规则图像生成矩形全景图像的问题,称为“矩形”图像。

一个简单的解决方案是直接使用矩形裁剪全景图像。但是裁切可能会丢失所需的内容并降低宽视野的印象。另一种解决方案是使用图像完成技术在边界框中合成缺失区域。尽管这些技术适用于扩展纹理或直线之类的简单结构,但它们可能无法合成语义内容。最近,Kopf结合了裁剪和补全功能来解决此问题。

在这项工作中,我们提出采用扭曲(warping)的方式来矩形化全景图像。由于全景/广角图像不可避免地出现失真是长期存在的事实,因此我们认为warping是完成此任务的一种有吸引力的策略。普通用户似乎已习惯并容忍这种失真,像Flickr网站上已经共享了数百万张这样的全景图像。摄影师和艺术家似乎愿意在这种失真的基础上加以扭曲来换取令人印象深刻的广阔视野。通过这种观察,我们认为,通过适当设计的用于矩形化图像的变形算法,其引入的额外失真可能是可接受的,并且在视觉上并不明显。

开发这种warping方法的挑战来自不规则的边界。不正确地将输入边界拉伸为矩形可能会导致意外的失真,因此需要一种内容保留解决方案。但是,大多数用于投影操作,图像重定目标或视频稳定化的现有内容保留变形技术都是基于网格网格,并假定输入图像为矩形。形状变形方法需要预定义的网格和用户指定的控制点作为输入/输出约束。基于插值的变形方法需要用户指定的多边形笼作为输入/输出,并且不了解内容。

我们提出了一种用于矩形化全景图的新颖的内容保留的变形方法。关键思想是一种两步方法,该方法首先将图像局部变形以适合矩形,然后全局优化放置在该矩形上的网格。第一步,我们修改Seam Carving算法,将不规则图像扩展为矩形。我们认为“接缝雕刻”是一种变形方法,可将每个接缝一侧的所有像素移位。第二步,在由Seam Carving生成的矩形图像上放置网格。通过第一步的位移场,再将网格扭曲回去,并放置在原始的不规则图像中。然后,我们全局优化此网格,将其拟合为矩形,同时保留包括形状和直线在内的感知属性。我们的方法是全自动的。 它完全基于内容,不需要任何有关投影的先验知识。我们的变形方案在各种情况下都可以很好地工作,通常是当不规则边界来自对准所需的投影和偶然的相机移动而来的时候。但是,当不规则边界是拼接整个场景所需的缺失图像的产物时,我们的方法可能会失败。本文有两个主要贡献。 首先,就我们所知,我们是第一个采用扭曲思想来矩形化全景图像的人。其次,我们开发了一种自动的内容感知方法,用于使不规则的全景图变形,而无需用户提供网格/笼子/控制点的任何要求。

相关工作

我们回顾了有关全景成像,图像变形和图像完成的相关工作。

图像对齐和拼接

我们简要总结了全景拍摄的典型流程,如下所示。使用图像特征注册源图像,并将其投影到同一坐标系上。应用图切割技术来缝合图像,然后进行泊松混合。最近的改进涉及有效的混合和灵活的接缝处理。

投影

人们早就意识到,将3D场景投影到2D图像上不可避免地会导致扭曲变形。常用的投影包括透视,圆柱和球形投影。透视投影能够保留直线,但可能会严重拉伸形状。圆柱和球形凸起能够保持局部形状,但它们会弯曲直线。这些投影有助于缝合图像的不规则边界。

Peleg在2000年提出的在自适应流形上投影和缝合图像的方法基于有关摄像机运动的知识。相机倾斜时,它可以创建“校正的”全景图(但边界仍然不规则)。此方法适用于相机运动的场景,但不能识别内容。

为了保持诸如直线和/或未拉伸形状的感知特性,人们已经在局部适应性投影上付出了巨大的努力。有的想法是将翘曲变形重新分配到视觉上无关紧要的区域。给定一些用户指定的约束,这些方法可以优化由网格参数化的空间变化投影。值得注意的是,这样的投影方法尽管在视觉上似乎合理,但从本质上讲还是不可能消除所有翘曲变形。

由于翘曲变形在全局/局部投影中是不可避免的,因此我们认为,在矩形化全景图像时,合理的warping变形可能是不明显的并且可以容忍的。

图像重新定向和变形。

图像重定位是根据内容调整图像的大小。接缝雕刻方法可删除/插入接缝以更改图像尺寸。也有很多各种其他方法也明确基于warping。他们考虑到基于内容的属性(例如显着性,形状和/或直线)来优化位移场。以上所有重定位方法均假设输入为矩形; 其中一些方法还需要网格以保留高级属性,例如形状和直线。

图像完成

图像完成已被视为创建矩形全景图像的一种方式。先进的图像完成技术基于示例:它们从已知部分复制内容以合成缺少的部分。通常在纹理区域和较少语义区域的情况下,此策略可以产生视觉上合理的结果。但是它不太适合用于合成更高级别的语义内容,并且在丢失区域较大时可能偶尔会失败。此外,即使成功的合成也不是真实场景的忠实记录。 并非所有用户都希望这样做。

算法

我们的变形算法包含两个步骤:通过“接缝雕刻”进行局部变形的步骤,以及基于网格的全局变形步骤。局部步骤提供了初步的矩形图像。其主要目的是在输入上放置网格。全局步骤优化了该网格,以保留包括形状和直线在内的感知属性。

无网格局部变形

我们的局部变形步骤是对接缝雕刻算法的修改。原始的接缝雕刻算法在图像中插入水平/垂直接缝,从而将其垂直/水平扩展一个像素。如果我们允许接缝不穿过图像,则可以更改图像的边界形状并将其拟合为矩形。最近,有人提出使用接缝雕刻将矩形图像裁剪为不规则形状(例如圆形或椭圆形),我们的任务与其正好相反。

假设不规则输入图像的边界框是目标矩形边界。我们将“边界段”定义为目标矩形边界的四个边(顶部/底部/左侧/右侧)之一上的缺失像素的连接序列。每次我们选择最长的边界线段并插入一个接缝。如图三i中展示的,对于边界线在右侧的情况,我们在图像中插入垂直的非直缝。该接缝与所选边界线段共享相同的起始和结束y坐标。然后,我们将该接缝右边的所有像素向右移动一个像素。顶部/底部/左侧的接缝情况可以类似地处理。不断重复上述操作,直至矩形边界没有缺失的像素为止。

为了找到非直缝,我们运行“缝雕刻”算法以在“子图像”中查找直缝。例如,图3(ii)中的子图像的起始和结束y坐标与边界段相同。然后我们在该子图像上应用Seam Carving算法(在我们的实现中,我们采用了改进的Seam Carving)。由于子图像可能包含丢失的像素,因此我们为这些像素分配了无限的成本,以防止接缝通过它们。

从填充未知区域的角度来看,插入接缝将减少图像中丢失像素的数量(此数量等于接缝上的像素数量)。我们用x = (x, y)表示输出像素的坐标,使用u = (u_x, u_y)表示位移情况。输出像素值可由输入图像经如下warping过程得到:
I_{out}(x) = I_{in}(x + u(x))
上式中。I_{in}I_{out}代表输入和当前输出图像。如图三(ii)中,针对接缝右侧所有像素的位移u是(-1, 0),对其他所有像素是0。随着所有接缝都被计算,我们可以获得对应的位移场u。我们将该步骤称为局部变形,因为变形在接缝附近局部分布。

与以前的作品不同,我们没有在形状保持过程中引入任何显著权重。这是因为全景图通常涵盖各种各样的内容,并且不包含特别突出的对象。

直线保存我们利用[Chang and Chuang 2012]中的方法来保存直线。我们的直线保存能量E_L鼓励直线保持直,平行线保持平行。我们使用[Von Gioi et al. 2010]的代码检测输入图像中的线段。我们用输入网格的边缘剪切所有检测到的线段,以使每个生成的线段位于一个四边形内。我们将[-\frac{\pi}{2},\frac{\pi}{2})]分成50个单元,用来量化直线的方向。为了保存直线性和平行性,我们鼓励同一单元中的所有线段共享一个共同的旋转角度θ。直线保存项E_L与所有这些角度{\theta_m}^M_{m=1}都有关。

给定一个线段,我们使用其两个端点的差向量计算其方向向量e(带有比例)。如果我们将线段的两个端点表示为其四边形顶点V_q的双线性插值,那么我们就可以把e写作V_q的线性函数。我们将该线段的输入方向矢量表示为\hat e。给定目标旋转角度\theta_m,我们要最小化线段的以下失真:
|sR\hat{e}-e|^2
上式中,R = \left( \begin{matrix} \cos\theta_m&-\sin\theta_m \\ \sin\theta_m&\cos\theta_m \\ \end{matrix} \right),s是该线段的比例因子。相对于s最小化得到s = (\hat{e}^T\hat{e})^{-1}\hat{e}^TR^Te。将s带入上式骂我们可以得到失真是关于e的二次函数:
|Ce|^2
其中,矩阵C为:
C = R\hat{e}(\hat{e}^T\hat{e})^{-1}\hat{e}^TR^T-I
由于e是V_q的线性函数,因此上式为V_q的二次函数。

我们的直线保存能量E_L由所有线段的平均失真定义得到:
E_L(V,{\theta_m}) = \frac{1}{N_L}\sum_j|C_j(\theta_{m(j)}e_{q(j)}|^2
上式中,N_L是线段的数量。每条线段用索引j编号,q(j)是包含该线段的四边形。矩阵C_{j}(\theta_{m(j)})由之前提到的公式计算,取决于包含此线段的料箱的所需旋转角度θ。E_L是V的二次函数。

与 [Chang and Chuang 2012]不同的是,我们的能量与比例因子和每个线段的平移无关。因此它只有更少的变量和参数。

边界约束 我们想将网格边界上的顶点拖到一个矩形上。边界约束项E_B由下式简单定义:
E_B(V) = \sum_{v_i\in L}x_i^2 + \sum_{v_i\in R}(x_i – \omega)^2 + \sum_{v_i \in T}y_i^2 + \sum_{v_i\in B}(y_i-h)^2
上式中,L,R,B,T分别代表边界的左右上下顶点,\omega和h指的是目标矩形的宽度和高度。注意,我们仅约束每个边界顶点的两个坐标之一,例如,顶部边界上的顶点可以水平移动。

总能量 我们的总能量方程E为:
E(V,{\theta_m}) = E_S(V) + \lambda_LE_L(V,{\theta_m}) + \lambda_BE_B(V)
其中\lambda_L\lambda_B是两个权重。我们设置边界权重为无限大(10^8)来事假硬边界约束。

边保存权重\lambda_L是我们算法中的主要影响参数。在实验中,我们发现当\lambda_L\geq 10)足够大时,它始终可以正常工作。这表示边保存E_L的重要性要高于形状保存E_S。这意味着人眼对弯曲的直线比对变形的形状更敏感。我们在本篇论文中将\lambda_L保持为100.

高效优化

我们使用一种迭代算法来最小化能量E。初始化由局部warping的结果给出。我们运行了10次下述迭代算法。

**保持{\theta_m}更新V ** 在这种情况下,E是V的二次函数,因此可以通过线性系统解决。由于V中只有几百个顶点,因此这部分时间可以忽略不计。

保持V更新{\theta_m} 由于{\theta_m}之间是相互独立的,我们可以分别更新迭代每一个{\theta_m},在这种情况下,我们需要最小化下式:
\min_{\theta_m}\sum_{j\in bin(m)}|C_j(\theta_m)e_{q(j)}|^2
这个问题可以通过牛顿法等迭代求解器进行优化。相反,我们采用了一种由能量函数直观驱动的简单非迭代解决方案。这种直观方案是针对角度第m个单元内所有的线段\theta_m找到一个通用的旋转角,使得\theta_m近似于任何一个线段e_j以及其对应的\hat{e_j}。因此,我们仅需简单计算所有e_j\hat{e_j}在第m个单元内的相对角度,去他们的平均值为\theta_m。我们发现这是一种又好又快的最小化方法。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注