基于单元分解与空间分割的房间布局划分方法

文档序号:30581735发布日期:2022-06-29 12:38阅读:176来源:国知局
基于单元分解与空间分割的房间布局划分方法

1.本发明属于人工智能计算方法技术领域,涉及一种基于单元分解与空间分割的房间布局划分方法。


背景技术:

2.室内场景是人们日常生活和工作最为密切的场所,同时人们也决定了其内部结构的复杂多样性。对于一些内部结构简单的室内场景,可以通过分割室内场景结构元素的方法实现房间布局的准确划分。即使获取的室内场景数据存在缺失现象,该方法依然具有较高鲁棒性。然而,在一些内部结构复杂的室内场景中可能存在严重的遮挡现象,无法通过分割室内场景结构元素的方法实现房间布局的划分。


技术实现要素:

3.本发明的目的是提供一种基于单元分解与空间分割的房间布局划分方法,解决了现有技术中存在的通过分割室内场景结构元素的方法进行内部结构复杂的室内场景划分时存在严重的遮挡现象从而无法实现划分的问题。
4.本发明所采用的技术方案是,基于单元分解与空间分割的房间布局划分方法,具体按照如下步骤实施:
5.步骤1,从室内点云场景中提取墙面点云,然后对墙面点云划分为若干个片段,计算每个片段的质心点,根据质心点拟合墙面点云对应的直线,然后对拟合的直线进行融合处理,然后基于融合处理的结果进行单元分解,得到室内场景的单元划分结果;
6.步骤2,对室内场景进行下采样后,将下采样后的室内场景投影到二维平面上,离散化投影点并生成深度图像;然后将深度图像二值化,使用形态学腐蚀操作分割室内空间以识别房间数量;最后使用波前扩展方法把属于房间区域但未被访问的区域添加到房间空间中,得到室内场景的空间分割结果;
7.步骤3,将步骤1得到的把室内场景的单元划分结果与步骤2得到的室内场景的空间分割结果进行重叠,在重叠区域中生成随机点,根据每个网格单元中随机点所带颜色标签的数量决定该网格单元属于哪一个房间,从而实现房间布局的准确划分。
8.本发明的特点还在于,
9.步骤1具体为:
10.步骤1.1,对室内场景进行下采样,得到下采样后的室内点云场景,将下采样后的室内点云场景作为输入将其分割成若干个水平点云切片,使用区域生长的聚类方法,将每个水平点云切片中的墙面点和室内杂物分割,最终保留墙面点,得到对应水平点云切片的墙面点云;
11.步骤1.2,将步骤1.1提取的每个墙面点云划分成若干个片段,计算每个片段的质心点,用质心点表示各个片段中所有点的特征,然后根据所求的质心点进行直线拟合;
12.步骤1.3,将步骤1.2得到的直线进行投影,投影后进行融合处理,然后将融合处理
的线段进行延长,根据cgal库计算二维排列数据结构,最终得到二维单元分解结果。
13.步骤1.1中使用区域生长的聚类方法,将每个水平点云切片中的墙面点和室内杂物分割,最终保留墙面点,得到对应水平点云切片的墙面点云具体为:
14.步骤1.1.1,计算每个水平点云切片中每个点的曲率,按照点的曲率值对点进行排序,找到曲率最小的点,将其添加到种子点集合中;
15.步骤1.1.2,对于每个种子点,若其k近邻点同时满足式(1)和式(2),则将该点添加到潜在的种子点列表当中;
16.||n
p
·ns
||》cos(θ
th
)
ꢀꢀꢀꢀ
(1)
17.其中,n
p
表示当前种子点的法向量;ns表示当前种子点的k近邻点的法向量;θ
th
表示一个平滑阈值;
18.r
p
《r
th
ꢀꢀꢀꢀꢀꢀ
(2)
19.其中,r
p
表示当前种子点的k近邻点的曲率,r
th
表示一个曲率阈值;
20.步骤1.1.3,将步骤1.1.2添加到潜在的种子点列表当中点从最初的室内点云对应的切片点云中移除;
21.步骤1.1.4,在步骤1.1.3的基础上进行聚类,设置最小点簇的点数为min,最大点簇的点数为max,将生成点数在min和max之间的所有切片保留,并对不同切片标记不同颜色加以区分,保留的切片的切片点云即为获取的墙面点云;
22.步骤1.1.5,重复步骤1.1.1到步骤1.1.4,完成所有切片的聚类,最终得到每个切片对应的墙面点云。
23.步骤1.2具体为:
24.步骤1.2.1,输入步骤1.1提取的墙面点云,分别保存每个墙面点云中每一个点的x、y、z坐标;
25.步骤1.2.2,根据墙面点云的x、y坐标计算墙面区域在空间中的长度和宽度,长度为x
max-x
min
,宽度为y
max-y
min
,x
max
、x
min
、y
max
、y
min
分别表示最大最小的x、y坐标;设置步长l为0.4m,将空间中的墙面点云划分到l
×
l的网格中,则总的行数为raster_rows=x
max-x
min
/l、总列数为raster_cols=y
max-y
min
/l;
26.步骤1.2.3,创建一个一维数组vector_4、二维数组col_,三维数组row_col,设置数组vector_4大小为4,在根据raster_rows和raster_cols的大小设置数组col_大小为raster_cols
·
vector_4,数组row_col的大小为raster_rows
·
col;
27.步骤1.2.4,将墙面点云中的点存储到对应的行和列中,其中任意一点的位置(row_idx,col_idx)表示为(ceil((points[i].x-point_min.x)/l-1),,ceil((points[i].y-point_min.y)/l-1)),point[i].x、point[i].y表示任意一点的x、y坐标,point_min.x、point_min.y表示最小点的x、y坐标;
[0028]
步骤1.2.5,如果row_idx或col_idx的值小于0,则将置为0;然后将步骤1.2.4选取的那个点的x、y、z依次存放在数组row_col[row_idx][col-idx][0]、row_col[row_idx][col-idx][1]、row_col[row_idx][col-idx][2]中,每存入一个点数组row_col[row_idx][col-idx][2]处的值增1;
[0029]
步骤1.2.6,重复步骤1.2.4和步骤1.2.5将所有属于墙面点云的点划分到对应的网格空间中,计算每个网格空间的质心点q,计算公式如式(3);
[0030][0031]
其中,x_mean、y_mean、z_mean分别表示质心点q的x、y、z坐标;m表示数组row_col的大小;n表示数组row_col[i]的大小;row_xol[i][j][0]表示提取的墙面点云对应的空间中任意一点的x坐标;row_xol[i][j][1]表示提取的墙面点云对应的空间中任意一点的y坐标;row_xol[i][j][2]表示提取的墙面点云对应的空间中任意一点的z坐标;row_col[i][j][3]表示每个网格提取的墙面点云对应的空间中所包含的点数量;
[0032]
步骤1.2.7,从每个墙面点云对应的多个质心点中任意选取三个点构造一个xoy平面,计算该平面方程的系数,然后计算构造平面的法向量v,根据求解的平面方程系数重新构造平面,并利用空间中线段的端点和平面的法向量构造一条投影直线,再次求解平面和投影直线的交点,该交点则为空间中直线段一个端点的投影点,最终依次连接对应的投影点即可得到投影后的线段。
[0033]
步骤1.3具体为:
[0034]
步骤1.3.1,设置一个墙段的预定义长度值,然后对步骤1.2.7中投影后的多条线段按其长度由小到大进行排序,将长度小于预定义长度值的线段直接删除;
[0035]
步骤1.3.2,选择经步骤1.3.1处理之后的剩余线段中长度最大的线段将其添加到最终的结果集合中,再从剩余线段中选择一条线段与最终结果集合中的线段进行比较,设定一个夹角阈值和一个距离阈值,如果这两条线段之间的夹角小于给定的阈值,则认为这两条线段是平行的;在平行的基础上,如果这两条平行线之间的距离小于给定的阈值,则认为这两条线段是共线的,将这两条线段进行融合处理;
[0036]
步骤1.3.3,重复步骤1.3.2,直到剩余线段个数为0时,结束整个过程得到融合后的线段;
[0037]
步骤1.3.4,延长融合后的线段,然后,根据cgal库计算二维排列数据结构,使用扩展线段对室内场景的二维平面进行划分,将其分解成二维单元。
[0038]
步骤2具体为:
[0039]
步骤2.1,将室内场景空间的点云转换到二维图像上,得到相应的灰度图像,为了让图像呈现出明显的黑白效果,将灰度图像进行二值化处理,获得反映图像整体和局部特征的二值图像;
[0040]
步骤2.2,默认每个房间通向其他房间或者走廊的门都关闭,使用3
×
3的结构元迭代地腐蚀步骤2.1获得的二值图像中的可访问像素,可访问像素为二值图像中的白色像素,腐蚀完成一次就会得到一个腐蚀结果图,通过腐蚀结果图上的轮廓判断是否有可分离区
域,如果得到可分离区域则停止迭代,同时使用不同颜色将可分离区域进行标记;
[0041]
步骤2.3,根据步骤2.2标记的可分离区域检测出房间的数量,此时二值图像上有三种状态,其中白色像素表示可访问区域中未被标记的区域,然后利用波前传播方法对白色像素进行扩展,得到最终的房间空间分割结果。
[0042]
步骤2.1具体为:
[0043]
步骤2.1.1,将步骤1.1下采样后的室内点云投影到xoy平面上,从投影点中找出最大的x、y坐标和最小的x、y坐标,根据最大最x、y坐标值确定图像的宽度和高度;
[0044]
步骤2.1.2,将投影点离散化到二维网格中,得到多个像素网格,将像素的大小设置为pixelsize,每个像素的大小由墙壁的厚度和点云的大小以及点云的密度决定,根据每个像素所包含的点数量判断该像素是灰色还是黑色,如果一个像素至少包含一个点,则表明该像素为灰色;如果一个像素不包含点,则表明该像素为黑色,进而得到灰度图像;
[0045]
步骤2.1.3,通过适当的阈值选取,将步骤2.1.2得到的灰度图像上的像素点的灰度值置为0或者255,如果像素点的灰度值大于或等于阈值的像素,则被判定为属于特定的物体,其灰度值用255表示;否则,这些像素点被排除在物体区域以外,其灰度值用0表示,得到二值图像。
[0046]
步骤2.2具体为:
[0047]
步骤2.2.1,从步骤2.1得到的二值图像的中心位置处开始第一次腐蚀,使用3
×
3的结构元腐蚀二值图像中的可访问像素,可访问像素为二值图像中的白色像素,腐蚀完成一次,就会得到一个腐蚀结果图;
[0048]
步骤2.2.2,在腐蚀结果图中寻找轮廓,所有轮廓只建立两个等级关系即顶层和内层,并统计所找到的轮廓数量findcontournums;
[0049]
步骤2.2.3,检查每一个轮廓,如果当前轮廓没有对应的内嵌轮廓,则计算当前轮廓所围成的区域面积contourarea1,从而计算出房间面积roomarea1,计算公式如(4)所示;
[0050]
roomarea1=cellsize*cellsize*contourarea1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0051]
其中参数roomarea1表示房间面积;cellsize表示一个单元网格的大小;contourarea1表示当前轮廓围成区域面积;
[0052]
步骤2.2.4,在步骤2.2.3的基础上判断当前检测出的轮廓是否为其它轮廓的内嵌轮廓,如果当前轮廓是其中一个轮廓的内嵌轮廓,则计算当前轮廓围成的区域面积contourarea2,同时更新房间面积roomarea2,面积计算公式如式(5)所示;
[0053]
roomarea2=cellsize*cellsize*contourarea2-roomarea1
ꢀꢀꢀꢀꢀꢀꢀ
(5)
[0054]
其中参数roomarea2表示更新后的房间面积;
[0055]
步骤2.2.5,判断当前房间面积是否在上限阈值和下限阈值之间,下限阈值表示数据中最小的房间面积,上限阈值表示最大的房间面积,如果当前面积在上限阈值和下限阈值之间,则将其轮廓保存起来;
[0056]
步骤2.2.6,重复步骤2.2.1到步骤2.2.5,迭代腐蚀二值图像中的可访问像素,直到所有剩余区域的面积都小于下限阈值,此时停止迭代,得到可分离区域,然后将得到的可分离区域进行不同颜色标记。
[0057]
步骤2.3具体为:
[0058]
步骤2.3.1,根据步骤2.1的二值图像结合步骤2.2的轮廓得到房间分割结果,以此
分割结果作为输入,此时房间分割结果图呈现三种状态,第一种是黑色表示的黑色像素,即就是经过步骤2.1.2得到的黑色像素,黑色像素所在的区域表示不可访问区域,该部分不属于室内场景;第二种是白色表示的白色像素,即就是步骤2.1.3得到的二值图像中的白色像素,白色像素所在的区域表示可访问区域但未被访问;第三种是使用不同颜色标记的区域,即就是经过步骤2.2.6标记后的区域,不同的颜色表示由一些像素组成的不同房间区域;
[0059]
步骤2.3.2,从未被标记的的白色像素中选取一个像素,根据该像素周围3
×
3区域内其它像素的颜色判断当前像素的颜色,从该像素开始判断它的三个通道的通道值,如果该像素三个通道的通道值同时大于250,则表示该像素是一个可访问像素;如果该像素三个通道的通道值同时不为0并且小于等于250,则将此像素三个通道的通道值赋值给可访问像素,实现可访问像素的标记,并将其扩展到房间空间中;
[0060]
步骤2.3.3,迭代步骤2.3.1和步骤2.3.2,直到步骤2.3.1中房间分割结果中未被标记的区域全部实现标记后,实现室内场景的空间分割。
[0061]
步骤3具体为:
[0062]
步骤3.1,将步骤1得到的把室内场景的单元划分结果与步骤2得到的室内场景的空间分割结果进行重叠;
[0063]
步骤3.2,在重叠空间中创建一组随机点集,将每个单元网格中的中心点添加到随机点集中,让每个单元网格中的点从空间分割结果中提取标签信息;
[0064]
步骤3.3,通过计算每个单元网格中相同标签的点的数量,然后根据该单元网格中出现频率最高的标签为该单元网格分配一个标签,或者根据一个已标记的单元网格被相同的已标记的单元网格包围,那么该单元网格也被标记为与周围单元网格相同的标签;
[0065]
步骤3.4,将步骤3.1到步骤3.3完成的分割结果标签的单元网格可视化,然后合并相同标签的单元网格,删除步骤2.3中二值图像中不可访问的白色像素的单元网格,得到最终的房间布局划分结果。
[0066]
本发明的有益效果是:本发明通过单元分解将室内场景的俯视图分解成一个个单元,解决了房间布局杂乱的问题;通过房间分割将房间信息分配到每个房间单元分解的像素上,解决了室内场景中可能存在的严重遮挡现象,最终进行叠加分析处理,获得最终的房间布局划分结果。这种综合的划分方法,既保持了房间的几何规律,又保持了房间空间的完整性。
附图说明
[0067]
图1为本发明基于单元分解与空间分割的房间布局划分方法的流程图;
[0068]
图2为本发明scene1的原始场景数据和下采样后的场景数据示意图;
[0069]
图3为本发明scene2的原始场景数据和下采样后的场景数据示意图;
[0070]
图4是本发明scene1房间单元分解结果示意图;
[0071]
图5是本发明scene2房间单元分解结果示意图;
[0072]
图6是本发明scene1房间空间分割结果示意图;
[0073]
图7是本发明scene2房间空间分割结果示意图;
[0074]
图8是本发明scene1叠加分析的结果示意图;
[0075]
图9是本发明scene2叠加分析的结果示意图。
具体实施方式
[0076]
下面结合附图和具体实施方式对本发明进行详细说明。
[0077]
本发明基于单元分解与空间分割的房间布局划分方法,其流程如图1所示,具体按照如下步骤实施:
[0078]
步骤1,从室内点云场景中提取墙面点云,然后对墙面点云划分为若干个片段,计算每个片段的质心点,根据质心点拟合墙面点云对应的直线,然后对拟合的直线进行融合处理,然后基于融合处理的结果进行单元分解,得到室内场景的单元划分结果;具体为:
[0079]
步骤1.1,对室内场景进行下采样后,得到下采样后的室内点云场景,将下采样后的室内点云场景作为输入将其分割成若干个水平点云切片,使用区域生长的聚类方法,将每个水平点云切片中的墙面点和室内杂物分割,最终保留墙面点,得到对应水平点云切片的墙面点云;其中,使用区域生长的聚类方法,将每个水平点云切片中的墙面点和室内杂物分割,最终保留墙面点,得到对应水平点云切片的墙面点云具体为:
[0080]
步骤1.1.1,计算每个水平点云切片中每个点的曲率,按照点的曲率值对点进行排序,找到曲率最小的点,将其添加到种子点集合中;
[0081]
步骤1.1.2,对于每个种子点,若其k近邻点同时满足式(1)和式(2),则将该点添加到潜在的种子点列表当中;
[0082]
||n
p
·ns
||》cos(θ
th
)
ꢀꢀꢀꢀ
(1)
[0083]
其中,n
p
表示当前种子点的法向量;ns表示当前种子点的k近邻点的法向量;θ
th
表示一个平滑阈值;
[0084]rp
《r
th
ꢀꢀꢀꢀꢀꢀ
(2)
[0085]
其中,r
p
表示当前种子点的k近邻点的曲率,r
th
表示一个曲率阈值;
[0086]
步骤1.1.3,将步骤1.1.2添加到潜在的种子点列表当中点从最初的室内点云对应的切片点云中移除;
[0087]
步骤1.1.4,在步骤1.1.3的基础上进行聚类,设置最小点簇的点数为min,最大点簇的点数为max,将生成点数在min和max之间的所有切片保留,并对不同切片标记不同颜色加以区分,保留的切片的切片点云即为获取的墙面点云;
[0088]
步骤1.1.5,重复步骤1.1.1到步骤1.1.4,完成所有切片的聚类,最终得到每个切片对应的墙面点云。
[0089]
步骤1.2,将步骤1.1提取的每个墙面点云划分成若干个片段,计算每个片段的质心点,用质心点表示各个片段中所有点的特征,然后根据所求的质心点进行直线拟合;具体为:
[0090]
步骤1.2.1,输入步骤1.1提取的墙面点云,分别保存每个墙面点云中每一个点的x、y、z坐标;
[0091]
步骤1.2.2,根据墙面点云的x、y坐标计算墙面区域在空间中的长度和宽度,长度为x
max-x
min
,宽度为y
max-y
min
,x
max
、x
min
、y
max
、y
min
分别表示最大最小的x、y坐标;设置步长l为0.4m,将空间中的墙面点云划分到l
×
l的网格中,则总的行数为raster_rows=x
max-x
min
/l、总列数为raster_cols=y
max-y
min
/l;
[0092]
步骤1.2.3,创建一个一维数组vector_4、二维数组col_,三维数组row_col,设置数组vector_4大小为4,在根据raster_rows和raster_cols的大小设置数组col_大小为
raster_cols
·
vector_4,数组row_col的大小为raster_rows
·
col;
[0093]
步骤1.2.4,将墙面点云中的点存储到对应的行和列中,其中任意一点的位置(row_idx,col_idx)表示为(ceil((points[i].x-point_min.x)/l-1),,ceil((points[i].y-point_min.y)/l-1)),point[i].x、point[i].y表示任意一点的x、y坐标,point_min.x、point_min.y表示最小点的x、y坐标;
[0094]
步骤1.2.5,如果row_idx或col_idx的值小于0,则将置为0;然后将步骤1.2.4选取的那个点的x、y、z依次存放在数组row_col[row_idx][col-idx][0]、row_col[row_idx][col-idx][1]、row_col[row_idx][col-idx][2]中,每存入一个点数组row_col[row_idx][col-idx][2]处的值增1;
[0095]
步骤1.2.6,重复步骤1.2.4和步骤1.2.5将所有属于墙面点云的点划分到对应的网格空间中,计算每个网格空间的质心点q,计算公式如式(3);
[0096][0097]
其中,x_mean、y_mean、z_mean分别表示质心点q的x、y、z坐标;m表示数组row_col的大小;n表示数组row_col[i]的大小;row_xol[i][j][0]表示提取的墙面点云对应的空间中任意一点的x坐标;row_xol[i][j][1]表示提取的墙面点云对应的空间中任意一点的y坐标;row_xol[i][j][2]表示提取的墙面点云对应的空间中任意一点的z坐标;row_col[i][j][3]表示每个网格提取的墙面点云对应的空间中所包含的点数量;
[0098]
步骤1.2.7,从每个墙面点云对应的多个质心点中任意选取三个点构造一个xoy平面,计算该平面方程的系数,然后计算构造平面的法向量v,根据求解的平面方程系数重新构造平面,并利用空间中线段的端点和平面的法向量构造一条投影直线,再次求解平面和投影直线的交点,该交点则为空间中直线段一个端点的投影点,最终依次连接对应的投影点即可得到投影后的线段。
[0099]
步骤1.3,将步骤1.2得到的直线进行投影,投影后进行融合处理,然后将融合处理的线段进行延长,根据cgal库计算二维排列数据结构,最终得到二维单元分解结果,具体为:
[0100]
步骤1.3.1,设置一个墙段的预定义长度值,然后对步骤1.2.7中投影后的多条线段按其长度由小到大进行排序,将长度小于预定义长度值的线段直接删除;
[0101]
步骤1.3.2,选择经步骤1.3.1处理之后的剩余线段中长度最大的线段将其添加到最终的结果集合中,再从剩余线段中选择一条线段与最终结果集合中的线段进行比较,设定一个夹角阈值和一个距离阈值,如果这两条线段之间的夹角小于给定的阈值,则认为这
两条线段是平行的;在平行的基础上,如果这两条平行线之间的距离小于给定的阈值,则认为这两条线段是共线的,将这两条线段进行融合处理;
[0102]
步骤1.3.3,重复步骤1.3.2,直到剩余线段个数为0时,结束整个过程得到融合后的线段;
[0103]
步骤1.3.4,延长融合后的线段,然后,根据cgal库计算二维排列数据结构,使用扩展线段对室内场景的二维平面进行划分,将其分解成二维单元。
[0104]
步骤2,对室内场景进行下采样后,将下采样后的室内场景投影到二维平面上,离散化投影点并生成深度图像;然后将深度图像二值化,使用形态学腐蚀操作分割室内空间以识别房间数量;最后使用波前扩展方法把属于房间区域但未被访问的区域添加到房间空间中,得到室内场景的空间分割结果;具体为:
[0105]
步骤2.1,将室内场景空间的点云转换到二维图像上,得到相应的灰度图像,为了让图像呈现出明显的黑白效果,将灰度图像进行二值化处理,获得反映图像整体和局部特征的二值图像;具体为:
[0106]
步骤2.1.1,将步骤1.1下采样后的室内点云投影到xoy平面上,从投影点中找出最大的x、y坐标和最小的x、y坐标,根据最大最x、y坐标值确定图像的宽度和高度;
[0107]
步骤2.1.2,将投影点离散化到二维网格中,得到多个像素网格,将像素的大小设置为pixelsize,每个像素的大小由墙壁的厚度和点云的大小以及点云的密度决定,根据每个像素所包含的点数量判断该像素是灰色还是黑色,如果一个像素至少包含一个点,则表明该像素为灰色;如果一个像素不包含点,则表明该像素为黑色,进而得到灰度图像;
[0108]
步骤2.1.3,通过适当的阈值选取,将步骤2.1.2得到的灰度图像上的像素点的灰度值置为0或者255,如果像素点的灰度值大于或等于阈值的像素,则被判定为属于特定的物体,其灰度值用255表示;否则,这些像素点被排除在物体区域以外,其灰度值用0表示,得到二值图像。
[0109]
步骤2.2,默认每个房间通向其他房间或者走廊的门都关闭,使用3
×
3的结构元迭代地腐蚀步骤2.1获得的二值图像中的可访问像素,可访问像素为二值图像中的白色像素,腐蚀完成一次就会得到一个腐蚀结果图,通过腐蚀结果图上的轮廓判断是否有可分离区域,如果得到可分离区域则停止迭代,同时使用不同颜色将可分离区域进行标记;具体为:
[0110]
步骤2.2.1,从步骤2.1得到的二值图像的中心位置处开始第一次腐蚀,使用3
×
3的结构元腐蚀二值图像中的可访问像素,可访问像素为二值图像中的白色像素,腐蚀完成一次,就会得到一个腐蚀结果图;
[0111]
步骤2.2.2,在腐蚀结果图中寻找轮廓,所有轮廓只建立两个等级关系即顶层和内层,并统计所找到的轮廓数量findcontournums;
[0112]
步骤2.2.3,检查每一个轮廓,如果当前轮廓没有对应的内嵌轮廓,则计算当前轮廓所围成的区域面积contourarea1,从而计算出房间面积roomarea1,计算公式如(4)所示;
[0113]
roomarea1=cellsize*cellsize*contourarea1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0114]
其中参数roomarea1表示房间面积;cellsize表示一个单元网格的大小;contourarea1表示当前轮廓围成区域面积;
[0115]
步骤2.2.4,在步骤2.2.3的基础上判断当前检测出的轮廓是否为其它轮廓的内嵌轮廓,如果当前轮廓是其中一个轮廓的内嵌轮廓,则计算当前轮廓围成的区域面积
contourarea2,同时更新房间面积roomarea2,面积计算公式如式(5)所示;
[0116]
roomarea2=cellsize*cellsize*contourarea2-roomarea1
ꢀꢀꢀꢀꢀꢀꢀ
(5)
[0117]
其中参数roomarea2表示更新后的房间面积;
[0118]
步骤2.2.5,判断当前房间面积是否在上限阈值和下限阈值之间,下限阈值表示数据中最小的房间面积,上限阈值表示最大的房间面积,如果当前面积在上限阈值和下限阈值之间,则将其轮廓保存起来;
[0119]
步骤2.2.6,重复步骤2.2.1到步骤2.2.5,迭代腐蚀二值图像中的可访问像素,直到所有剩余区域的面积都小于下限阈值,此时停止迭代,得到可分离区域,然后将得到的可分离区域进行不同颜色标记。
[0120]
步骤2.3,根据步骤2.2标记的可分离区域检测出房间的数量,此时二值图像上有三种状态,其中白色像素表示可访问区域中未被标记的区域,然后利用波前传播方法对白色像素进行扩展,得到最终的房间空间分割结果;具体为:
[0121]
步骤2.3.1,根据步骤2.1的二值图像结合步骤2.2的轮廓得到房间分割结果,以此分割结果作为输入,此时房间分割结果图呈现三种状态,第一种是黑色表示的黑色像素,即就是经过步骤2.1.2得到的黑色像素,黑色像素所在的区域表示不可访问区域,该部分不属于室内场景;第二种是白色表示的白色像素,即就是步骤2.1.3得到的二值图像中的白色像素,白色像素所在的区域表示可访问区域但未被访问;第三种是使用不同颜色标记的区域,即就是经过步骤2.2.6标记后的区域,不同的颜色表示由一些像素组成的不同房间区域;
[0122]
步骤2.3.2,从未被标记的的白色像素中选取一个像素,根据该像素周围3
×
3区域内其它像素的颜色判断当前像素的颜色,从该像素开始判断它的三个通道的通道值,如果该像素三个通道的通道值同时大于250,则表示该像素是一个可访问像素;如果该像素三个通道的通道值同时不为0并且小于等于250,则将此像素三个通道的通道值赋值给可访问像素,实现可访问像素的标记,并将其扩展到房间空间中;
[0123]
步骤2.3.3,迭代步骤2.3.1和步骤2.3.2,直到步骤2.3.1中房间分割结果中未被标记的区域全部实现标记后,实现室内场景的空间分割。
[0124]
步骤3,将步骤1得到的把室内场景的单元划分结果与步骤2得到的室内场景的空间分割结果进行重叠,在重叠区域中生成随机点,根据每个网格单元中随机点所带颜色标签的数量决定该网格单元属于哪一个房间,从而实现房间布局的准确划分;具体为:
[0125]
步骤3.1,将步骤1得到的把室内场景的单元划分结果与步骤2得到的室内场景的空间分割结果进行重叠;
[0126]
步骤3.2,在重叠空间中创建一组随机点集,将每个单元网格中的中心点添加到随机点集中,让每个单元网格中的点从空间分割结果中提取标签信息;
[0127]
步骤3.3,通过计算每个单元网格中相同标签的点的数量,然后根据该单元网格中出现频率最高的标签为该单元网格分配一个标签,或者根据一个已标记的单元网格被相同的已标记的单元网格包围,那么该单元网格也被标记为与周围单元网格相同的标签;
[0128]
步骤3.4,将步骤3.1到步骤3.3完成的分割结果标签的单元网格可视化,然后合并相同标签的单元网格,删除步骤2.3中二值图像中不可访问的白色像素的单元网格,得到最终的房间布局划分结果。
[0129]
实施例
[0130]
本发明的实施例本发明使用了两组数据scene1和scene2,如图2(a)、图3(a)所示,其中图2(a)为scene1的原始场景数据,图3(a)为scene2的原始场景数据,具体过程如下:
[0131]
本发明基于单元分解与空间分割的房间布局划分方法,具体按照如下步骤实施:
[0132]
步骤1,从室内点云场景中提取墙面点云,然后对墙面点云划分为若干个片段,计算每个片段的质心点,根据质心点拟合墙面点云对应的直线,然后对拟合的直线进行融合处理,然后基于融合处理的结果进行单元分解,得到室内场景的单元划分结果;具体为:
[0133]
步骤1.1,对室内场景进行下采样后,得到下采样后的室内点云场景,分别对应图2(b)和图3(b),其中,图2(b)为scene1的下采样后的场景数据,图3(b)为scene2的下采样后的场景数据,将下采样后的室内点云场景作为输入将其分割成若干个水平点云切片,使用区域生长的聚类方法,将每个水平点云切片中的墙面点和室内杂物分割,最终保留墙面点,得到对应水平点云切片的墙面点云;其中,使用区域生长的聚类方法,将每个水平点云切片中的墙面点和室内杂物分割,最终保留墙面点,得到对应水平点云切片的墙面点云具体为:
[0134]
步骤1.1.1,计算每个水平点云切片中每个点的曲率,按照点的曲率值对点进行排序,找到曲率最小的点,将其添加到种子点集合中;
[0135]
步骤1.1.2,对于每个种子点,若其k近邻点同时满足式(1)和式(2),则将该点添加到潜在的种子点列表当中;
[0136]
||n
p
·ns
||》cos(θ
th
)
ꢀꢀꢀꢀꢀ
(1)
[0137]
其中,n
p
表示当前种子点的法向量;ns表示当前种子点的k近邻点的法向量;θ
th
表示一个平滑阈值;
[0138]rp
《r
th
ꢀꢀꢀꢀꢀꢀꢀ
(2)
[0139]
其中,r
p
表示当前种子点的k近邻点的曲率,r
th
表示一个曲率阈值;
[0140]
在本发明应用的两个实验中,scene1的切片厚度为0.15cm,切片数量为20,θ
th
为7,r
th
为1;scene2的切片厚度为0.15cm,切片数量为17,θ
th
为7,r
th
为1;
[0141]
步骤1.1.3,将步骤1.1.2添加到潜在的种子点列表当中点从最初的室内点云对应的切片点云中移除;
[0142]
步骤1.1.4,在步骤1.1.3的基础上进行聚类,设置最小点簇的点数为min,最大点簇的点数为max,将生成点数在min和max之间的所有切片保留,并对不同切片标记不同颜色加以区分,保留的切片的切片点云即为获取的墙面点云;
[0143]
步骤1.1.5,重复步骤1.1.1到步骤1.1.4,完成所有切片的聚类,最终得到每个切片对应的墙面点云,对应的两组实验结果如图4(a)、图5(a)所示。
[0144]
步骤1.2,将步骤1.1提取的每个墙面点云划分成若干个片段,计算每个片段的质心点,用质心点表示各个片段中所有点的特征,然后根据所求的质心点进行直线拟合;具体为:
[0145]
步骤1.2.1,输入步骤1.1提取的墙面点云,分别保存每个墙面点云中每一个点的x、y、z坐标;
[0146]
步骤1.2.2,根据墙面点云的x、y坐标计算墙面区域在空间中的长度和宽度,长度为x
max-x
min
,宽度为y
max-y
min
,x
max
、x
min
、y
max
、y
min
分别表示最大最小的x、y坐标;设置步长l为0.4m,将空间中的墙面点云划分到l
×
l的网格中,则总的行数为raster_rows=x
max-x
min
/l、总列数为raster_cols=y
max-y
min
/l;
[0147]
步骤1.2.3,创建一个一维数组vector_4、二维数组col_,三维数组row_col,设置数组vector_4大小为4,在根据raster_rows和raster_cols的大小设置数组col_大小为raster_cols
·
vector_4,数组row_col的大小为raster_rows
·
col;
[0148]
步骤1.2.4,将墙面点云中的点存储到对应的行和列中,其中任意一点的位置(row_idx,col_idx)表示为(ceil((points[i].x-point_min.x)/l-1),,ceil((points[i].y-point_min.y)/l-1)),point[i].x、point[i].y表示任意一点的x、y坐标,point_min.x、point_min.y表示最小点的x、y坐标;
[0149]
步骤1.2.5,如果row_idx或col_idx的值小于0,则将置为0;然后将步骤1.2.4选取的那个点的x、y、z依次存放在数组row_col[row_idx][col-idx][0]、row_col[row_idx][col-idx][1]、row_col[row_idx][col-idx][2]中,每存入一个点数组row_col[row_idx][col-idx][2]处的值增1;
[0150]
步骤1.2.6,重复步骤1.2.4和步骤1.2.5将所有属于墙面点云的点划分到对应的网格空间中,计算每个网格空间的质心点q,计算公式如式(3);
[0151][0152]
其中,x_mean、y_mean、z_mean分别表示质心点q的x、y、z坐标;m表示数组row_col的大小;n表示数组row_col[i]的大小;row_xol[i][j][0]表示提取的墙面点云对应的空间中任意一点的x坐标;row_xol[i][j][1]表示提取的墙面点云对应的空间中任意一点的y坐标;row_xol[i][j][2]表示提取的墙面点云对应的空间中任意一点的z坐标;row_col[i][j][3]表示每个网格提取的墙面点云对应的空间中所包含的点数量;
[0153]
步骤1.2.7,从每个墙面点云对应的多个质心点中任意选取三个点构造一个xoy平面,计算该平面方程的系数,然后计算构造平面的法向量v,根据求解的平面方程系数重新构造平面,并利用空间中线段的端点和平面的法向量构造一条投影直线,再次求解平面和投影直线的交点,该交点则为空间中直线段一个端点的投影点,最终依次连接对应的投影点即可得到投影后的线段,对应的两组实验结果如图4(b)、图5(b)所示。
[0154]
步骤1.3,将步骤1.2得到的直线进行投影,投影后进行融合处理,然后将融合处理的线段进行延长,根据cgal库计算二维排列数据结构,最终得到二维单元分解结果,具体为:
[0155]
步骤1.3.1,设置一个墙段的预定义长度值,然后对步骤1.2.7中投影后的多条线段按其长度由小到大进行排序,将长度小于预定义长度值的线段直接删除;
[0156]
步骤1.3.2,选择经步骤1.3.1处理之后的剩余线段中长度最大的线段将其添加到
最终的结果集合中,再从剩余线段中选择一条线段与最终结果集合中的线段进行比较,设定一个夹角阈值和一个距离阈值,如果这两条线段之间的夹角小于给定的阈值,则认为这两条线段是平行的;在平行的基础上,如果这两条平行线之间的距离小于给定的阈值,则认为这两条线段是共线的,将这两条线段进行融合处理;
[0157]
步骤1.3.3,重复步骤1.3.2,直到剩余线段个数为0时,结束整个过程得到融合后的线段,对应的两组实验结果如图4(c)、图5(c)所示;
[0158]
步骤1.3.4,延长融合后的线段,然后,根据cgal库计算二维排列数据结构,使用扩展线段对室内场景的二维平面进行划分,将其分解成二维单元,对应的两组实验结果如图4(d)、图5(d)所示。
[0159]
步骤2,对室内场景进行下采样后,将下采样后的室内场景投影到二维平面上,离散化投影点并生成深度图像;然后将深度图像二值化,使用形态学腐蚀操作分割室内空间以识别房间数量;最后使用波前扩展方法把属于房间区域但未被访问的区域添加到房间空间中,得到室内场景的空间分割结果;具体为:
[0160]
步骤2.1,将室内场景空间的点云转换到二维图像上,得到相应的灰度图像,为了让图像呈现出明显的黑白效果,将灰度图像进行二值化处理,获得反映图像整体和局部特征的二值图像;具体为:
[0161]
步骤2.1.1,将步骤1.1下采样后的室内点云投影到xoy平面上,从投影点中找出最大的x、y坐标和最小的x、y坐标,根据最大最x、y坐标值确定图像的宽度和高度;
[0162]
步骤2.1.2,将投影点离散化到二维网格中,得到多个像素网格,将像素的大小设置为pixelsize,每个像素的大小由墙壁的厚度和点云的大小以及点云的密度决定,根据每个像素所包含的点数量判断该像素是灰色还是黑色,如果一个像素至少包含一个点,则表明该像素为灰色;如果一个像素不包含点,则表明该像素为黑色,进而得到灰度图像,对应的两组实验结果如图6(a)、图7(a)所示;
[0163]
步骤2.1.3,通过适当的阈值选取,将步骤2.1.2得到的灰度图像上的像素点的灰度值置为0或者255,如果像素点的灰度值大于或等于阈值的像素,则被判定为属于特定的物体,其灰度值用255表示;否则,这些像素点被排除在物体区域以外,其灰度值用0表示,得到二值图像,对应的两组实验结果如图6(b)、图7(b)所示。
[0164]
步骤2.2,默认每个房间通向其他房间或者走廊的门都关闭,使用3
×
3的结构元迭代地腐蚀步骤2.1获得的二值图像中的可访问像素,可访问像素为二值图像中的白色像素,腐蚀完成一次就会得到一个腐蚀结果图,通过腐蚀结果图上的轮廓判断是否有可分离区域,如果得到可分离区域则停止迭代,同时使用不同颜色将可分离区域进行标记;具体为:
[0165]
步骤2.2.1,从步骤2.1得到的二值图像的中心位置处开始第一次腐蚀,使用3
×
3的结构元腐蚀二值图像中的可访问像素,可访问像素为二值图像中的白色像素,腐蚀完成一次,就会得到一个腐蚀结果图;
[0166]
步骤2.2.2,在腐蚀结果图中寻找轮廓,所有轮廓只建立两个等级关系即顶层和内层,并统计所找到的轮廓数量findcontournums;
[0167]
步骤2.2.3,检查每一个轮廓,如果当前轮廓没有对应的内嵌轮廓,则计算当前轮廓所围成的区域面积contourarea1,从而计算出房间面积roomarea1,计算公式如(4)所示;
[0168]
roomarea1=cellsize*cellsize*contourarea1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0169]
其中参数roomarea1表示房间面积;cellsize表示一个单元网格的大小;contourarea1表示当前轮廓围成区域面积;
[0170]
步骤2.2.4,在步骤2.2.3的基础上判断当前检测出的轮廓是否为其它轮廓的内嵌轮廓,如果当前轮廓是其中一个轮廓的内嵌轮廓,则计算当前轮廓围成的区域面积contourarea2,同时更新房间面积roomarea2,面积计算公式如式(5)所示;
[0171]
roomarea2=cellsize*cellsize*contourarea2-roomarea1
ꢀꢀꢀꢀꢀꢀꢀ
(5)
[0172]
其中参数roomarea2表示更新后的房间面积;
[0173]
步骤2.2.5,判断当前房间面积是否在上限阈值和下限阈值之间,下限阈值表示数据中最小的房间面积,上限阈值表示最大的房间面积,如果当前面积在上限阈值和下限阈值之间,则将其轮廓保存起来;
[0174]
在本发明应用的两个实验中,scene1的二值图像中像素为60mm,最大的房间面积为10,最小的房间面积为1;scene2的二值图像中像素为50mm,最大的房间面积为25,最小的房间面积为3;
[0175]
步骤2.2.6,重复步骤2.2.1到步骤2.2.5,迭代腐蚀二值图像中的可访问像素,直到所有剩余区域的面积都小于下限阈值,此时停止迭代,得到可分离区域,然后将得到的可分离区域进行不同颜色标记,对应的两组实验结果如图6(c)、图7(c)所示。
[0176]
步骤2.3,根据步骤2.2标记的可分离区域检测出房间的数量,此时二值图像上有三种状态,其中白色像素表示可访问区域中未被标记的区域,然后利用波前传播方法对白色像素进行扩展,得到最终的房间空间分割结果;具体为:
[0177]
步骤2.3.1,根据步骤2.1的二值图像结合步骤2.2的轮廓得到房间分割结果,以此分割结果作为输入,此时房间分割结果图呈现三种状态,第一种是黑色表示的黑色像素,即就是经过步骤2.1.2得到的黑色像素,黑色像素所在的区域表示不可访问区域,该部分不属于室内场景;第二种是白色表示的白色像素,即就是步骤2.1.3得到的二值图像中的白色像素,白色像素所在的区域表示可访问区域但未被访问;第三种是使用不同颜色标记的区域,即就是经过步骤2.2.6标记后的区域,不同的颜色表示由一些像素组成的不同房间区域;
[0178]
步骤2.3.2,从未被标记的的白色像素中选取一个像素,根据该像素周围3
×
3区域内其它像素的颜色判断当前像素的颜色,从该像素开始判断它的三个通道的通道值,如果该像素三个通道的通道值同时大于250,则表示该像素是一个可访问像素;如果该像素三个通道的通道值同时不为0并且小于等于250,则将此像素三个通道的通道值赋值给可访问像素,实现可访问像素的标记,并将其扩展到房间空间中;
[0179]
步骤2.3.3,迭代步骤2.3.1和步骤2.3.2,直到步骤2.3.1中房间分割结果中未被标记的区域全部实现标记后,实现室内场景的空间分割,对应的两组实验结果如图6(d)、图7(d)所示。
[0180]
步骤3,将步骤1得到的把室内场景的单元划分结果与步骤2得到的室内场景的空间分割结果进行重叠,在重叠区域中生成随机点,根据每个网格单元中随机点所带颜色标签的数量决定该网格单元属于哪一个房间,从而实现房间布局的准确划分;具体为:步骤3.1,将步骤1得到的把室内场景的单元划分结果与步骤2得到的室内场景的空间分割结果进行重叠,对应的两组实验结果如图8(a)、图9(a)所示;
[0181]
步骤3.2,在重叠空间中创建一组随机点集,将每个单元网格中的中心点添加到随
机点集中,对应的两组实验结果如图8(b)、图9(b)所示,让每个单元网格中的点从空间分割结果中提取标签信息;
[0182]
步骤3.3,通过计算每个单元网格中相同标签的点的数量,然后根据该单元网格中出现频率最高的标签为该单元网格分配一个标签,或者根据一个已标记的单元网格被相同的已标记的单元网格包围,那么该单元网格也被标记为与周围单元网格相同的标签,对应的两组实验结果如图8(c)、图9(c)所示;
[0183]
步骤3.4,将步骤3.1到步骤3.3完成的分割结果标签的单元网格可视化,然后合并相同标签的单元网格,删除步骤2.3中二值图像中不可访问的白色像素的单元网格,对应的两组实验结果如图8(d)、图9(d)所示,得到最终的房间布局划分结果。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1