Reconstruction of Multi-Level Indoor Spaces

对论文 Automatic Reconstruction of Multi-Level Indoor Spaces from Point Cloud and Trajectory (Sensors, 2021) 的阅读整理。

Reconstruction of Multi-Level Indoor Spaces

论文信息

  • 标题:Automatic Reconstruction of Multi-Level Indoor Spaces from Point Cloud and Trajectory
  • 作者:Gahyeon Lim, Nakju Doh
  • 期刊:Sensors 2021
  • 源码:暂未找到

1 Introduction

3D 室内重建:

  • 应用领域:VR,AR,室内定位,室内导航。
  • 设计领域:计算机视觉,计算机图形学,城市工程,机器人。
  • 挑战:跨房间的 3D 结构连接、跨楼层的 3D 结构连接。

传统的解决方法:

  • 基于分治技术:将建筑物按楼层分割、按房间分割为简单子问题。单层室内空间的模型用单个房间的模型组合来表示;多层建筑的模型用单层模型的组合来表示。
  • 利用水平切片(horizontal slicing)法,将多层建筑分割成独立单层空间的重建方法[1]:采用水平切片算法,利用点云的垂直直方图中的峰值切割目标空间,然而这种方法不适用于切割 Figure.1 中的复杂多层建筑。
  • 将多房间环境建模为多房间的分割,但是对房间之间的连接没有很好的解决方法。但是,跨房间的连接可以建模为门,跨楼层的连接可以建模为裸体,如 Figure.2。
本文的方法:
  • 本文提出了一种针对复杂环境下多楼层室内空间的自动重建方法,可以从点云和轨迹中生成包含 inter-room 和 inter-floor 连接的室内空间模型。此方法不将结构点分割为特定的房间组成(如墙、地板、天花板),并且不会将不会将空间分为多个子空间(如单房间,单楼层)。
  • 本文提出的是一种泛化的方法,直接将目标室内空间建模为平面片段,并且直接建模整个房间。此外,该方法利用图割(graph-cut)进行能量最小化,实现了室内空间模型的自动重建。
  • 通过考虑来自不同环境的数据集,该方法验证了所提方法在多房间、无房间和多层建筑环境中的广泛适用性。相比于作者的前期方法[2]有了更大的改进。

2 Methods

如 Figure.3,首先,在预处理步骤中从注册的点云和轨道构造表示室内空间建筑组件的结构点。接下来,该方法提取分段平面分段,将室内空间分解为 3D 单元复合体。最后,利用图割算法通过能量最小化生成水密网格(watertight mesh)。使用轨迹来计算能量函数最小化中可见性的差异。

2.1 Pre-Processing

使用基于 LiDAR-IMU 的 SLAM 方法,获取注册点云和轨迹。使用[2]中的方法,提取结构点:

  • 首先,将点云分割为结构组件部分和非结构组件部分;
  • 然后,将非结构点投影到从结构组件中提取的平面结构分段上,构造结构点。

2.2 Piece-Wise Planar Segments Extraction

使用平面提取算法提取详细的平面分段:在计算几何算法库(CGAL,computational geometry algorithms library)上执行基于区域增长的平面检测算法[3]。

通过两步来提取平面分段 PP。首先提取大的平面分段,并从预提取平面中分段中未包含的点里提取小平面。可以通过改变结构点的噪声或密度来修改平面分段的提取参数。Table.1 为实验中使用的参数取值,其中 kk 表示计算目标点法向量时使用的邻居点的数量,distmaxdist_{max} 表示组成平面的点到平面的最大距离(区域增长时,将小区域进行聚合使用的参数),anglemaxangle_{max} 表示要合并的两个区域之间的最大角度,NminN_{min} 表示组成一个平面分段的最小点数。

2.3 3D Space Decomposition

3D 单元(cell)复合体 CC 是通过使用平面分段将室内空间分解为多面体单元(空间分段,如 Figure.5 中不同颜色的区域)来构建的,算法如下:

为了有效进行空间分解,对于一个 cell cCc \in C,当平面分段的每个点 XpX_p 都位于 cc 内部时,cc 被平面分段 pp 分为两个部分。Figure.5 展示了数据集 A1 的平面分段和 3D 单元复合体。

ViscVis_c 表示在 3D 单元 cc 中的平面分段的可视度分数,AdjAdj 为邻接单员对的集合:

Adj={(c,c)c,cCc,c are adjacent}Adj = \{ (c, c') | c, c' \in C \cap c, c' \ \mathrm{are\ adjacent}\}

ViscVis_c 由每个平面分段的可见区域的分布来表示。具体地,设 visAreacpvisArea_c^p 表示 3D 单元 cc 中的平面分段 pp 的可视区域。由于结构点稀疏,简单的基于射线跟踪的可见点检测(visiable points detection)算法可能检测出假点。因此提出了一种对不同密度的点具有鲁棒性的可见点检测算法,如算法2 所示:

  • 首先,将结构点 XstrX_{str} 转换为以 3D 单元中心为原点的球坐标;
  • 然后,利用从原点到变换后的结构点的最短距离,计算划分空间的经纬度角偏差(δψ\delta \psi);
  • 最后,选取距离原点最近的点作为每个区域中由角度偏差划分的可见点。

在实验的点云上进行了 1 厘米的网格采样,设置参考角度偏差为 tan1(0.01)\tan^{-1}(0.01) 来检测在 1 厘米网格上采样的点。测试中,参数 kk 被设置为2。

2.4 Water-Tight Model Reconstruction

使用标签内部子(interior)LintL_{int} 和外部子(exterior)LextL_{ext},通过图割算法实现能量最小化[4]来生成室内空间。能量函数包含数据项和平滑项:

E(l)=cCDc(lc)+λ{c,c}AdjVc,c(lc,lc)E(l) = \sum_{c \in C} D_c(l_c) + \lambda \sum_{\{ c, c' \} \in Adj} V_{c, c'} (l_c, l_{c'})

lcl_c 为 3D 单元 cc 的标签,实验中,权重因子 λ\lambda 的取值范围为 0.10,20.1 \sim 0,2

2.4.1 Data Term

数据项由 3D 单元复合体 CC 和轨迹 TT 之间的可见性差异进行构建:

Dc(lc)={mintTvisDiff(c,t),if lcLint1mintTvisDiff(c,t),if lcLextvisDiff(c,t)=1np=1n(visAreacpvisAreatP)21np=1nmax(visAreacp,visAreatp)2D_c(l_c) = \begin{cases} \min_{t \in T} visDiff(c, t), &\mathrm{if}\ l_c \in L_{int} \\ 1 - \min_{t \in T} visDiff(c, t), &\mathrm{if}\ l_c \in L_{ext} \end{cases} \\ visDiff(c, t) = \frac{\sqrt{\frac{1}{n} \sum_{p=1}^n (visArea_c^p - visArea_t^P)^2}}{\sqrt{\frac{1}{n} \sum_{p=1}^n \max(visArea_c^p, visArea_t^p)^2}}

visDiff(c,t)visDiff(c, t) 为 3D 单元 cc 和轨迹点 tt 的可视性差异。使用算法2 和算法3,visAreacpvisArea_c^pvisAreatpvisArea_t^p 为 3D 单元 cc 和轨迹点 tt 处的平面分段 pp 的可视区域。

计算每个 3D 单元中每个轨迹点的 visDiff(c,t)visDiff(c, t),并选择值最小的轨迹点。Figure.6 展示了每个单元格中选定的轨迹点:

  • 室内 3D 单元可以选择可视性差异最小的轨迹点,因为室外 3D 单元对所有轨迹点的可见性差异较大。
  • 选定的轨迹点不是离相应的 3D 单元中心最近的点,因为轨迹点的选取由可见性差异决定。
  • 位于 inter-room 和 inter-floor 连接区域的 3D 单元可以被标记为室内,因为轨迹在建筑物的多个房间或多层之间是连续的。

2.4.2 Smoothness Term

平滑项定义为位于相邻面上的两个相邻单元间的结构点所占面积的比例:

Vc,c(lc,lc)=[1wc,c]g(c,c)wc,c=occupiedAreac,cfaceAreac,cg(lc,lc)={1, if  lclc0, if  lc=lcV_{c, c'}(l_c, l_{c'}) = [1 - w_{c, c'}] \cdot g(c, c') \\ w_{c, c^{\prime}}=\frac{occupiedArea_{c, c^{\prime}}}{faceArea_{c,c'}}\\ g\left(l_c, l_{c^{\prime}}\right)= \begin{cases} 1, & \text { if }\ l_c \neq l_{c^{\prime}} \\ 0, & \text { if }\ l_c=l_{c^{\prime}} \end{cases}

occupiedAreac,coccupiedArea_{c,c'} 表示两个 3D 单元 (c,c)(c,c') 邻接面上结构点所占据的面积,faceAreac,cfaceArea_{c,c'} 表示两个相邻 3D 单元的共享面的面积,有 occupiedAreac,cfaceAreac,coccupiedArea_{c,c'} \le faceArea_{c,c'}。当相邻 3D 单元 (c,c)(c,c') 都在室内空间的内部或外部时,则 occupiedAreac,coccupiedArea_{c,c'} 接近于 0;而当这两个单元位于室内的不同区域(内部或外部))时,occupiedAreac,coccupiedArea_{c,c'} 将接近于 faceAreac,cfaceArea_{c,c'}。因此,wc,cw_{c,c'} 小的两个单元在图中被较大的权重连接,反之则被较小的权重连接。

2.4.3 Water-Tight Mesh Generation

室内空间模型则由被标记为 LintL_{int} 的 3D 单元组成的多面体组。模型通过二维约束的 Delaunay 三角剖分算法[5]对 3D 单元的每个目标面进行三角网格表示。

3 Experimental Results

3.1 Dataset

数据集:

  • A 组:单楼层、多房间
  • B 组:单楼层、无房间
  • C 组:多楼层、多房间

其他:A1、B1、B2、C2、C3 数据集为自采数据集,A2 数据集为 ISPRS 数据集的 TUB1 部分,C1 数据集为 UZH 房间检测数据集的 “House” 部分。

数据集的组成(#Registered Points 为原始点云的点数):

数据集可视化:

3.2 Results

结构点提取结果:

建模结果:

细节处理:

实验误差:

附件

Appendix.1 Watertight Mesh

1.1 定义

三角形网格具有多个属性:

  • 流形(manifold)属性:可以测试三角形网格是否边流形(is_edge_manifold),和顶点流形(is_vertex_manifold),如下定义和图。
    • 如果三角形每条边都与一个或两个三角形相接,则三角形网格是边流形(edge manifold)。
    • 如果顶点的星形(顶点所属三角形的集合)是边流形和边连接的,则三角形网格是顶点流形(vertex manifold),例如,两个或多个面仅由顶点连接,而不是由边连接。
  • 自交属性:如果网格中存在与另一个网格相交的三角形,则为自交。
图 A-1

水密网格可以定义为边流形、顶点流形而不自交的网格。

1.2 参考

Appendix.2 Structural Points Extraction

  • 总结文献[2]中的方法。注意文献[2]中对结构点的表述为 architectural points,而本文为 structural points。

2.1 Architectural Points Cloud Construction

首先,手动移除位于目标环境外的明显噪声点。然后利用凸切算法(Convex Cut Algorithm)提取结构点。如图 A-2 中的 (b) 图所示。但是由图也会发现,结构中出现了很多空洞,这是视点遮挡造成的。

图 A-2

图 A-2 (b) 中的空洞会影响模型的生成,因此使用图 A-3 中的方法把这些空洞填满。

图 A-3

具体算法如下:

图 A-4

具体来说:

  1. 首先,执行 Hidden Point Removal(HPR)[6],在查询位姿(从 SLAM 中估计的 LiDAR 位姿)处提取可见点。
  2. 然后,使用可视的结构点组成结构平面。
  3. 之后,将可见的非结构点投影到对应的结构平面上。

为了给每个非结构点寻找合适的投影结构平面:

  1. 首先,以查询位姿为中心,使用随机垂直平面切割整个空间。
  2. 然后,使用落在垂直平面上的结构点和非结构点构建多边形。
  3. 最后,将每个非结构点沿激光射线的方向投影到相邻的结构平面上。

上述步骤在所有的查询位姿上都执行一次,以构造结构点集合。

2.2 Piece-Wise Planar Segments Extraction

使用 RPCA(Robust Principal Component Analysis)进行平面提取(具体参数见文献[2)。该方法使用了分治算法的思想,但仍然存在问题:

  • 无法包含靠近平面分段边缘的点;
  • 难以提取小的平面分段。

使用一种改进方法:如果提取点平面分段附近的点的角度(可能是点所属 laser 的角度)与平面分段的法向量之间的夹角小于一个阈值(2020^\circ),则把该点提取到对应平面。

参考

  • [1] Oesau, S.; Lafarge, F.; Alliez, P . Indoor scene reconstruction using feature sensitive primitive extraction and graph-cut. ISPRS J. Photogramm. Remote Sens. 2014, 90, 68–82.
  • [2] Lim, G.; Oh, Y.; Kim, D.; Jun, C.; Kang, J.; Doh, N. Modeling of Architectural Components for Large-Scale Indoor Spaces From Point Cloud Measurements. IEEE Robot. Autom. Lett. 2020, 5, 3830–3837.
  • [3] Lafarge, F.; Mallet, C. Creating large-scale city models from 3D-point clouds: A robust approach with hybrid representation.Int. J. Comput. Vis. 2012, 99, 69–85.
  • [4] Boykov, Y.; Veksler, O.; Zabih, R. Fast approximate energy minimization via graph cuts. IEEE Trans. Pattern Anal. Mach. Intell. 2001, 23, 1222–1239.
  • [5] Chew, L.P. Constrained delaunay triangulations. Algorithmica1989, 4, 97–108.
  • [6] S. Katz, A. Tal, and R. Basri, “Direct Visibility of Point Sets”, ACM Trans. Graph., vol. 26, no. 3, pp. 24–35, 2007.