1.一种基于点云的室内场景房间布局划分方法,其特征在于,具体按照如下步骤实施:步骤1,针对该室内场景建立一个空间坐标系,空间坐标系中的x轴和y轴构成的xoy平面与地面平行,z轴是垂直向上的,xoy、yoz、xoz平面相互垂直;
步骤2,提取室内场景中的结构元素,具体包括地面、天花板、垂直墙面;
步骤3,对经步骤2提取的墙面投影到xoy平面上,基于投影点创建深度图像,并使用创建的深度图像检测墙面线,根据检测到的实际墙面线划分房间布局;
步骤4,分析经步骤3产生的划分结果,在霍夫变换算法的基础上对检测的实际墙线进行优化,实现室内场景房间布局的完整划分。
2.根据权利要求1所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤1具体为:
步骤2.1,利用RANSAC算法的平面模型提取并移除室内场景中的地面和天花板,地面和天花板平面是由点构成的,并将剩余的点保存;
步骤2.2,依据步骤2.1中保存的点来检测与墙面相关的点,从而提取出室内场景中的垂直墙面。
3.根据权利要求2所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤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算法中设置平面提取过程中使用的模型类型为平面模型,然后进行平面提取;
步骤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进行比较,如果tmpMaxPt.z满足条件tmpMaxPt.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,将移除天花板和地面后的点云数据保存。
4.根据权利要求3所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤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平面平行,然后进行墙面提取;
步骤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是一个常量,表示平面高度的最小值;
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时退出循环,将所有满足条件的墙面提取出来。
5.根据权利要求4所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤3具体为:
步骤3.1,将步骤2提取的墙面点投影到xoy平面上,基于投影点创建深度图像;
步骤3.2,使用创建的深度图像检测墙面线,根据检测出的实际墙面线划分房间布局。
6.根据权利要求5所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤3.1具体为:
步骤3.1.1,根据步骤1提取到的墙面点投影到xoy平面上,即把所有墙面点的z坐标置为0;
步骤3.1.2,设置要创建的深度图像的网格大小为0.01m,将投影点划分到相应的网格中,每个网格中的投影点的z坐标范围为[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,输出生成的深度图像。
7.根据权利要求6所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤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上的像素点周围点的个数大于预定义的区域阈值,则认为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。
8.根据权利要求7所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤4具体为:
步骤4.1,通过霍夫变换算法获取所有实际线段的起点坐标和终点坐标,根据线段的起点坐标和终点坐标找出所有平行于x轴和平行于y轴的墙面线;
步骤4.2,对平行于x轴的线段和平行于y轴的线段进行排序;
步骤4.3,计算平行于x轴和平行于y轴的线段之间的交点坐标,根据其交点坐标依次绘制线段,从而实现房间布局的优化。
9.根据权利要求8所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤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坐标值相等找出所有平行于x轴的线段,并将起点坐标存储在points1中,终点坐标存储在points2;利用起点坐标和终点坐标的x坐标值相等找出所有平行于y轴的线段,平行于y轴线段的起点坐标存储在points3中,终点坐标存储在points4中。
10.根据权利要求9所述的一种基于点云的室内场景房间布局划分方法,其特征在于,所述步骤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比较所有的交点,即可绘制出完整的房间布局结构图,这一过程通过计算交点坐标实现了房间布局的优化,从而有效得到房间布局的准确划分。