上传文件至 /

main
贾召钱 2024-06-11 19:10:18 +08:00
parent f41fb2a61f
commit 39e90be615
1 changed files with 0 additions and 0 deletions

107
说明文档.docx Normal file
View File

@ -0,0 +1,107 @@
语义地图后处理算法说明文档V2022.6.23
算法概述
算法需求
为了扫地机器人能够展示出更好的可视化效果,提高用户的参与度以及体验乐趣,绘制一个带物体形状的具有场景分类效果的语义栅格地图是十分有必要的。
输入、输出及其数据格式
输入cartographer生成的语义栅格地图(单通道图片)
输出:输出带有物体形状的场景分割地图(三通道图片)
目前效果
模拟测试阶段:
图1 输入图像
图2 处理后图像
详细描述
框架图
false
图3 算法框架图
详细步骤
基于语义栅格地图的区域分割
false
图4 区域分割流程图
本发明采用的栅格地图是使用cartographer建立。初始分辨率为1000x1000每个像素点代表5cmx5cm采集区域为居家实验场景。机器人为自主搭建配备单线激光雷达与双目摄像头并带有ROS系统控制及信息采集模块。
算法主要分为两部分,直线连接与端点连接,主要解决连续墙壁中存在空隙的部分以及拐角的空缺。
机器人建图完成后将生成一张地图,该地图的尺寸较大,有效的区域仅仅是一小部分,通过检测非零区域的左上端点和右下端点,截取地图有效区域;
为了减少图像操作所引入的额外像素带来的误差对图像向上近邻采样原本每像素代表5cm矩形上采样后代表2.5cm矩形;
对图像腐蚀膨胀,与原图分开保存;
填充墙壁边缘的空缺部分,其主要目的是填充现实中门所在的位置,为了填充门所在区域,在家居场景中,门与墙壁相连,因此在栅格地图中,所呈现的现象是一段墙壁与另一端墙壁之间存在了空闲区域,本发明的目的是填充该区域。因此需要提取所有墙壁区域。使用连通域的方法,提取出连通域面积大于阈值的部分,认为大于阈值的连通域是墙壁所在的区域;
通过霍夫变换,检测墙壁的直线,获得每条直线的角度;
通过遍历直线循环的方法,对提取墙壁的图片与原图同时旋转上步获得的角度;
对水平方向的栅格进行检测,判断栅格连续值是否达到阈值,达到阈值则认为该墙壁与门在同一水平方向,否则进行下一次循环;
对被认为是墙壁的水平位置,检测闲置区域,闲置区域的左右两端存在栅格,且闲置区域的宽度在阈值之内,则认为该闲置区域是门所应该在的区域,否则进行下一次循环;
连接上一步的区域;
获取连接线,添加至未腐蚀膨胀的原图中;
重复上述操作,直到所有墙壁被遍历;
对墙壁进行骨骼检测,得到墙壁区域的骨架;
对骨架进行端点检测建地图所有大于0的点置为9利用均值滤波保留值为2的点并将这些点与骨架做与运算得到骨架的端点
连接相邻的端点;
基于连通域的区域分割;
至此,得到了一个个被封闭的区域,连通域对不同区域进行标记,获得诺干个空间。
语义物体形状绘制
整体框架
false
图5 物体形状绘制流程图
语义物体形状绘制整体流程为,先对语义物体聚类,再判断语义物体是否需要直接根据已知边拟合矩形,如冰箱,衣柜、洗衣机和地毯,对于这类物体,直接根据已知边,绘制拟合矩形,对于其他物体,根据语义判断,计算最小外接矩形或最小拟合圆,最终根据计算出来的形状,绘制在地图上。
具体流程
对语义物体进行聚类
对每类语义物体采用OPTICS方法进行基于密度的聚类对于不同的语义物体设置聚类的半径和最小样本数不同每类语义语义物体聚类后便可以得到整张地图中该类语义物体的数量。
对特定物体直接根据已知边拟合矩形
oo 直线检测,获取语义物体所需的旋转矫正角度
oo 根据上一步计算所得角度,将语义物体摆正
oo 对语义物体做角点检测,根据计算的角点,画一个外接矩形
oo 将绘制完的物体,旋转回原来的角度
对于其他物体,根据语义信息计算最小外接矩形或最小拟合圆
oo 对每个语义物体,根据语义信息,计算最小外接矩形或最小拟合圆。
对于桌子,体重秤和椅子等这类物体,计算最小外接矩形,提取语义栅格地图上对应的语义点,根据外接面积最小原则,找出最小外接矩形,并保存该轮廓的四个方位点。
对于风扇底座和吧台椅底座等类物体,采用最小二乘法,计算最小拟合圆。
绘制物体形状
oo 根据物体的语义信息,判断是否直接画轮廓
对于桌子,体重秤和椅子等这类物体,则直接绘制矩形轮廓。
对于风扇底座和吧台椅底座等类物体,则直接绘制最小拟合圆的形状。
基于语义栅格地图的场景识别
整体框架
false
图6 场景识别流程图
基于语义栅格地图的场景识别主要步骤为:区域与语义物体类别提取和计算场景识别概率。
具体流程
区域与语义物体类别提取
对房间区域的地图进行像素值的提取,以及与已知语义物体的像素值进行比对,记录该区域的语义物体类别
计算场景识别概率
oo 计算检测出的物体属于某类场景的概率:
设场景有n类每一类记为ξi 能检测出的物体有m种每一种记为Oj
那么就可以根据每个场景下出现该物体的先验概率p(Oj=1⋯m |ξi=1⋯n)。
1当区域中只检测出一种物体Ot时该区域场景为某一特定场景ξs的概率为
p(ξs|Ot) = p(Ot|ξs) ∙p(ξs) i=1np(Ot|ξi) ∙p(ξi) ∙p(Ot)
其中p(Ot)是检测出Ot这个物体的置信度
2当该区域中检测出k种物体时该区域场景为某一特定场景ξs的概率为
p(ξs|Oj=1⋯k) = 1 j=1k(1 p(ξs|Oj)∙p(Oj))
其中p(Oj)是检测出Oj这个物体的置信度
oo 根据计算出的各场景概率,判断区域场景:
选取场景分类概率值最大的对应场景类别,作为该区域的场景类别。
算法记录
实验遇到的问题
墙壁出现断点不连续时,导致区域分割失败。
语义物体误出现在其他地方时,导致形状绘制失败。
2.解决办法
1由于数据来源问题区域分割失效。
2修改聚类参数。
实验环境及代码
实验环境
opencv3.4.2.16
2.代码
见附件