Surface Reconstruction from 3D Line Segments
Surface Reconstruction from 3D Line Segments
摘要:在人造场景中,由于缺少纹理,基于特征点的3D重建可能会失效,但是线段特征依旧可以被检测得到故可以进一步用来形成面。本文提出了一种新方法,可以从3D线段中重建出密封的表面。首先使用新颖的RANSAC方法提取平面(or line segments that allows multiple shape support.)。然后依据线是否从属于面、是否可见,每个3D形状中的表面被标记为存在或者为空缺。
背景介绍
总览:我们提出来第一个完整的根据带有视觉信息的3D线段来输出一个密封的分段平面的表面模型。首先从线云中提取原始的面,将原始线段分为两类,一类是纹理线段,用作平面支撑。一类是结构性线段,是两个平面的交线。然后我们通过最小化一个关于线型、线段支撑、视觉约束、正则化的能量函数,给每个3D小空间标记为空缺或者占据状态。
主要贡献:
提出了一种基于3D线段的鲁棒平面检测方法,与点相比,线特征可以支撑两个平面,所以不能使用以往了贪心迭代算法。
本文的表面重建完全基于线段特征
相关工作
处理稀疏数据:
线框重建:大部分基于线段特征的思路的研究都集中在线框重建。根据已经匹配好的线段来产生3D线段。
使用线段进行3D重建:
仅使用线段进行表面重建:
3D线段面检测
第一步是检测出输入点云的线段支撑的面。
Candidate plane construction.我们通过最小采样来创建模型。比方说对于一个面,两个非共线的线段可以用来定义一个平面。两根共线3D线段可以有两种情况,一种是平行,一种是相交。但是人造环境中平行的线段太多了,比如说不同的外墙上的线段。所以我们舍弃平行的线对。
Greedy detection and multi-support issues. 我们以线段对为单位进行采样,提取最重要的平面。比如说在一定次数的采样后,拥有最多支撑线段的平面。与常规的RANSAC不一样的是,我们不能立马移除支撑线段因为他们属于两个平面。如果移除的话,只能检测出主要的平面,失去只有少量支撑线的平面。而如果我们全部保留的话,那样就导致主要的大平面会被多次检测到,也会失去支撑线较少的小平面。
我们的解决方法是限制每条线支撑的平面数量,附加条件是防止共向线段属于相似平面。
Candidate plane generation. Λ§表示的是支撑平面P的线段集合,Π(l)表示的是线段l支撑的平面的集合。
如果取样的第一根线条是一个新的线条,那么第二根线条随便取。如果取样的线条第一根线条之前已经被取样过一次了,那么第二根线条不能是该线条已经组成的平面中的线条。
Inlier selection. 当选择一个候选平面P之后,我们往Λ§里添加距离平面P比较近的线段成员。
如果线段l已经是别的平面P’的支撑线段了,然后也将l列为P’的支撑线段了,l就是一个结构性线段了(structural segment)。对于这种,我们认为线段l接近两个平面交线。接近交线和接近两个平面相比,约束更加严格,因为一根直线可以接近两个平行相近的平面,但是平面的交线却是无穷远。
Plane selection. 最后,我们采样,保留拥有最多inliers的平面。
Plane refitting. 每个平面生成后,先使用平面上的直线对平面进行拟合,然后再存起来。平面方程更新之后,再次检查是否有新的线段位于平面上,继续重新拟合。
Plane fusion. 建筑内部对于面的误差容忍性不一样,对于门框这种细节要处理好的话,可能就将墙面分为几个面片了。既要保存细节,也要防止任意分割。对于任意面片角度差小于θ_fus,距离小于ϵ_fus、并且拥有公共的内点(inlier)不小于一定比例。具体做法是从面集中选择夹角最小的两个面,融合后替换掉原本的两个面。
Plane limitation. 为了保证不会有太多的面放到了表面重建的步骤中,所以只选出最好的N_max个最好的检测。
表面重建
所有的平面相互交叉,将空间划分为很多个小空间,我们根据线段的可观性来判断面片是空的还是填满的。