欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Surface Reconstruction from 3D Line Segments

程序员文章站 2022-03-30 13:45:25
...

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个最好的检测。
表面重建
所有的平面相互交叉,将空间划分为很多个小空间,我们根据线段的可观性来判断面片是空的还是填满的。