一种基于点云的室内场景房间布局划分方法

文档序号:26352043发布日期:2021-08-20 20:25阅读:300来源:国知局
一种基于点云的室内场景房间布局划分方法

本发明属于计算机视觉和图像处理方法技术领域,具体涉及一种基于点云的室内场景房间布局划分方法。



背景技术:

现实世界的各种场景中,室内场景是与人们日常工作和生活最为密切相关的场所,是人类感知世界的最重要组成部分。随着激光扫描技术、自动机器人技术以及人工智能技术等的发展,室内场景的理解与分析研究日趋重要,且广泛应用于场景虚拟漫游、室内导航与定位、建筑规划与监控等领域。这些室内服务的需求都需要先对房间布局进行准确划分。

近年来,有大量研究者致力于室内场景的房间布局划分工作中,因而,基于点云的室内场景房间布局划分方法得到了快速的发展。但是,由于室内场景布局的复杂性和多样性、场景的不规则性以及场景数据由于遮挡导致的缺失性等因素,都毫无疑问地增加了计算机对室内场景房间布局划分的难度。因此,完整有效的划分出室内场景房间布局仍然是一项具有挑战性的工作。



技术实现要素:

本发明的目的是提供一种基于点云的室内场景房间布局划分方法,解决了现有技术中由于室内场景布局复杂以及场景数据缺失导致的房间布局划分困难问题。

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

步骤1,针对该室内场景建立一个空间坐标系,空间坐标系中的x轴和y轴构成的xoy平面与地面平行,z轴是垂直向上的,xoy、yoz、xoz平面相互垂直;

步骤2,提取室内场景中的结构元素,具体包括地面、天花板、垂直墙面;

步骤3,对经步骤2提取的墙面投影到xoy平面上,基于投影点创建深度图像,并使用创建的深度图像检测墙面线,根据检测到的实际墙面线划分房间布局;

步骤4,分析经步骤3产生的划分结果,在霍夫变换算法的基础上对检测的实际墙线进行优化,实现室内场景房间布局的完整划分。

本发明的特征还在于,

步骤1具体为:

步骤2.1,利用ransac算法的平面模型提取并移除室内场景中的地面和天花板,地面和天花板平面是由点构成的,并将剩余的点保存;

步骤2.2,依据步骤2.1中保存的点来检测与墙面相关的点,从而提取出室内场景中的垂直墙面。

步骤2.1具体为:

步骤2.1.1,设构成室内场景的点的集合为p,p={p1,p2,…,pn},其中,pi表示室内场景中第i个点的坐标信息(xi,yi,zi),i=1,2,3,...,n,n为室内场景中点的总数量;

步骤2.1.2,从集合p中获取最小的x、y、z坐标值,将由最小的x,y,z坐标值构成的点记为点minpt,同时从集合p中获取最大的x、y、z坐标值,将由最大的x,y,z坐标值构成的点记为点maxpt;

步骤2.1.3,在ransac算法中设置平面提取过程中使用的模型类型为平面模型,最大迭代次数为600,距离阈值为0.05,然后进行平面提取;

步骤2.1.4,根据步骤2.1.3设置的条件,将当前提取到的平面记为extractplane,同时获取当前平面所有点中的最小的x、y、z坐标值,将由最小的x、y、z坐标值构成的点记为点tmpminpt,以及获取当前平面所有点中的最大的x、y、z坐标值,将由最大的x、y、z坐标值构成的点记为点tmpmaxpt;

步骤2.1.5,设minpt.z表示点minpt的z坐标值,tmpminpt.z表示点tmpminpt的z坐标值,maxpt.z表示点maxpt的z坐标值,tmpmaxpt.z点tmpmaxpt的z坐标值,分别将tmpminpt.z与minpt.z、tmpmaxpt.z与maxpt.z进行比较,如果tmpminpt.z满足条件tmpminpt.z∈minpt.z±0.05,则判断当前提取的平面为地面,如果tmpmaxpt.z满足条件tmpmaxpt.z∈maxpt.z±0.05,则判断当前提取的平面为天花板;

步骤2.1.6,重复步骤2.1.4-2.1.5,直到当前提取平面上的点数少于预定义的阈值时,退出循环,依次将地面和天花板提取出来;

步骤2.1.7,将移除天花板和地面后的点云数据保存。

步骤2.2具体为:

步骤2.2.1,基于垂直墙面其表面为规则平面且在空间坐标系中平行于xoz或者yoz平面的结构特征,使用ransac算法的平行模型提取出所有可能的墙面放入到集合wp中,wp={wp1,wp2,…,wpn},其中,wpj表示第j个墙面,j=1,2,3,...,n,n为墙面的总数量;

步骤2.2.2,在ransac算法中设置墙面提取过程中的模型类型为平行平面,即与xoz或者yoz平面平行,设置角度阈值为20,然后进行墙面提取;

步骤2.2.3,根据步骤2.2.2设置的条件,将当前提取到的墙面记为wpj,同时获取当前墙面所有点中的最小的x、y、z坐标值,将由最小的x、y、z坐标值构成的点记为点wallminpt,以及获取当前墙面所有点中的最大的x、y、z坐标值,将由最大的x、y、z坐标值构成的点记为点wallmaxpt,采用公式(1)计算wpj的高度:

h=wallmaxpt.z-wallminpt.z(1)

其中,h表示墙面wpj的高度,wallminpt.z表示当前提取墙面中最小x、y、z坐标值构成的点的z坐标值,wallmaxpt.z表示当前提取的墙面中最大x、y、z坐标值构成的点的z坐标值;

步骤2.2.4,将步骤2.2.3计算得到的墙面高度h和预定义的高度阈值th进行比较,预定义的高度阈值th的计算公式如下:

th=thres*(ceilingminpt.z-floormaxpt.z)(2)

其中,th表示预定义的高度阈值;thres是一个常量,表示平面高度的最小值,此处设置为0.4;ceilingminpt表示步骤2.1.6中提取的天花板平面所有点中的最小的x、y、z坐标值构成的点,floormaxpt表示步骤2.1.6中提取的地面平面所有点中的最大的x、y、z坐标值构成的点,ceilingminpt.z表示点ceilingminpt的z坐标值,floormaxpt.z表示点floormaxpt的z坐标值;

步骤2.2.5,将步骤2.2.3计算的墙面高度h和预定义的高度阈值th进行比较,如果h>th,则将当前墙面wpj提取出来;

步骤2.2.6,重复步骤2.2.3-2.2.5,直到h≤th时退出循环,将所有满足条件的墙面提取出来。

步骤3具体为:

步骤3.1,将步骤2提取的墙面点投影到xoy平面上,基于投影点创建深度图像;

步骤3.2,使用创建的深度图像检测墙面线,根据检测出的实际墙面线划分房间布局。

步骤3.1具体为:

步骤3.1.1,根据步骤1提取到的墙面点投影到xoy平面上,即把所有墙面点的z坐标置为0;

步骤3.1.2,设置要创建的深度图像的网格大小为0.01m,将投影点划分到相应的网格中,每个网格中的投影点的x坐标范围为[m,m+gridsize],投影点的y坐标范围为[n,n+gridsize],其中m表示第m个点的x坐标,n表示第n个点的y坐标;

步骤3.1.3,根据投影到xoy平面上的点创建一个网格结构;

步骤3.1.4,将每个网格单元内投影点的密度保存至一个网格中;

步骤3.1.5,根据网格的高度和宽度创建一个空的深度图像;

步骤3.1.6,根据每个点的像素值,计算深度图像的强度,计算公式如下所示:

其中,depthimg[m][n]表示在网格第m行n列位置处的像素点强度值,grid[m][n]表示在网格第m行n列位置处的像素点,maxvalueofgrid表示该网格中像素点个数的最大值;

步骤3.1.7,输出生成的深度图像。

步骤3.2具体为:

步骤3.2.1,设置预定义的阈值,阈值包括墙面线上的最小点数量minpoints,墙面线的最小长度minlen和已确定区域周围的像素点个数detarea,minpoints=30,minlen=150,detarea=30;

步骤3.2.2,根据步骤3.1.7生成的深度图像,定义墙面候选线,将深度图像中每个像素点的强度值与0进行比较,判断该像素点是否为墙面候选线的一部分;

步骤3.2.3,若步骤3.2.2判断出该像素点的强度值大于0,则表明该像素点是墙面候选线的一部分,并画出穿过该像素点的水平线和垂直线,水平线由点(0,n)和点(depthimg.cols-1,n)描述、垂直线由点(m,0)和点(m,depthimg.rows-1)描述,并将水平线和垂直线添加到集合l中,l={l1,l2,…,ln},其中,lt表示第t条候选线,t=1,2,3,...,n,n为候选线的总数量;

步骤3.2.4,对深度图像中所有的像素点重复步骤3.2.2-3.2.3,检测出所有的墙面候选线;

步骤3.2.5,检测集合l中墙面候选线lt上的像素点,如果lt上的像素点周围点的个数大于预定义的区域阈值(区域阈值默认为30个像素点),则认为lt上的该像素点是墙面线的一部分;

步骤3.2.6,若lt上的像素点满足该像素点周围点的个数大于预定义的区域阈值这一条件,则将lt上该像素点的值设置为1,若不满足此条件,则将该像素点的值设置为0,lt是由0和1组成的序列,这样就可以获得lt的矢量;

步骤3.2.7,计算步骤3.2.6得到的lt矢量的大小,对于水平候选线来说,lt的矢量大小等于深度图像的宽度,而对于垂直候选线来说,lt的矢量大小等于深度图像的高度;

步骤3.2.8,如果lt矢量上的最小点数大于预定义的阈值minpoints,以及lt的长度大于预定义的阈值minlen,可判断lt为实际的墙面线;

步骤3.2.9,重复步骤3.2.6-3.2.8,对集合l中所有的候选墙面线做出判断,从而检测出实际的墙线;

步骤3.2.10,根据步骤3.2.9检测出的实际墙面线得到室内场景房间布局的划分结果图,该结果图为二值图像并记为srcimg。

步骤4具体为:

步骤4.1,通过霍夫变换算法获取所有实际线段的起点坐标和终点坐标,根据线段的起点坐标和终点坐标找出所有平行于x轴和平行于y轴的墙面线;

步骤4.2,对平行于x轴的线段和平行于y轴的线段进行排序;

步骤4.3,计算平行于x轴和平行于y轴的线段之间的交点坐标,根据其交点坐标依次绘制线段,从而实现房间布局的优化。

步骤4.1具体为:

步骤4.1.1,将步骤3.2.10得到的房间布局划分结果图srcimage作为输入,采用canny算子对图像srcimage进行边缘检测,检测后的图像记为midimage;

步骤4.1.2,将进行边缘检测后的图像midimage转化为灰度图像,转化后的灰度图像记为dstimage;

步骤4.1.3,利用霍夫变换算法检测图像midimage中的矢量线段并存储到矢量集合lines中;

步骤4.1.4,遍历集合lines中的每条线段l,根据存储的矢量线段的起点坐标point(l[0],l[1])和终点坐标point(l[2],l[3])在图像dstimage中绘制出每条线段;

步骤4.1.5,利用起点坐标和终点坐标的y坐标值相等(即l[1]=l[3])找出所有平行于x轴的线段,并将起点坐标存储在points1中,终点坐标存储在points2;利用起点坐标和终点坐标的x坐标值相等(即l[0]=l[2])找出所有平行于y轴的线段,平行于y轴线段的起点坐标存储在points3中,终点坐标存储在points4中(其中points1,points2,points3,points4为point2f类型的数组)。

步骤4.2具体为:

步骤4.2.1,应用冒泡排序算法,根据y坐标值对平行于x轴线段的起点坐标和终点坐标按照由小到大进行排序,排序后的起点坐标和终点坐标仍然一一对应,同时将排序后的起点或者终点的y坐标值存入数组h中;

步骤4.2.2,同样应用冒泡排序算法根据x坐标值对平行于y轴线段的起点坐标和终点坐标按照由小到大进行排序,并将排序后的起点或者终点的x坐标值存入数组t中。

步骤4.3具体为:

步骤4.3.1,根据步骤4.2得到的结果,从固定数组h中的第一个y值,以及遍历数组t中的第一个x值开始,如果平行于x轴的线段满足如下关系式(4),在这一条件下,如果平行于y轴的线段满足如下关系式(5),则表明这两条线段之间有交点,交点坐标为q(*dit,*it),并存储到point数组中;

式(4)-式(5)具体如下:

points1_it->x<*dit,且points2_it->x>*dit(4)

points3_it->y<*it,且points4_it->y>*it(5)

其中,points1_it->x表示平行于x轴线段的起点坐标中的第一个点的x坐标,points2_it->x表示平行于x轴线段的终点坐标中的第一个点的x坐标,*dit表示数组t中的第一条平行于y轴线段的x坐标值,points3_it->y表示平行于y轴线段的起点坐标中的第一个点的y坐标,points4_it->y表示平行于y轴线段的终点坐标中的第一个点的y坐标,*it表示数组h中的第一条平行于x轴线段的y坐标值;

步骤4.3.2,重复步骤4.3.1,当确定数组h中的一个y值时,遍历数组t中所有的x值,找出满足条件的所有交点,当数组h中的y值全部遍历,则表示该过程结束,即可计算出平行于x轴和平行于y轴线段之间的所有交点;

步骤4.3.3,根据步骤4.3.1-4.3.2计算的交点坐标,从第一个交点坐标开始,每次把当前点和剩余的点进行一一比较,如果相比较的两个点y坐标值相等,关系式如(6)所示,则将这两个点相连接,即可绘制出平行于x轴的水平线段;如果相比较的两个点x坐标值相等,关系式如(7)所示,则也将这两个点相连接,即可绘制出平行于y轴的竖直线段;

pit->x=vit->x(6)

pit->y=vit->y(7)

其中,pit和vit表示当前比较的两个交点坐标;

步骤4.3.4,经过步骤4.3.3比较所有的交点,即可绘制出完整的房间布局结构图,这一过程通过计算交点坐标实现了房间布局的优化,从而有效得到房间布局的准确划分。

本发明的有益效果是:

本发明一种基于点云的室内场景房间布局划分方法,解决了现有技术中由于室内场景布局复杂以及场景数据缺失导致的房间布局划分困难问题;本发明的室内场景房间布局划分工作,在有效性、稳定性和准确性上都有了很的提高,并且拥有较好的鲁棒性,丰富了计算机图形学和视觉智能系统的方法体系。

附图说明

图1为本发明一种基于点云的室内场景房间布局划分方法中检测出的实际墙线结果图;

图2为本发明一种基于点云的室内场景房间布局划分方法中对实际墙线进行优化后得到的房间布局结果图。

具体实施方式

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

本发明一种基于点云的室内场景房间布局划分方法,如图1-2所示,具体按照如下步骤实施:

步骤1,针对该室内场景建立一个空间坐标系,空间坐标系中的x轴和y轴构成的xoy平面与地面平行,z轴是垂直向上的,xoy、yoz、xoz平面相互垂直;

步骤1具体为:

步骤2,提取室内场景中的结构元素,具体包括地面、天花板、垂直墙面;

步骤2.1,利用ransac算法的平面模型提取并移除室内场景中的地面和天花板,地面和天花板平面是由点构成的,并将剩余的点保存;

步骤2.1具体为:

步骤2.1.1,设构成室内场景的点的集合为p,p={p1,p2,…,pn},其中,pi表示室内场景中第i个点的坐标信息(xi,yi,zi),i=1,2,3,...,n,n为室内场景中点的总数量;

步骤2.1.2,从集合p中获取最小的x、y、z坐标值,将由最小的x,y,z坐标值构成的点记为点minpt,同时从集合p中获取最大的x、y、z坐标值,将由最大的x,y,z坐标值构成的点记为点maxpt;

步骤2.1.3,在ransac算法中设置平面提取过程中使用的模型类型为平面模型,最大迭代次数为600,距离阈值为0.05,然后进行平面提取;

步骤2.1.4,根据步骤2.1.3设置的条件,将当前提取到的平面记为extractplane,同时获取当前平面所有点中的最小的x、y、z坐标值,将由最小的x、y、z坐标值构成的点记为点tmpminpt,以及获取当前平面所有点中的最大的x、y、z坐标值,将由最大的x、y、z坐标值构成的点记为点tmpmaxpt;

步骤2.1.5,设minpt.z表示点minpt的z坐标值,tmpminpt.z表示点tmpminpt的z坐标值,maxpt.z表示点maxpt的z坐标值,tmpmaxpt.z点tmpmaxpt的z坐标值,分别将tmpminpt.z与minpt.z、tmpmaxpt.z与maxpt.z进行比较,如果tmpminpt.z满足条件tmpminpt.z∈minpt.z±0.05,则判断当前提取的平面为地面,如果tmpmaxpt.z满足条件tmpmaxpt.z∈maxpt.z±0.05,则判断当前提取的平面为天花板;

步骤2.1.6,重复步骤2.1.4-2.1.5,直到当前提取平面上的点数少于预定义的阈值时,退出循环,依次将地面和天花板提取出来;

步骤2.1.7,将移除天花板和地面后的点云数据保存。

步骤2.2,依据步骤2.1中保存的点来检测与墙面相关的点,从而提取出室内场景中的垂直墙面。

步骤2.2具体为:

步骤2.2.1,基于垂直墙面其表面为规则平面且在空间坐标系中平行于xoz或者yoz平面的结构特征,使用ransac算法的平行模型提取出所有可能的墙面放入到集合wp中,wp={wp1,wp2,…,wpn},其中,wpi表示第j个墙面,j=1,2,3,...,n,n为墙面的总数量;

步骤2.2.2,在ransac算法中设置墙面提取过程中的模型类型为平行平面,即与xoz或者yoz平面平行,设置角度阈值为20,然后进行墙面提取;

步骤2.2.3,根据步骤2.2.2设置的条件,将当前提取到的墙面记为wpj,同时获取当前墙面所有点中的最小的x、y、z坐标值,将由最小的x、y、z坐标值构成的点记为点wallminpt,以及获取当前墙面所有点中的最大的x、y、z坐标值,将由最大的x、y、z坐标值构成的点记为点wallmaxpt,采用公式(1)计算wpj的高度:

h=wallmaxpt.z-wallminpt.z(1)

其中,h表示墙面wpj的高度,wallminpt.z表示当前提取的墙面中最小x、y、z坐标值构成的点的z坐标值,wallmaxpt.z表示当前提取的墙面中最大x、y、z坐标值构成的点的z坐标值;

步骤2.2.4,将步骤2.2.3计算得到的墙面高度h和预定义的高度阈值th进行比较,预定义的高度阈值th的计算公式如下:

th=thres*(ceilingminpt.z-floormaxpt.z)(2)

其中,th表示预定义的高度阈值;thres是一个常量,表示平面高度的最小值,此处设置为0.4;ceilingminpt表示步骤2.1.6中提取的天花板平面所有点中的最小的x、y、z坐标值构成的点,floormaxpt表示步骤2.1.6中提取的地面平面所有点中的最大的x、y、z坐标值构成的点,ceilingminpt.z表示点ceilingminpt的z坐标值,floormaxpt.z表示点floormaxpt的z坐标值;

步骤2.2.5,将步骤2.2.3计算的墙面高度h和预定义的高度阈值th进行比较,如果h>th,则将当前墙面wpj提取出来;

步骤2.2.6,重复步骤2.2.3-2.2.5,直到h≤th时退出循环,将所有满足条件的墙面提取出来。

步骤3,对经步骤2提取的墙面投影到xoy平面上,基于投影点创建深度图像,并使用创建的深度图像检测墙面线,根据检测到的实际墙面线划分房间布局;

步骤3具体为:

步骤3.1,将步骤2提取的墙面点投影到xoy平面上,基于投影点创建深度图像;

步骤3.1具体为:

步骤3.1.1,根据步骤1提取到的墙面点投影到xoy平面上,即把所有墙面点的z坐标置为0;

步骤3.1.2,设置要创建的深度图像的网格大小为0.01m,将投影点划分到相应的网格中,每个网格中的投影点的x坐标范围为[m,m+gridsize],投影点的y坐标范围为[n,n+gridsize],其中m表示第m个点的x坐标,n表示第n个点的y坐标;

步骤3.1.3,根据投影到xoy平面上的点创建一个网格结构;

步骤3.1.4,将每个网格单元内投影点的密度保存至一个网格中;

步骤3.1.5,根据网格的高度和宽度创建一个空的深度图像;

步骤3.1.6,根据每个点的像素值,计算深度图像的强度,计算公式如下所示:

其中,depthimg[m][n]表示在网格第m行n列位置处的像素点强度值,grid[m][n]表示在网格第m行n列位置处的像素点,maxvalueofgrid表示该网格中像素点个数的最大值;

步骤3.1.7,输出生成的深度图像。

步骤3.2,使用创建的深度图像检测墙面线,根据检测出的实际墙面线划分房间布局。

步骤3.2具体为:

步骤3.2.1,设置预定义的阈值,阈值包括墙面线上的最小点数量minpoints,墙面线的最小长度minlen和已确定区域周围的像素点个数detarea,minpoints=30,minlen=150,detarea=30;

步骤3.2.2,根据步骤3.1.7生成的深度图像,定义墙面候选线,将深度图像中每个像素点的强度值与0进行比较,判断该像素点是否为墙面候选线的一部分;

步骤3.2.3,若步骤3.2.2判断出该像素点的强度值大于0,则表明该像素点是墙面候选线的一部分,并画出穿过该像素点的水平线和垂直线,水平线由点(0,n)和点(depthimg.cols-1,n)描述、垂直线由点(m,0)和点(m,depthimg.rows-1)描述,并将水平线和垂直线添加到集合l中,l={l1,l2,…,ln},其中,lt表示第t条候选线,t=1,2,3,...,n,n为候选线的总数量;

步骤3.2.4,对深度图像中所有的像素点重复步骤3.2.2-3.2.3,检测出所有的墙面候选线;

步骤3.2.5,检测集合l中墙面候选线lt上的像素点,如果lt上的像素点周围点的个数大于预定义的区域阈值(区域阈值默认为30个像素点),则认为lt上的该像素点是墙面线的一部分;

步骤3.2.6,若lt上的像素点满足该像素点周围点的个数大于预定义的区域阈值这一条件,则将lt上该像素点的值设置为1,若不满足此条件,则将该像素点的值设置为0,lt是由0和1组成的序列,这样就可以获得lt的矢量;

步骤3.2.7,计算步骤3.2.6得到的lt矢量的大小,对于水平候选线来说,lt的矢量大小等于深度图像的宽度,而对于垂直候选线来说,lt的矢量大小等于深度图像的高度;

步骤3.2.8,如果lt矢量上的最小点数大于预定义的阈值minpoints,以及lt的长度大于预定义的阈值minlen,可判断lt为实际的墙面线;

步骤3.2.9,重复步骤3.2.6-3.2.8,对集合l中所有的候选墙面线做出判断,从而检测出实际的墙线;

步骤3.2.10,根据步骤3.2.9检测出的实际墙面线得到室内场景房间布局的划分结果图,该结果图为二值图像并记为srcimg,如图1所示。

步骤4,分析经步骤3产生的划分结果,在霍夫变换算法的基础上对检测的实际墙线进行优化,实现室内场景房间布局的完整划分。

步骤4具体为:

步骤4.1,通过霍夫变换算法获取所有实际线段的起点坐标和终点坐标,根据线段的起点坐标和终点坐标找出所有平行于x轴和平行于y轴的墙面线;

步骤4.1具体为:

步骤4.1.1,将步骤3.2.10得到的房间布局划分结果图srcimage作为输入,采用canny算子对图像srcimage进行边缘检测,检测后的图像记为midimage;

步骤4.1.2,将进行边缘检测后的图像midimage转化为灰度图像,转化后的灰度图像记为dstimage;

步骤4.1.3,利用霍夫变换算法检测图像midimage中的矢量线段并存储到矢量集合lines中;

步骤4.1.4,遍历集合lines中的每条线段l,根据存储的矢量线段的起点坐标point(l[0],l[1])和终点坐标point(l[2],l[3])在图像dstimage中绘制出每条线段;

步骤4.1.5,利用起点坐标和终点坐标的y坐标值相等(即l[1]=l[3])找出所有平行于x轴的线段,并将起点坐标存储在points1中,终点坐标存储在points2;利用起点坐标和终点坐标的x坐标值相等(即l[0]=l[2])找出所有平行于y轴的线段,平行于y轴线段的起点坐标存储在points3中,终点坐标存储在points4中(其中points1,points2,points3,points4为point2f类型的数组)。

步骤4.2,对平行于x轴的线段和平行于y轴的线段进行排序;

步骤4.2具体为:

步骤4.2.1,应用冒泡排序算法,根据y坐标值对平行于x轴线段的起点坐标和终点坐标按照由小到大进行排序,排序后的起点坐标和终点坐标仍然一一对应,同时将排序后的起点或者终点的y坐标值存入数组h中;

步骤4.2.2,同样应用冒泡排序算法根据x坐标值对平行于y轴线段的起点坐标和终点坐标按照由小到大进行排序,并将排序后的起点或者终点的x坐标值存入数组t中。

步骤4.3,计算平行于x轴和平行于y轴的线段之间的交点坐标,根据其交点坐标依次绘制线段,从而实现房间布局的优化。

步骤4.3具体为:

步骤4.3.1,根据步骤4.2得到的结果,从固定数组h中的第一个y值,以及遍历数组t中的第一个x值开始,如果平行于x轴的线段满足如下关系式(4),在这一条件下,如果平行于y轴的线段满足如下关系式(5),则表明这两条线段之间有交点,交点坐标为q(*dit,*it),并存储到point数组中;

式(4)-式(5)具体如下:

points1_it->x<*dit,且points2_it->x>*dit(4)

points3_it->y<*it,且points4_it->y>*it(5)

其中,points1_it->x表示平行于x轴线段的起点坐标中的第一个点的x坐标,points2_it->x表示平行于x轴线段的终点坐标中的第一个点的x坐标,*dit表示数组t中的第一条平行于y轴线段的x坐标值,points3_it->y表示平行于y轴线段的起点坐标中的第一个点的y坐标,points4_it->y表示平行于y轴线段的终点坐标中的第一个点的y坐标,*it表示数组h中的第一条平行于x轴线段的y坐标值;

步骤4.3.2,重复步骤4.3.1,当确定数组h中的一个y值时,遍历数组t中所有的x值,找出满足条件的所有交点,当数组h中的y值全部遍历,则表示该过程结束,即可计算出平行于x轴和平行于y轴线段之间的所有交点;

步骤4.3.3,根据步骤4.3.1-4.3.2计算的交点坐标,从第一个交点坐标开始,每次把当前点和剩余的点进行一一比较,如果相比较的两个点y坐标值相等,关系式如(6)所示,则将这两个点相连接,即可绘制出平行于x轴的水平线段;如果相比较的两个点x坐标值相等,关系式如(7)所示,则也将这两个点相连接,即可绘制出平行于y轴的竖直线段;

pit->x=vit->x(6)

pit->y=vit->y(7)

其中,pit和vit表示当前比较的两个交点坐标;

步骤4.3.4,经过步骤4.3.3比较所有的交点,即可绘制出完整的房间布局结构图,这一过程通过计算交点坐标实现了房间布局的优化,从而有效得到房间布局的准确划分,如图2所示。

本发明方法基于点云数据对室内场景中的房间布局划分进行研究,首先提取提取室内场景中的地面、天花板、墙面这三种结构元素;然后,将提取的墙面投影到xoy平面上,基于投影点创建深度图像,并使用创建的深度图像检测墙面线,根据检测出的实际墙面线划分房间布局;最后,在霍夫变换算法的基础上对检测的实际墙线进行优化,实现室内场景房间布局的准确划分。本发明技术路线较为完整,在有效性和稳定性都有了很大的提高,并且拥有较好的鲁棒性,丰富了计算机图形学和视觉智能的方法体系。

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