基于激光点云的外墙平整度检测方法与流程

文档序号:37472163发布日期:2024-03-28 18:54阅读:19来源:国知局
基于激光点云的外墙平整度检测方法与流程

本发明涉及外墙平整度检测,更具体地,涉及一种基于激光点云的外墙平整度检测方法。


背景技术:

1、在测量建筑物外墙场景中,需要检测建筑外墙的平整度。现阶段主要人为在外墙上使用两米靠尺测量局部墙壁的平整度,存在测量人员的测量安全隐患、测量不准确、测量无法全局测量。而且,检测建筑物的外墙,人员需要配搭高空作业工具,存在高危险性;人工检测建筑物外墙平整度,只能小范围局部墙壁检测,检测不连续性,也无法直接检测出外墙的倾斜度;不同的人检测外墙平整度标准不一致,受人员主观影响大;人工检测建筑物外墙平整度耗费时间太长,每次检测的范围小,检测效率低。


技术实现思路

1、本发明为克服上述现有技术中的缺陷,提供一种基于激光点云的外墙平整度检测方法,能够更加准确的检测外墙平整度,效率更高。

2、为解决上述技术问题,本发明采用的技术方案是:

3、一种基于激光点云的外墙平整度检测方法,包括以下步骤:

4、s1.使用激光扫描仪对建筑物进行扫描,筛选建筑物墙面,将建筑物点云与其他点云分开;

5、s2.对建筑物墙面提取有效的墙壁点云;

6、s3.将墙壁点云投影在二维平面上;

7、s4.获取墙面的主要范围,去除偏移点;

8、s5.计算建筑物每一层的分界线,获取平均楼面高度;

9、s6.基于平均楼面高度切分墙面,划分楼层高度;

10、s7.根据墙面的高度和深度计算墙面倾斜角度;

11、s8.对墙面图像进行重新拟合平面操作,计算墙面的每个像素值并与实际图像对比,对符合阈值条件的像素值设为0,不符合阈值条件的设于1;墙面畸变值为墙面所有像素值为1的总数,墙面平整度为墙面点总数减去墙面畸变值,再除以墙面点总数。

12、根据上述技术手段,本发明使用激光扫描仪生成建筑物外墙的像素图,解决了人为目测不准确、标准不统一的问题;步骤s1解决了建筑物点云和地面点云分开的问题,步骤s2解决了提取建筑物点云的外墙部分,有效提取建筑物外墙需要计算平整度的部分点云,步骤s3到步骤s4将建筑物点云转换为墙面像素图,能有效直接解决人工无法整体测量完整墙面的问题;步骤s5到步骤s6精确获取外墙每一层楼的墙面,解决了人工靠尺测量墙面无法覆盖所有墙面的问题;步骤s7解决了人工靠尺无法计算出整体外墙的倾斜度问题;步骤s8解决了人工靠尺无法有效计算外墙每个区域的平整度连续性问题,步骤s8能直观有效计算外墙每一块区域的平整度变化趋势问题。

13、进一步地,所述步骤s1具体包括:

14、s11.对激光扫描仪扫描出来的点云进行体素下采样操作,降低点云密度,降低计算量;

15、s12.计算点云获取每个点的法线信息,总共n个点云个数的法线信息normals(xn,yn,zn),将所有点云法线normals的z坐标设置为0,去除点云高度信息,将点云投影到xy平面,获得normals_pts(xn,yn,0),计算点云法线normals和点云坐标normals_pts之间的叉积res,再计算叉积res中每个点的范数,以测量点云中每个点到法线的距离dist,根据每个点的dist筛选出有效的点云;

16、s13.循环多次随机选择五个最大的平面,平面由ransac算法分割点云中获取,并获取平面的墙面模型plane_model(a,b,c,d)和平面上的内点inliers,计算平面与原点的距离distance,计算平面向量(a,b,c)与向量(0,0,1)的夹角,通过夹角判断平面是否与地面平行或者垂直,获取与地面垂直关系的平面作为墙面;

17、s14.根据墙面的点云范围获取墙面的高度wall_h和点云点数point_num,通过墙面高度wall_h、点云点数point_num和墙面距离原点的距离distance为条件筛选墙面是否为目标墙面;

18、s15.使用通过条件筛选的墙面模型plane_model(a,b,c,d)和点云点数相乘,再加上plane_model(0,0,0,d)距离,得到墙面点云的厚度,将墙面点云厚度大于设定阈值的点云剔除。

19、进一步地,所述步骤s2具体包括:

20、s21.将获取到的墙面基于点数量排序,从多到少排序,以第一个墙面作为基准墙面,遍历每个墙面,计算墙面与基准墙面的高度差是否大于设定值,若大于设定值,则跳过该墙面;

21、s22.构建墙面模型plane_model(a,b,c,d)方程,获取靠近墙面方程的点索引,根据索引获取更新后的墙面平面,计算更新后的墙面平面与原来的墙面模型plane_model(a,b,c,d)的变换矩阵;

22、s23.对墙面点云进行体素下采样操作,获取新的点云voxel_pcd,使用dbscan算法对voxel_pcd进行聚类,得到每个点的标签,根据标签统计每个簇的数量,并选择数量最多的簇的标签作为有效标签,将有效标签作为新的墙面点云,计算新的墙面点云的最小高度h_min,最大高度h_max,平均高度h_mean;

23、s24.根据实际场景筛选新的墙面点云,根据墙面点云高度、墙面的最低高度与地面高度对比和墙面平均高度与墙面最高高度的比例筛选墙面点云是否为有效墙面;对有效墙面点云的z轴坐标进行归一化处理。

24、进一步地,所述步骤s3具体包括:

25、s31.将墙面点云合并为数组点集wall_points,将数组点集wall_points的坐标值乘以一个缩放因子,计算点集中x、y、z轴的最小值min_x、min_y、min_z和最大值max_x、max_y、max_z,并将所有点的坐标值减去最小值,使得所有值变为正值,将z轴的值减去z轴的最大值的一半,即将z轴的值复原为正负值;

26、s32.遍历所有的墙面点云点集,新建一个大小为(max_y+1,max_x+1)值为nan的npy数组,对每个点集的坐标值乘以缩放因子,并将z轴的值转换为正负值;根据点的坐标值,在npy数组中相应的位置赋值为点的z轴坐标值,未赋值的位置保持为nan;对npy数组进行边缘填充,保证点云悬空的高度,将npy数组沿垂直方向翻转,将处理后的npy数组加入点云点集的all_npy列表中;

27、s33.将all_npy列表中的数组沿着最后一个维度进行堆叠,得到形状为(max_y+1,max_x+1,num_planes)的数组all_npy;all_npy数组为墙面点云投影的二维数组。

28、进一步地,所述步骤s4具体包括:

29、s41.创建一个与输入的二维数组all_npy大小相同的掩膜mask,其中非nan值对应位置为255,nan值对应位置为0,掩膜mask用于筛选出有效的墙壁区域;

30、s42.使用阈值化将掩膜转换为二值图像,其中灰度值大于50的像素设置为255,灰度值小于等于50的像素设置为0;

31、s43.去除墙面平面的零散点云,使用形态学操作合并和平滑掩膜mask,先用闭运算合并零散点云,再使用开运算进一步去除噪点;

32、s44.使用轮廓检测在二值图mask上寻找轮廓,对每个轮廓进行处理,计算轮廓边界矩形(x,y,w,h),并根据宽度和高度计算面积,根据面积从大到小对边界矩形进行排序,获得边界矩形列表box_ls,用box_ls的第一个作为基准矩形base_box,初始化两个列表(y_ls和x_ls),用基准矩形的顶点坐标,遍历剩下的边界矩形,用每个边界矩形与基准矩形作比较,若新的边界矩形与基准矩形的位置关系为包含、重叠,则在x_ls和y_ls列表中插入边界矩形(x1,y1,x2,y2);没有包含、重叠的关系则计算下一个轮廓矩形;

33、s45.计算x_ls和y_ls的最大值和最小值,得到墙面的主要范围(x1,y1,x2,y2)。

34、进一步地,在所述步骤s4中,使用opencv库的resize函数缩放mask的尺寸,并使用插值方法将掩膜mask调整到新的尺寸。

35、进一步地,所述步骤s5具体包括:

36、s51.使用主要范围(x1,y1,x2,y2)在all_npy中获取墙面图片new_npy,对墙面图片new_npy进行2d均值池化操作,将new_npy转换为灰度图像,获取图像的高度和宽度,对图像进行中值滤波,去除噪声,计算图像的水平和垂直梯度,将梯度图像转换为绝对值并进行阈值处理,超过阈值的像素设置为255,否则为0,将垂直梯度中与水平梯度不为0的像素设为0,对垂直梯度图像进行形态学闭操作和开运算操作;

37、s52.创建一个空列表h_ls,用于存储每一行垂直梯度的非零像素数量。遍历图像的每一行,计算该行垂直梯度的非零像素数量,并将结果添加到h_ls中;对h_ls进行倒序排序,并只保留楼高的一半,得到all_ind;

38、s53.创建一个空列表ind_ls,用于存储分界线所在楼层的位置;使用循环从all_ind中取一个值,并与上一个值比较,若差值大于设定值,则表示找到了一个新的分界线位置,将上一个位置的平均值添加到ind_ls中,重新开始记录新的位置,否则继续记录当前位置,将最后一个位置的平均值添加到ind_ls中;

39、s54.创建space_ls列表,用于存储每个楼层之间的高度;计算ind_ls相邻的楼层的差值,并存储在列表space_ls中;对space_ls列表进行排序,并不断将标准差较大的数据点去除,直到标准差小于设定值或者列表space_ls长度小于等于设定值为止;最后计算space_ls列表中所有元素的平均值,若平均值小于预设值,则将其设置为预设值。

40、进一步地,所述步骤s6具体包括:创建一个mask的布尔数组,长度为墙面的高度,并将所有元素初始化为false,从首层高度开始,每隔楼面高度floor_height的距离,将mask中的相应索引位置设置为true,以表示楼层间隔线。

41、进一步地,所述步骤s7具体包括:将墙面数据new_npy进行二值化图像,对二值化图像进行闭合运算和开运算,去除噪声并闭合墙面的缝隙,将处理完的图像赋值给img_inv,在图像img_inv的上下两边取正方形区域area,在area区域计算像素值的平均值top_z和bottom_z,top_z和bottom_z的差值为墙面的深度depth,再计算图像img_inv的高度high,根据墙面的高度和深度计算出墙面的倾斜角度。

42、进一步地,所述步骤s8具体包括:

43、s81.根据楼层高度的索引获取墙面每一层楼层的墙面图像,根据每一层楼层的墙面重新拟合平面,对墙面图像进行形态学操作闭操作和开操作,将零散点云合并成连通区域,并去除小的噪声点;

44、s82.利用opencv库中的connectedcomponentswithstats函数获取连通区域的数量、标签、统计信息和质心坐标,遍历每一个连通区域,创建区域对应的点云,对每个区域重新拟合平面;

45、s83.使用open3d库中的segment_plane函数对点云进行平面拟合,得到平面模型的系数,根据平面模型的系数计算出墙面平面二维数组,对每个连通区域进行重新拟合平面的操作,将墙面的每一层楼层进行拟合平面操作;通过connectedcomponentswithstats函数处理完墙面数据后,会获得多个标签的连通区域,需要使用拟合平面的操作将每个连通区域的数据变为点云,再将所有连通区域拟合出来的点云数据再进行拟合平面操作,最终获得外墙墙面的平面;第一次拟合操作是拟合每个连通区域,第二次拟合操作是将每个拟合区域拟合出来的点云进行拟合操作,将多个点云组成一个整体点云;

46、s84.计算拟合平面后的墙面每个像素值根据实际场景比较,将符合阈值条件的像素值设为0,不符合条件的像素值设置为1;

47、s85.墙面畸变值为墙面所有像素值为1的总数,墙面的平整度为墙面点数减去墙面畸变数,再除以墙面点总数。

48、与现有技术相比,有益效果是:本发明提供的一种基于激光点云的外墙平整度检测方法,使用激光扫描仪生成建筑物外墙的像素图,解决了人为目测不准确、标准不统一的问题;能有效直接解决人工无法整体测量完整墙面的问题;本发明精确获取外墙每一层楼的墙面,解决了人工靠尺测量墙面无法覆盖所有墙面的问题;还能计算出墙体外墙的倾斜度,还能有效计算外墙每个区域的平整度,直观有效计算外墙每一块区域的平整度变化趋势。

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