一种基于结构分析的点云室内场景布局重建方法与流程

文档序号:23057929发布日期:2020-11-25 17:38阅读:92来源:国知局
一种基于结构分析的点云室内场景布局重建方法与流程

本发明属于计算机视觉和图像处理方法技术领域,涉及一种基于结构分析的点云室内场景布局重建方法。



背景技术:

在计算机视觉与图像处理领域,对各种场景的三维建模一直都是一个具有重要研究意义和应用价值的课题。其在移动机器人自主导航、slam、虚拟现实和3d打印等诸多方面都发挥着十分重要的作用。现实世界的各种场景中,室内场景是与人们工作和生活最为密切相关的场所,是人类感知世界的最重要组成部分,随着机器人技术、计算机视觉以及人工智能等技术的飞速发展,室内场景的重建显得更为迫切。室内场景的三维建模可以应用于火灾救援、密室探险和考古挖掘等必不可少却能够对人类生命造成威胁的探测活动中。但基于三维激光点云数据的室内场景重建存在以下三个难点:①玻璃窗户、镜面等非漫反射物体造成三维点云数据采集的困难,容易干扰到对环境的理解;②室内场景杂物较多,环境相对复杂,存在遮挡的可能较大,这会导致信息不全使物体难以识别;③大范围采集场景数据产生大量噪声,点云碎片化严重,不利于场景分割与理解的展开。因此,对于室内场景的三维重建仍然是一个具有挑战性的研究。

目前较为常用的几种室内场景重建方法有基于数据驱动的方法、基于模型驱动的方法以及基于机器学习的方法。基于数据驱动的方法能够考虑到场景数据的全面性,通过分析建筑物点云的数据特征,唯一地确定建筑物形状,但是由于需要考虑场景中的大量数据特征,导致算法设计较为复杂,且处理速度较慢。基于模型驱动的方法对于建筑物重建模型时规则化程度较高,在数据采集过程中由局部遮挡引起的部分建筑数据缺失也能得到很好的弥补,处理方法较为简单高效,但是基于模型重建时并未完全依据数据,其结果可能会产生错误。基于机器学习的方法使用了先进的算法与技术,从大量训练集数据中学习并分析数据的各种特征,形成一系列场景重建的方法过程,此类方法对数据依赖程度较高,学习不同的数据集会获取对应的不同结果,数据集的选择越规范,重建结果更精确,但是该类方法一般所需数据量都较为庞大,且对设备性能要求较高,目前难以大量推广。



技术实现要素:

本发明的目的是提供一种基于结构分析的点云室内场景布局重建方法,解决了现有技术中存在的由于需要考虑场景中的大量数据特征,导致算法设计较为复杂且处理速度较慢的问题。

本发明所采用的技术方案是,一种基于结构分析的点云室内场景布局重建方法,具体按照如下步骤实施:

步骤1,对室内场景进行预处理操作;

步骤2,对步骤1进行预处理的室内场景进行粗分割,提取房间的轮廓;

步骤3,根据经步骤2提取的房间的轮廓对室内场景房间的布局进行划分,划分出房间布局;

步骤4,分割经步骤1预处理的室内场景的不同面的墙壁并进行重建,然后在步骤3划分的房间布局进行室内场景的全局结构重建,重建完整的室内结构。

本发明的特征还在于,

步骤1具体为:

步骤1.1,通过pca主成分分析法获取室内场景主平面,由主平面的法向量确定旋转方向,将原始室内场景点云数据进行场景旋转操作,使其处于自然竖直状态;

步骤1.2,去掉经步骤1.1旋转的室内场景点云数据的地板与天花板数据;

步骤1.3,对经步骤1.2去除地板与天花板数据的室内场景点云数据使用pca主成分分析法拟合局部平面来确定法向量,根据法向量滤掉非墙壁数据点。

步骤1.1中将原始室内场景点云数据进行场景旋转操作具体按照如下步骤实施:

步骤1.1.1,室内场景点云数据为p={p1,p2,…,pn},其中,pi表示点云文件中第i个点的坐标信息(xi,yi,zi),将原始室内场景点云表示为n×3的矩阵a={xt,yt,zt},其中,x={x1,x2,…,xn},y={y1,y2,…,yn},z={z1,z2,…,zn},其中,xi是第i个点的x轴坐标点,yi是第i个点的y轴坐标点,zi是第i个点的z轴坐标点,i=1,2,3…n;

步骤1.1.2,在矩阵a中每一位坐标值减去各自的平均值得到矩阵d;

其中,是n个点的x坐标点的平均值,是n个点的y坐标点的平均值,是n个点的z坐标点的平均值;

步骤1.1.3,计算协方差矩阵

步骤1.1.4,采用奇异值分解法求协方差矩阵的特征值与特征向量,对特征值按从大到小排序,选择前两个特征值v1和v2,对应的特征向量v1=(a1,b1,c1)和v2=(a2,b2,c2)即为所求得的场景主次趋势方向v;

v=v1×v2=(b1c2-c1b2,c1a2-a1c2,a1b2-b1a2)(3)

步骤1.1.5,通过旋转v,使得场景处于自然竖直状态,具体为:

v′为v在坐标平面xoy内的投影向量,与x轴之间的夹角为α,v″为向量v在坐标平面xoz内的投影向量,与z轴之间的夹角为β,将场景绕z坐标轴顺时针旋转角度α,确定第一个旋转矩阵为rz,然后顺时针绕y轴旋转角度β,确定了第二个旋转矩阵为ry,将点云场景转化为n×3的矩阵a后进行旋转,得到最终的旋转结果为vres=(arz)ry=a(rzry),其中,

步骤1.2具体按照下述步骤进行:

步骤1.2.1,统计经步骤1.1旋转的室内场景点云数据在z坐标方向上的分布构造直方图,其中,组距的设置是根据点的z坐标范围,将其均匀划分为200份,将其间隔作为组距μ,然后根据组距确定每组数据的坐标范围及处于该范围的点的数目完成直方图的构造;

步骤1.2.2,将直方图中z坐标的某个极值设为预期峰值peak;

步骤1.2.3,找出以peak为中心,半径为radius的区域中出现的全体点集m,将其归属于一个聚类c,其中,radius为μ的四倍;

步骤1.2.4,以peak为中心点,计算从peak到集合m中每个数据点构成的向量,叠加所有向量,可得到漂移向量shift,peak=peak+shift,即peak沿着shift的方向移动,移动距离是||shift||;

步骤1.2.5,重复步骤1.2.3、1.2.4,直到shift小于设定的阈值σ,即就是迭代到收敛或达到了最大迭代次数10次,记录当前的peak,迭代中所有出现在以peak为中心radius为半径圆内的点都归到一类c中;

步骤1.2.6,如果收敛时,当前簇c的peak与其它已经存在的簇c1中心的距离小于阈值σ,那么把c和c1合并,数据点出现次数也对应合并,其中,σ为μ的二倍,否则,把c作为新的聚类;

步骤1.2.7,找到天花板和地面的聚类点集后,将其去除。

步骤1.3具体按照如下步骤实施:

步骤1.3.1,对经步骤1.2去除地板与天花板数据的室内场景点云数据用kd-tree组织点云模型中的所有点;

步骤1.3.2,对于经步骤1.3.1组织的所有点中某个点p的法向量求解,首先利用kd-tree查询其k个近邻点;

步骤1.3.3,根据k个近邻点构造协方差矩阵;

步骤1.3.4,用奇异值分解算法求解步骤1.1.3中协方差矩阵最大的两特征向量的向量积,该向量积就是当前点的法向量;

步骤1.3.5,重复步骤1.3.2、1.3.3和1.3.4,求出所有点的法向量;

步骤1.3.6,遍历所有点,如果对于点pi,若|ni·nz|<tangle,则删除点pi,其中,ni为点pi的法向量,nz=(0,0,1)是沿纵轴的单位向量,据此删除所有此类非墙壁点,其中,tangle∈(0,2]。

步骤2具体为:

步骤2.1,对经步骤1预处理的室内场景点云数据投影到坐标平面xoy中,然后将x,y坐标不同的点作为数据投影的有效点,得到原始室内场景结构轮廓,即就是投影数据;

步骤2.2,应用基于改进的ransac算法,对步骤2.1投影得到的原始室内场景结构轮廓进行直线检测,具体按照下述步骤进行:

步骤2.2.1,创建直线集合h,用于存放直线模型;

步骤2.2.2,构造投影数据的二维kd-tree;

步骤2.2.3,求解未测点p的k近邻,选取点p与其中一个邻近点求解直线模型参数,并将该邻近点标记为已检测;

步骤2.2.4,在最大误差范围内统计符合该直线模型的数据点数目,如果符合模型参数的样本点,即内点所占的比例大于设定的阈值0.8,则记录该直线,否则利用所有内点重新确定直线方程参数,然后进入下一次迭代;

步骤2.2.5,重复2.2.2~2.2.4,直到p的邻近点均已被检测;

步骤2.2.6,计算该直线模型的方向向量,在检测结果h中查询共线或接近共线的直线集合,加入其中,否则,无共线直线时新建类别h′,加入h中,然后标记该直线的内点;

步骤2.2.7,重复2.2.2~2.2.6,直到所有点已被检测,得到检测结果h={h1,h2,…,hn};

步骤2.3,采用基于meanshift方法将直线检测结果进行聚类,去除较短直线以及杂乱直线的影响,最后得到与墙壁一一对应的直线检测结果,从而得到室内房间轮廓。

步骤2.3具体为:

步骤2.3.1,选择经2.2步骤得到的直线分割结果簇hi,在结果簇中随机选择一条作为起始中心直线,设定center=0,表示与该直线间的距离;

步骤2.3.2,找出与中心直线center距离小于radius的所有直线作为集合u,认为这些直线同属于一个聚类hci,同时在该聚类中将该直线出现的次数加1;

步骤2.3.3,以center为基准,计算从center到集合u中每条直线的距离,为center其中一侧的直线距离设定为负值,将这些距离相加,得到漂移量distance;

步骤2.3.4,更新中心直线center=center+distance,即中心直线沿着distance的方向移动,移动距离是|distance|,根据center与直线结果簇hi的直线方向确定新的中心直线,清空集合u,为下一次均值漂移做准备;

步骤2.3.5,重复上述2.3.2~2.3.4步骤,直到漂移量distance的值小于阈值μ/5,即为迭代到收敛,记录此时的center,将此迭代中经过的所有直线均归类为簇hi;

步骤2.3.6,重复2.3.1~2.3.5直到归类完所有的结果簇h;

步骤2.3.7,如果簇hi的center与其它已经存在的簇hj的center之间距离小于墙壁厚度2μ,那么把hj和hi合并,直线出现次数也对应合并;

步骤2.3.8,分类:根据每个类,对每个点的访问频率,取访问频率最大的m个类,每个类别以其中心直线作为直线优化结果,得到的直线集合l={l1,l2,…,ln}作为潜在墙壁优化结果,即就是室内房间轮廓,其中,m值根据数据中房间数目预先设定。

步骤3具体为:

步骤3.1,由公式(5)确定扫描仪位置p,min.ptx为x坐标最小值,min.pty为y坐标最小值,max.pty为y坐标最小值,min.ptz为z坐标最小值,max.ptz为z坐标最大值;

p=(min.ptx,(min.pty+max.pty)/2,(min.ptz+max.ptz)/2)(5)

步骤3.2,求出步骤2房间粗分割结果中的每一个预期房间元素的右侧边界中心点;

步骤3.3,以点p为起始点,向右延伸穿过预期房间右侧边界中心点构造射线ray;

步骤3.4,求解射线ray与该房间的交点数目number,若交点数目number为偶数,将该房间标签化为1,表示为潜在房间,否则,将该房间标签化为0;

步骤3.5,将每个预期房间元素转化为无向图g中的一个顶点,对于能相互连接的预期房间添加边信息,其中边是具有权值的,边的权值通过与之连接的两个预期房间的中心点的欧氏距离定义,其中,房间中心点通过房间的顶点求均值得到,具体如公式(5)所示:

x,y,z为房间中心点的三维坐标,而xi,yi,zi是二维平面图中房间的顶点pi的三维坐标;

步骤3.6,确定了每个房间的中心点之后,通过公式(7)求解房间中心点o和q的欧氏距离,从而得到房间中心点及其欧氏距离的求解结果;

其中,xo,yo,zo是房间中心点o的三维坐标,xq,yq,zq是房间中心点q的三维坐标;

步骤3.7,向该无向图g中再添加了2个顶点,分别为源点“s”和汇点“t”,设置与源点相连的顶点权值为0,汇点相连的顶点权值为无穷大;

步骤3.8,建立无向图g的能量方程,如公式(8)所示;

e=∑i∈vdi(li)+ri,j(li,lj)(8)

其中,di为数据项,ri,j为约束项,数据项由式(9)确定,约束项由式(10)确定;

其中,li为房间i的标签,系数c=0.6,si为归一化后的面积,即预期房间面积除以整个预期房间的初步划分结果的面积;

li,j为预期房间i、j的欧氏距离,该距离除以整个预期房间划分结果的最长边可做归一化处理,权重ωi,j为该预期房间占总房间初步划分结果总面积的比例;

步骤3.9,使用最大流/最小割算法对其进行能量最小化求解,找到从源点s到汇点t的一条增广路径,这条增广路径作为无向图g的最小割,最终将最小割映射到房间粗分割结果中,从而得到房间布局信息。

步骤4具体为:

步骤4.1,对经过步骤1处理后的数据,应用区域增长算法分割出不同面的墙壁,具体为:

步骤4.1,对经过步骤1处理后的数据,应用区域增长算法分割出不同面的墙壁,具体为:

步骤4.1,对经过步骤1处理后的数据,应用区域增长算法分割出不同面的墙壁,具体按照下述步骤进行:

步骤4.1.1,为经步骤1处理后的室内场景点云数据构造kd_tree;

步骤4.1.2,在kd_tree中搜索当前点的k个邻近点;

步骤4.1.3,根据当前点以及其k个近邻点构造协方差矩阵;

步骤4.1.4,采用奇异值分解算法进行特征分解,最大的两特征向量的向量积即为当前点的法向量;

步骤4.1.5,重复上述4.1.2~4.1.4步骤,直到求出所有点的法向量;

步骤4.1.6,为点云数据中的每个点定义平面标记,初始标记为0,即flatindex=0,表示该点未被标记;

步骤4.1.7,遍历点云数据中的每个点,若该点的平面标记为0,为当前点设置墙壁类别为flatindex;

步骤4.1.8,将该邻近点入栈,在kd_tree中搜索该点的k个邻近点;

步骤4.1.9,判断该点与其k个邻近点法向量夹角的余弦值cos,若1-cos<0.1,则标记该邻近点墙壁类别为flatindex,将该邻近点入栈;

步骤4.1.10,若栈不为空,取栈顶元素为搜索点,在kd_tree中搜索该点的k个邻近点,判断栈顶元素与其k个邻近点法向量夹角的余弦值cos,若1-cos<0.1,则标记该邻近点墙壁类别为flatindex,将该邻近点入栈;

步骤4.1.11,重复上述步骤直到标记完所有的点;

步骤4.1.12,遍历点云数据中的每一个点,根据每个点的平面类别flatindex组织点云为不同墙壁,将点云数目小于阈值的墙壁删除得到结果walls;

步骤4.2,对分割的墙壁进行栅格化,分析各墙壁是否含有门窗,对有门窗的墙壁,将各栅格区别分析并拼接,对没有门窗的墙壁,使用obb包围盒的简单方式进行重建;

步骤4.3,对全局结构进行重建。

步骤4.2具体为:

步骤4.2.1,将墙壁划分为35×20的栅格,栅格尺寸的长度gl和宽度gw分别为:gl=wl/35,gw=ww/20,其中,wl为墙壁长度,ww为墙壁宽度;

步骤4.2.2,统计该栅格单元中点的数目numg,根据式(11)求得单位面积的点密度dg,并根据公式(12)计算分类阈值dw:

其中,dgi表示某栅格单元i的点密度;

步骤4.2.3,判断某个栅格单元i使得dgi<dw,则该墙壁为复杂墙壁,否则,该墙壁视为单一墙壁;

步骤4.2.4,对单一墙壁应用obb包围盒进行墙壁重建;

步骤4.2.5,对复杂墙壁,将点密度小于阈值dw的单元格看作门窗开口位置,将开口位置从墙壁中删除,将点密度大于阈值dw的栅格单元拼接起来,将墙壁拟合为包含门窗细节的结果;

步骤4.3具体为:

步骤4.3.1,在步骤3获取到的室内场景房间布局信息的基础上,将房间布局的二维分割结果在竖直方向即z坐标轴上进行延伸,向z坐标轴负方向延伸至地面的上界坐标处,向z轴正方向延伸至天花板下界坐标处,将房间布局平面图中的每条直线看作墙壁的中心线,为其赋予合适的厚度2μ,μ为组距,即将z坐标平均分为200份,得到室内场景各个墙壁在三维空间中的粗略位置;

步骤4.3.2,将墙壁粗略位置与步骤4.2场景分割得到的墙壁分类重建结果相对应,并将墙壁的z坐标范围限定在地面与天花板位置之间,从而重建得到每个房间的不同墙壁结构,然后在墙壁两端分别补齐地面与天花板平面。

本发明的有益效果是:

本发明解决的现有技术中存在的由于需要考虑场景中的大量数据特征,导致算法设计较为复杂,且处理速度较慢以及需数据量都较为庞大,且对设备性能要求较高,目前难以大量推广的问题,本发明室内场景点云数据处理简单有序,布局重建工作的简单,在有效性和稳定性都有了很大的提高,并且拥有较好的鲁棒性,丰富了计算机图形学和视觉智能的方法体系。

附图说明

图1是本发明一种基于结构分析的点云室内场景布局重建方法步骤1中得到自然竖直室内场景数据;

图2是本发明一种基于结构分析的点云室内场景布局重建方法步骤1中去除室内场景的地板和天花板的数据;

图3是本发明一种基于结构分析的点云室内场景布局重建方法步骤1中滤掉室内场景非墙壁的数据;

图4是本发明一种基于结构分析的点云室内场景布局重建方法步骤2中将室内场景数据投影到坐标平面xoy中的数据;

图5是本发明一种基于结构分析的点云室内场景布局重建方法步骤2中对投影结果进行直线检测的结果;

图6是本发明一种基于结构分析的点云室内场景布局重建方法步骤2中对直线结果进行聚类的结果;

图7是本发明一种基于结构分析的点云室内场景布局重建方法步骤3中划分出房间布局的结果;

图8是本发明一种基于结构分析的点云室内场景布局重建方法步骤4中分割出不同面的墙壁的结果;

图9是本发明一种基于结构分析的点云室内场景布局重建方法步骤4中栅格化墙壁并重建墙壁的结果;

图10是本发明一种基于结构分析的点云室内场景布局重建方法步骤4中对全局结构进行重建的结果。

具体实施方式

下面结合附图和具体实施方式对本发明进行详细说明。

本发明一种基于结构分析的点云室内场景布局重建方法,具体按照如下步骤实施:

步骤1,对室内场景进行预处理操作;具体为:

步骤1.1,通过pca主成分分析法获取室内场景主平面,由主平面的法向量确定旋转方向,将原始室内场景点云数据进行场景旋转操作,使其处于自然竖直状态;其中,将原始室内场景点云数据进行场景旋转操作具体按照如下步骤实施:

步骤1.1.1,室内场景点云数据为p={p1,p2,…,pn},其中,pi表示点云文件中第i个点的坐标信息(xi,yi,zi),将原始室内场景点云表示为n×3的矩阵a={xt,yt,zt},其中,x={x1,x2,…,xn},y={y1,y2,…,yn},z={z1,z2,…,zn},其中,xi是第i个点的x轴坐标点,yi是第i个点的y轴坐标点,zi是第i个点的z轴坐标点,i=1,2,3…n;

步骤1.1.2,在矩阵a中每一位坐标值减去各自的平均值得到矩阵d;

其中,是n个点的x坐标点的平均值,是n个点的y坐标点的平均值,是n个点的z坐标点的平均值;

步骤1.1.3,计算协方差矩阵

步骤1.1.4,采用奇异值分解法求协方差矩阵的特征值与特征向量,对特征值按从大到小排序,选择前两个特征值v1和v2,对应的特征向量v1=(a1,b1,c1)和v2=(a2,b2,c2)即为所求得的场景主次趋势方向v;

v=v1×v2=(b1c2-c1b2,c1a2-a1c2,a1b2-b1a2)(3)

步骤1.1.5,通过旋转v,使得场景处于自然竖直状态,如图1所示,具体为:

v′为v在坐标平面xoy内的投影向量,与x轴之间的夹角为α,v″为向量v在坐标平面xoz内的投影向量,与z轴之间的夹角为β,将场景绕z坐标轴顺时针旋转角度α,确定第一个旋转矩阵为rz,然后顺时针绕y轴旋转角度β,确定了第二个旋转矩阵为ry,由于旋转矩阵数据量较小,而原始数据较大,为了简化计算,可根据矩阵运算的结合律(ab)c=a(bc),可以先将两旋转矩阵进行相乘,然后对原始数据进行旋转,由于原始数据是一系列包含三维坐标值的散乱点集,将点云场景转化为n×3的矩阵a后进行旋转,得到最终的旋转结果为vres=(arz)ry=a(rzry),其中,

步骤1.2,去掉经步骤1.1旋转的室内场景点云数据的地板与天花板数据;具体按照下述步骤进行:

步骤1.2.1,统计经步骤1.1旋转的室内场景点云数据在z坐标方向上的分布构造直方图,其中,组距的设置是根据点的z坐标范围,将其均匀划分为200份,将其间隔作为组距μ,然后根据组距确定每组数据的坐标范围及处于该范围的点的数目完成直方图的构造;

步骤1.2.2,将直方图中z坐标的某个极值设为预期峰值peak;

步骤1.2.3,找出以peak为中心,半径为radius的区域中出现的全体点集m,将其归属于一个聚类c,其中,radius为μ的四倍;

步骤1.2.4,以peak为中心点,计算从peak到集合m中每个数据点构成的向量,叠加所有向量,可得到漂移向量shift,peak=peak+shift,即peak沿着shift的方向移动,移动距离是||shift||;

步骤1.2.5,重复步骤1.2.3、1.2.4,直到shift小于设定的阈值σ,即就是迭代到收敛或达到了最大迭代次数10次,记录当前的peak,迭代中所有出现在以peak为中心radius为半径圆内的点都归到一类c中;

步骤1.2.6,如果收敛时,当前簇c的peak与其它已经存在的簇c1中心的距离小于阈值σ,那么把c和c1合并,数据点出现次数也对应合并,其中,σ为μ的二倍,否则,把c作为新的聚类;

步骤1.2.7,找到天花板和地面的聚类点集后,将其去除,如图2所示;

步骤1.3,对经步骤1.2去除地板与天花板数据的室内场景点云数据使用pca主成分分析法拟合局部平面来确定法向量,根据法向量滤掉非墙壁数据点,具体按照如下步骤实施:

步骤1.3.1,对经步骤1.2去除地板与天花板数据的室内场景点云数据用kd-tree组织点云模型中的所有点;

步骤1.3.2,对于经步骤1.3.1组织的所有点中某个点p的法向量求解,首先利用kd-tree查询其k个近邻点;

步骤1.3.3,根据k个近邻点构造协方差矩阵;

步骤1.3.4,用奇异值分解算法求解步骤1.1.3中协方差矩阵最大的两特征向量的向量积,该向量积就是当前点的法向量;

步骤1.3.5,重复步骤1.3.2、1.3.3和1.3.4,求出所有点的法向量;

步骤1.3.6,遍历所有点,如果对于点pi,若|ni·nz|<tangle,则删除点pi,其中,ni为点pi的法向量,nz=(0,0,1)是沿纵轴的单位向量,据此删除所有此类非墙壁点,如图3所示,其中,考虑到角度的误差,针对不同的数据为其设置角度阈值tangle∈(0,2];

步骤2,对步骤1进行预处理的室内场景进行粗分割,提取房间的轮廓;具体为:

步骤2.1,对经步骤1预处理的室内场景点云数据投影到坐标平面xoy中,是通过舍弃第三个维度(z坐标)的方式将点云投影到地面,舍弃之后,需要判断其余两维坐标是否相同,只保留x,y坐标不同的点作为数据投影的有效点,得到原始室内场景结构轮廓,即就是投影数据,如图4所示;

步骤2.2,应用基于改进的ransac算法,对步骤2.1投影得到的原始室内场景结构轮廓进行直线检测,具体按照下述步骤进行:

步骤2.2.1,创建直线集合h,用于存放直线模型;

步骤2.2.2,构造投影数据的二维kd-tree;

步骤2.2.3,求解未测点p的k近邻,选取点p与其中一个邻近点求解直线模型参数,并将该邻近点标记为已检测;

步骤2.2.4,在最大误差范围内统计符合该直线模型的数据点数目,如果符合模型参数的样本点,即内点所占的比例大于设定的阈值0.8,则记录该直线,否则利用所有内点重新确定直线方程参数,然后进入下一次迭代;

步骤2.2.5,重复2.2.2~2.2.4,直到p的邻近点均已被检测;

步骤2.2.6,计算该直线模型的方向向量,在检测结果h中查询共线或接近共线的直线集合,加入其中,否则,无共线直线时新建类别h′,加入h中,然后标记该直线的内点;

步骤2.2.7,重复2.2.2~2.2.6,直到所有点已被检测,得到检测结果h={h1,h2,…,hn},如图5所示;

步骤2.3,采用基于meanshift方法将直线检测结果进行聚类,去除较短直线以及杂乱直线的影响,最后得到与墙壁一一对应的直线检测结果,从而得到室内房间轮廓,具体为:

步骤2.3.1,选择经2.2步骤得到的直线分割结果簇hi,在结果簇中随机选择一条作为起始中心直线,设定center=0,表示与该直线间的距离;

步骤2.3.2,找出与中心直线center距离小于radius的所有直线作为集合u,认为这些直线同属于一个聚类hci,同时在该聚类中将该直线出现的次数加1;

步骤2.3.3,以center为基准,计算从center到集合u中每条直线的距离,为center其中一侧的直线距离设定为负值,将这些距离相加,得到漂移量distance;

步骤2.3.4,更新中心直线center=center+distance,即中心直线沿着distance的方向移动,移动距离是|distance|,根据center与直线结果簇hi的直线方向确定新的中心直线,清空集合u,为下一次均值漂移做准备;

步骤2.3.5,重复上述2.3.2~2.3.4步骤,直到漂移量distance的值小于阈值μ/5,即为迭代到收敛,记录此时的center,将此迭代中经过的所有直线均归类为簇hi;

步骤2.3.6,重复2.3.1~2.3.5直到归类完所有的结果簇h;

步骤2.3.7,如果簇hi的center与其它已经存在的簇hj的center之间距离小于墙壁厚度2μ,那么把hj和hi合并,直线出现次数也对应合并;

步骤2.3.8,分类:根据每个类,对每个点的访问频率,取访问频率最大的m个类,每个类别以其中心直线作为直线优化结果,得到的直线集合l={l1,l2,…,ln}作为潜在墙壁优化结果,即就是室内房间轮廓,其中,m值根据数据中房间数目预先设定,如图6所示;

步骤3,根据经步骤2提取的房间的轮廓对室内场景房间的布局进行划分,划分出房间布局;如图7所示,具体为:

步骤3.1,由公式(5)确定扫描仪位置p,min.ptx为x坐标最小值,min.pty为y坐标最小值,max.pty为y坐标最小值,min.ptz为z坐标最小值,max.ptz为z坐标最大值;

p=(min.ptx,(min.pty+max.pty)/2,(min.ptz+max.ptz)/2)(5)

步骤3.2,求出步骤2房间粗分割结果中的每一个预期房间元素的右侧边界中心点;

步骤3.3,以点p为起始点,向右延伸穿过预期房间右侧边界中心点构造射线ray;

步骤3.4,求解射线ray与该房间的交点数目number,若交点数目number为偶数,将该房间标签化为1,表示为潜在房间,否则,将该房间标签化为0;

步骤3.5,将每个预期房间元素转化为无向图g中的一个顶点,对于能相互连接的预期房间添加边信息,其中边是具有权值的,边的权值通过与之连接的两个预期房间的中心点的欧氏距离定义,其中,房间中心点通过房间的顶点求均值得到,具体如公式(5)所示:

x,y,z为房间中心点的三维坐标,而xi,yi,zi是二维平面图中房间的顶点pi的三维坐标;

步骤3.6,确定了每个房间的中心点之后,通过公式(7)求解房间中心点o和q的欧氏距离,从而得到房间中心点及其欧氏距离的求解结果;

其中,xo,yo,zo是房间中心点o的三维坐标,xq,yq,zq是房间中心点q的三维坐标;

步骤3.7,向该无向图g中再添加了2个顶点,分别为源点“s”和汇点“t”,设置与源点相连的顶点权值为0,汇点相连的顶点权值为无穷大;

步骤3.8,建立无向图g的能量方程,如公式(8)所示;

e=∑i∈vdi(li)+ri,j(li,lj)(8)

其中,di为数据项,ri,j为约束项,数据项由式(9)确定,约束项由式(10)确定;

数据项综合考虑预期房间的不同尺寸与其标签化结果,为其设置不同权值。由于房间的面积一般不是特别大,所以对面积较大的预期房间赋予较大惩罚值,则用式(9)求解数据项,以增加数据本身对房间分割的有效约束,其中,根据先验知识:房间内部一般会采集到更多的点云数据,则为空单元格设置较大惩罚值,而使得非空预期房间更容易分类为房间,故当预期房间为空时乘以系数c=0.6,非空时乘以系数1-c,si为归一化后的面积,即预期房间面积除以整个预期房间的初步划分结果的面积;

约束项用来降低最终模型复杂性,其根据相邻预期房间的欧氏距离按比例设置惩罚值,li,j为预期房间i、j的欧氏距离,该距离除以整个预期房间划分结果的最长边可做归一化处理。为了结果更准确,可非空预期房间减小权重以降低权值,从而增加保留程度。约束项ri,j的计算公式如式(10)所示,其中,权重为该预期房间占总房间初步划分结果总面积的比例;

li,j为预期房间i、j的欧氏距离,该距离除以整个预期房间划分结果的最长边可做归一化处理,权重ωi,j为该预期房间占总房间初步划分结果总面积的比例;

步骤3.9,使用最大流/最小割算法对其进行能量最小化求解,找到从源点s到汇点t的一条增广路径,这条增广路径作为无向图g的最小割,最终将最小割映射到房间粗分割结果中,从而得到房间布局信息;

步骤4,分割经步骤1预处理的室内场景的不同面的墙壁并进行重建,然后在步骤3划分的房间布局进行室内场景的全局结构重建,重建完整的室内结构,具体为:

步骤4.1,对经过步骤1处理后的数据,应用区域增长算法分割出不同面的墙壁,具体为:

步骤4.1,对经过步骤1处理后的数据,应用区域增长算法分割出不同面的墙壁,具体按照下述步骤进行:

步骤4.1.1,为经步骤1处理后的室内场景点云数据构造kd_tree;

步骤4.1.2,在kd_tree中搜索当前点的k个邻近点;

步骤4.1.3,根据当前点以及其k个近邻点构造协方差矩阵;

步骤4.1.4,采用奇异值分解算法进行特征分解,最大的两特征向量的向量积即为当前点的法向量;

步骤4.1.5,重复上述4.1.2~4.1.4步骤,直到求出所有点的法向量;

步骤4.1.6,为点云数据中的每个点定义平面标记,初始标记为0,即flatindex=0,表示该点未被标记;

步骤4.1.7,遍历点云数据中的每个点,若该点的平面标记为0,为当前点设置墙壁类别为flatindex;

步骤4.1.8,将该邻近点入栈,在kd_tree中搜索该点的k个邻近点;

步骤4.1.9,判断该点与其k个邻近点法向量夹角的余弦值cos,若1-cos<0.1,则标记该邻近点墙壁类别为flatindex,将该邻近点入栈;

步骤4.1.10,若栈不为空,取栈顶元素为搜索点,在kd_tree中搜索该点的k个邻近点,判断栈顶元素与其k个邻近点法向量夹角的余弦值cos,若1-cos<0.1,则标记该邻近点墙壁类别为flatindex,将该邻近点入栈;

步骤4.1.11,重复上述步骤直到标记完所有的点;

步骤4.1.12,遍历点云数据中的每一个点,根据每个点的平面类别flatindex组织点云为不同墙壁,将点云数目小于阈值的墙壁删除得到结果walls,如图8所示;

步骤4.2,对分割的墙壁进行栅格化,分析各墙壁是否含有门窗,对有门窗的墙壁,将各栅格区别分析并拼接,对没有门窗的墙壁,使用obb包围盒的简单方式进行重建;具体为:

步骤4.2.1,,确定栅格单元的尺寸,由于常见的墙壁长宽比例有2:1和3:2,且门窗等开口占墙壁空间较多,因此,检测开口时,墙壁栅格化尺寸可以偏大一些,兼顾精确度、算法复杂度以及门窗在墙壁中的规则性,本文对常用的墙壁长宽比求均值,将墙壁划分为35×20的栅格,栅格尺寸的长度gl和宽度gw分别为:gl=wl/35,gw=ww/20,其中,wl为墙壁长度,ww为墙壁宽度;

步骤4.2.2,确定栅格单元属性值,即单位面积的点云密度,首先,在三维空间中,设置墙壁的厚度为2μ,由墙壁对应的平面图中线段确定其中心位置坐标,从而确定每个栅格单元的三维坐标范围,统计该栅格单元中点的数目numg之后,根据栅格尺寸对点云密度进行归一化,根据式(11)求得单位面积的点密度作为栅格单元的属性值,分类阈值dw由栅格单元点密度均值确定,如式(12)所示;统计该栅格单元中点的数目numg,根据式(11)求得单位面积的点密度dg,并根据公式(12)计算分类阈值dw:

其中,dgi表示某栅格单元i的点密度;

步骤4.2.3,判断某个栅格单元i使得dgi<dw,则该墙壁为复杂墙壁,否则,当所有单元格的单位面积点密度均不小于阈值时,将该墙壁视为单一墙壁;

步骤4.2.4,对单一墙壁应用obb包围盒进行墙壁重建;具体为:

步骤4.2.4.1,若该类墙壁为不包含门窗的单一墙壁,首先构造点云数据的协方差矩阵;

步骤4.2.4.2,采用奇异值分解法(svd)求出协方差矩阵的特征值与特征向量,对其进行排序并归一化特征向量,随后将三个特征向量施密特正交化之后便可作为obb的三个主轴;

步骤4.2.4.3,将全体点云数据投影到三个主轴上估算出obb的中心点以及长宽高信息,求出该obb盒的八个顶点,完成obb包围盒的求解;

步骤4.2.5,对复杂墙壁,将点密度小于阈值dw的单元格看作门窗开口位置,将开口位置从墙壁中删除,将点密度大于阈值dw的栅格单元拼接起来,将墙壁拟合为包含门窗细节的结果,如图9所示;

步骤4.3,对全局结构进行重建,具体为:

步骤4.3.1,在步骤3获取到的室内场景房间布局信息的基础上,将房间布局的二维分割结果在竖直方向即z坐标轴上进行延伸,向z坐标轴负方向延伸至地面的上界坐标处,向z轴正方向延伸至天花板下界坐标处,将房间布局平面图中的每条直线看作墙壁的中心线,为其赋予合适的厚度2μ,μ为组距,即将z坐标平均分为200份,得到室内场景各个墙壁在三维空间中的粗略位置;

步骤4.3.2,将墙壁粗略位置与步骤4.2场景分割得到的墙壁分类重建结果相对应,并将墙壁的z坐标范围限定在地面与天花板位置之间,从而重建得到每个房间的不同墙壁结构,然后在墙壁两端分别补齐地面与天花板平面,如图10所示。

本发明以仅包含顶点坐标信息的点云室内场景布局重建进行研究,首先进行了场景预处理,分析了场景的趋势从而旋转至自然竖直状态,根据墙壁投影线获取房间初步划分结果,据此,通过转化为无向图的方式求解出室内场景房间布局信息,根据区域增长法分割场景,并栅格化分类重建墙壁,最后根据场景布局平面图规范墙壁重建位置,补齐地面天花板而得到场景重建结果。本发明技术路线较为完整,在有效性和稳定性都有了很大的提高,并且拥有较好的鲁棒性,丰富了计算机图形学和视觉智能的方法体系。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1