Reading | 一张图建一个屋

给出一幅室内图像,能够从中获取哪些有用的信息?来自CMU的David C.Lee等人在2009年发表的论文中指出,他们能够从图中提取有价值的线段,并以此给出室内结构的合理解释和三维重建。这篇论文在过去的近十年已被引300余次,同样是研究室内场景三维重建方向不可不读的经典之作。

论文地址:

David C. Lee, Martial Hebert, Takeo Kanade, “Geometric Reasoning for Single Image Structure Recovery,” The IEEE International Conference on Computer Vision and Pattern Recognition, June 2009.


引入

首先看一张图:

我们很容易从上图中观察出房间的结构,但这对于计算机而言则充满挑战。一方面,因为遮挡物的存在,从图像中中提取出所有体现房间结构的线段是一件不太可能完成的事情;而另一方面,各种干扰线条也会影响结构的判断,设想下图场景:

通过观察后,我们很快能够理解从左到右的三幅图像都反映了一个立方体——最左侧没有任何遮挡;中间的图存在遮挡——部分线条不可见;最右侧的一张图既存在遮挡,又存在混乱的干扰线。我们能够将最右侧图像也认定为立方体结构离不开三方面的影响:(1)我们具备几何推理能力并且优先考虑物理上可行的解释;(2)我们具备全局观察的能力;(3)我们对于世界的结构具有一定的先验知识,这个例子里是物体结构的认知。

几何推理过程虽然要求苛刻,但有助于缩减问题空间,对后处理过程有很大帮助。

前人工作

「线条图」(Line drawings)在计算机视觉领域的早期就开始被广泛研究,Guzman最早提出解读线条用于拆分多面体的方法;Huffman和Clowes提出了将线段集合标注为凸面、凹面和多面体对象的方法;Mackworth引入了梯度空间和基于表面约束(surface based constraints)概念。Waltz将问题空间扩大为图2(第一节第二张图)中包含遮挡和缺失边的情况…这些方法都还没有用于真实的图像中(而只是用于人为设计的线条稿中

Kosecka组使用单个图像中的线段信息,确定灭点和相机参数,并找出图中的矩形表面和朝向。然而这些方法仅局限于二维平面,没有尝试提取三维信息。

当图像中有参照物时,进行单幅图像的三维重建是可行的。其中一个被广泛使用的参照物就是地面。Hoiem等人和Delage等人使用两步进行重建:(1)运用统计学方法(例如图像颜色、纹理、边缘朝向、位置等)估计图像区域朝向;(2)沿着地面和垂直区域之间的折痕来提取垂直区域。Saxena等人通过估计图像中的深度信息,并利用一些弱假设(weak assumptions,比如连接性和共面性)来平滑地连接区域。

Nedovic等人的一项有趣的观察表明,一个典型场景可以划分为有限种类别,称为「层次」(stages)。典型的stages包括天空+陆地、盒子、角落以及人物+背景。Stage的信息可以作为深度估计的一种指引,并对场景有进一步理解。

室内世界模型

大部分室内环境满足曼哈顿世界假设(Manhattan World assumption),即大多数平面是三个相互正交的平面之一。此外,室内场景图片通常有一个地板平面和一个天花板平面,通常互相平行。

将「曼哈顿世界假设」和「单地板-单天花板」模型相结合,我们提出「室内世界模型」(Indoor world model)

此模型主要有两方面优势:

  • 能够在二维图像中清晰地表达三维模型,并可方便地重新化为三维模型。
  • 由于地板容易被遮挡,因此先找到天花板和墙的边界,再利用对称性,找到墙和地板的边界,从而推断几何结构。

几何推理

室内的几何信息大多来源于墙面的连接,我们定义为角落(corners),因此对角落的几何限制将更有效地还原整个场景。

角落的种类分为:

  • 凸角(convex, 标记为+)
  • 凹角(concave, 标记为-)
  • 遮挡角(occluding, 标记为>)

下图展示这三种结构。

此外,可根据场景中两个灭点的垂直线划分相机位置,每个位置会存在角落的四种布局情况,如下图所示

根据这些约束条件来进行几何推理将更为有效。

寻找建筑结构

这个过程主要分为三步:

  • 线段和灭点搜寻
  • 根据线段和灭点信息建立若干结构假设
  • 对每个假设进行方向图验证

线段检测和灭点估计

使用Canny边缘检测方法找到线段,再根据已知线段信息寻找灭点位置。

只要有三个正交的灭点,我们即可恢复相机位置。首先采用RANSAC方法随机选择两组相交线段产生两个灭点,再运用论文附录的公式(这里不单独写出,需要深入研究可查看本文开头的原始文献)进行验证并确定第三个候选灭点。对这三个候选灭点计算loss function(属于优化问题),反复寻找三个灭点结果符合要求。根据三个灭点的位置和正交性即可确定相机位置。

实践结果表明在相机参数已知的情况下,灭点位置的误差在几个像素之内;相机参数未知的情况下成功率大于90%(40/44)。

生成结构假设

在接下来的两个小节中,为了表达方便,引入几个概念:

  • 线段方向:朝灭点延伸的方向为线段的正方向
  • 表面方向:真实世界中物体表面法线的方向
  • 像素方向:像素所属表面的方向

线段的连接构成了角落,角落的组合就形成了结构模型。一个角落通常包含5条线段,但并不是所有的线段都可见,利用前文提到的对称性,可以在一定程度上重构被遮挡的角落。

生成结构假设的过程如下图所示,首先建立场景中没有角落的假设,即只有一面墙的情况。接下来寻找能和现有线段连接的线段,并加入模型产生一个新的角落。重复这样的过程,会逐渐产生若干角落和不同结构假设。

验证假设

在上一步获得若干结构假设后,通过评估每个假设对方向图的匹配度来完成验证。方向图是通过计算线段信息获取的,表示了每个区域的置信方向。

我们将每个假设对方向图的匹配度定义为:假设的方向与方向图给出的方向之间一致的像素总数。选择匹配度最大的假设作为最佳拟合假设。

两条不同方向的线段能够明确指出它们附近的像素方向,即附近的像素与这两条线段的方向均垂直。例如,我们容易理解下图中区域(1)像是水平面,因为旁边存在方向不同的绿线和蓝线;区域(2)像是墙面,因为旁边的红线和绿线。

(方向图的计算:论文中唯一相对数学的部分,理解起来很容易,理清楚每个“方向”指的是什么,加上一些并不复杂的几何运算和集合运算,就能够得到。原文写的很清楚,这里就不多描述了,简单理解可以参考上一段的含义,下图是计算得到的方向图)

转化为3D建筑模型

有了上面的过程,就能够初步生成3D室内场景了,原理虽简单,效果很惊艳。

实验结果

选取54张图片,首先人为标记每个像素点的方向,之后交给系统作为测试。对比结果发现,平均81%的像素被正确分类,76%图像中的像素错误率在30%以下,44%图像中的像素错误率在10%以下。从质量上讲,大约70%的图像被还原为合理的3D模型。即使存在物体遮挡,也能还原出令人满意的结果。部分重建后的场景如下图所示


考虑到该系统的计算复杂度,这个团队的重建结果已经很不错了。

当然现在来看,存在的问题也很明显,主要包括:模型单一、未能分割和重建物体。因此该模型对于从网上直接获取的图像而言,重建的可接受度并不高(论文中给出的数据是20/44)。

图像模型方面的假设有些苛刻和单一,最直接的就是:室内照片不一定都会拍到天花板和地板,测试结果也表明该系统目前对于这种图像容易重建失败。

该团队在后期希望实现图像中的物体检测,从而将物体从图像中分离(或单独建模),更好地还原大范围室内场景。下图为他们当时做的人和门的检测

以及,不要忘了这是2009年的CVPR…