ipa 分区算法分析,图解

news2024/10/5 12:35:09

参考

Room Segmentation: Survey, Implementation, and Analysis. 分区算法调查,实现以及评估对比

相关论文

  • 分区算法

New Brooms Sweep Clean - An Autonomous Robotic Cleaning Assistant for Professional Office Cleaning 形态分割

Interactive SLAM using Laser and Advanced Sonar 距离变换分割,论文仅提了一句用分水岭算法来分区

The Image Processing Handbook 图像处理手册,其中有分水岭分割算法

Learning metric-topological maps for indoor mobile robot navigation Voronoi 图分割

Semantic Labeling of Places using Information Extracted from Laser and Vision Sensor Data 特征/语义分割算法

Voronoi Random Fields: Extracting the Topological Structure of Indoor Environments via Place LabelingVoronoi 随机势场分割

相关文章

ipa 功能包分区算法,覆盖算法调试,本地运行测试

Morphological Segmentation 形态分割算法

形态分割的主要亮点是算法简单和计算速度快。

  1. 该算法在栅格地图 M_1上工作,栅格分为可访问和不可访问两种类型,白色区域代表可访问性,黑色区域表示不可访问性。如图 fig.1 左上角图片。

  2. 对地图 M_1 可访问区域(白色区域)进行形态学腐蚀操作,该操作是通过一个像素一圈一圈地重复腐蚀一定次数(用户设定的参数)。之后得到一些连通区域和分离区域。如图 fig.1 右上角图片。

  3. 在步骤 2 中,注意一定要一个像素一圈一圈地腐蚀。每次腐蚀后判断每个分离区域的面积,若分离区域大小在合适范围内(用户设定的区域大小上下限内),那么标记该分离区域的所有栅格为房间 r_i。地图 M_2 是地图 M_1 的拷贝。把分离出来的房间 r_i 在地图 M_2 中并标记上不同颜色,并且把 M_1 中房间 r_i 区域标记为不可访问区域。如图 fig.1 左下角图片是标记了房间的 M_2

  4. 重复“腐蚀-分离”操作,就能够得到一系列分离的房间并标记在地图 M_2 中。然后扩散每个房间,直到地图 M_2 中的可访问区域被标记完。如图 fig.1 右下角。

fig.1 形态分割算法

Distance Transform-based Segmentation 距离变换分割

  1. 将栅格地图用距离变换计算,距离变换值高说明离障碍物远,距离变换值低说明离障碍物近。栅格数值表示每个可访问像素(白色)到最近的边界像素(黑色)的距离。如图 fig.2 左上角(看起来像 Voronoi 变换)。

  2. 距离变换的局部最大值始终位于空间中心。在狭窄的走廊或门处,局部最大值比大房间内的最大值小。通过设置适当的阈值就可以区分出房间的中心。这里滤波的阈值需要用户根据实际场景设置。如图 fig.2 右上角。

  3. 从高到低地遍历距离变换值阈值 t,从距离变换地图中能够分类出一组分离的空间集合 C。随着遍历的进行,该集合 C 的数量会增加,说明找到了更多的离散空间。当阈值等于门处的局部最大距离变换值时候,两个离散空间会连通起来,空间集合 C 数量会减少。距离变换分割算法要找到一个阈值 t*,使得检索到的空间集合 C 最大。如图 fig.2 左下角。

    其实就是将栅格地图用距离变换转换栅格存储的数据,再用分水岭算法得到离散空间,也就是房间。

  4. 给找到的离散空间标记上,并扩散这些空间,直到所有可访问像素都标记上。

    距离变换分割与形态分割有一些相似之处,因此某些地图的分割结果非常相似。计算复杂度与形态分割相当。

fig.2 距离变换分割算法

分水岭算法 3D 可视化

下面 3D 图形通过 py 节点接收 costmap2d 地图话题,再用 plotly 库显示。

地图话题中,栅格数据表示与障碍物的接近程度,越接近障碍物数值越大,这也是一种距离变换。

栅格数值 100 表示障碍物,-1 表示未知区域,这里把 -1 转为 100 显示。

把地图栅格数据作为 z 轴,得到 costmap2d 的 3d 图形表示,如图 fig.2.1 显示:

fig.2.1 costmap2d 地图的三维显示
fig.2.2 costmap2d 地图

按照步骤 2,需要找到一个阈值来筛选出初始的房间中心,这里选择的阈值 t 是 51。图 fig.2.3 中图形 z 轴上的白色轮廓线就是初步筛选出来的房间中心。当 z 轴等于 51 时候,能够得到 8 个初始房间,即 8 个白色轮廓。

fig.2.3 分水岭初步分房

按照步骤 3 需要从高到低调整阈值 t,但根据我们这边 costmap2d 的距离变换,是从低到高调整阈值 t。接下来“水位上涨”,阈值 t 从 51 开始上升,地图右下角和左侧出现了新的白色轮廓。当阈值 t 达到 62 时候,房间数量达到最大的 10 个。此后阈值继续上升,当阈值 t 等于 66 时候,左侧中间的轮廓与左上角轮廓和中间对角轮廓连通,导致地图房间数量开始减少,“水位溢出”。如图 fig.2.4 显示。

fig.2.4 分水岭水位上涨

阈值 65 就是步骤 3 要找的目标阈值 t*。此时房间,也就是空间集合 C 数目最大,达到 10 个。如图 fig.2.5。

fig.2.5 分水岭得到最大空间集合 C

Voronoi Graph-based Segmentation Voronoi 图分割

基于 Voronoi 图的分割采用更复杂的启发式实现最后的合并步骤,这些启发式方法偏向于分割完整的房间。

  1. 计算广义 Voronoi 图,并通过将叶边缘折叠到其原点的节点中来修剪主骨架。如图 fig.3 左上角。

  2. 在 Voronoi 图上,如果某个 Voronoi 点恰好有两个最近障碍物像素(就是说该 Voronoi 点的最近两个障碍物像素点距离相等(这里必须是两个,因为后面要计算夹角!)。那么这个 Voronoi 点就有可能是两个房间之间的关键点。将这些关键点存储在集合 P 中。如图 fig.3 右上角。

  3. 绘制关键线:将集合 P 中的关键点与其最近障碍物点连接起来。关键线与墙体围成多个封闭区域,其中可能会存在紧密嵌套的封闭区,需要过滤掉多余封闭区,只保留外圈。封闭区的关键点处的夹角,姑且称为关键夹角。在角落中的关键夹角往往会比较小(小于 90°),可以移除掉。大角度的关键夹角经常出现在门口或通道处。经过关键线划分后得到的封闭区,把它称为 Voronoi 单元。尽管有过滤操作,仍会有一些零散的小单元。如图 fig.3 左下角。

    这里紧密嵌套的 Voronoi 单元过滤是比较关键的,论文只是一句话带过:

    The angle between both line segments is important if there are too many critical lines within an area. 
    这部分的处理应该要看 Voronoi 图分割算法的原论文才有更详细的描述。      

  4. 论文用以下启发式方法将 Voronoi 单元合并到类似房间的结构中:

    1. 单元面积小于阈值 (例如 12.5 平方米) ,且只有一个相邻单元,且该单元 75% 的边界不接触墙体。那么该单元就会与其相邻单元合并。

    2. 单元面积小于阈值 (例如 2 平方米) ,若其相邻单元有至少 20% 的边界接触墙体,该小单元合并进相邻单元。

    3. 合并以下区域(这个操作目的是连接同一房间内的两个部分):

      合并当前单元及其相邻单元 ni。

      1. 相邻的单元 ni 最多只有 2 个相邻单元。

      2. 当前这个单元的边界至少 50% 接触墙壁。

        这里感觉有点歧义,丢个原文吧:
        3) Merge regions with (i) exactly one neighbor that has maximal 2 neighbors and with (ii) at least 50% of the perimeter touching walls (this connects two parts inside the same room).
    4. 合并共享大部分边界的区域。例如小单元和大单元相邻,其中小单元至少 20%的边界与大单元接触,这部分边界又至少占大单元边界 10% 。

    5. 一个单元超过 40% 的边界接触相邻单元 nm,合并该单元与相邻单元 nm。(用于合并有离散障碍物的区域)。

应用所有合并规则后得到分割图。如图 fig.3 右下角。

!!!注意!!!

如果步骤 2 中,Voronoi 图上的点总是有多个(3或4个)最近障碍物点,那么步骤 3 中计算关键夹角就无法进行。需要增加策略过滤掉一些关键线,才能计算夹角。

fig.3 Voronoi 图分割算法

GVD 分割单元

下面画图大概表述下步骤 3 的流程:

图 fig.3.1 一个简单的示例场景地图。黑色是墙体。

fig.3.1 简单场景,黑色墙体

图 fig.3.2 通过计算得到地图的广义 voronoi 图,用绿色标记 。这里我只是画了大概的 GVD。

fig.3.2 绿色是 GVD

图 fig.3.3 中红色点是有 2 处最近障碍物点的关键点,紫色是有 3 处最近障碍物点的 GVD 点,是要丢弃的!

fig.3.3 红色是关键点

图 fig.3.4 用关键点连接最近障碍物得到关键线,标记为蓝色像素。关键线与墙体围成封闭区,红线表示封闭区。

fig.3.4 蓝色是关键线

图 fig.3.5 通过关键点密度及其围成的封闭区是否嵌套来过滤掉部分关键线。黄色点是最后剩下的关键线数据点。它们与墙体围成了 voronoi 单元。

fig.3.5 黄色是过滤后的关键线数据点

Feature-based Segmentation 特征/语义分割

  1. 在地图的每个可访问像素位置放置一个模拟的 360° 激光扫描仪,通过扫描一圈地图,得到相应位置的基本特征数据。如图 fig.4 左边。

  2. 这些基本特征数据可以计算出一组 33 个简单的几何特征,例如光线长度差或平均光线长度等。再用 AdaBoost 分类器将特征向量分类出房间标签,例如办公室或走廊。最后,合并具有相同标签的所有相邻点。为了获得良好的分区结果,需要用足够量的代表性数据来训练分类器。不同环境可能需要重新训练对应的分类器。

fig.4 特征/语义分割算法

看起来分割效果不好我就不研究了。

Voronoi Random Fields Segmentation Voronoi 随机势场分割

ipa 源码中新增的分割算法,并不在《Room Segmentation: Survey, Implementation, and Analysis. 》论文中。源码还未实现完该算法,执行会陷入循环。

fig.5 Voronoi 随机势场分割算法

分割效果对比

  • 分区回收率 recall 和精度 precision 对比

回收率定义:实际房间和分区重叠面积 / 实际房间面积。

精度定义:分区房间与实际房间的最大重叠面积 / 分区房间的面积。

第一行是不带家具测试,第二行是带家具测试。

第二列形态分割;第三列距离变换分割;第四列 Voronoi 图分割;第五列特征分割;

fig.6 分割效率对比

  • 分区效果

前三行是不带家具,后三行带家具。

第一列人工分区,第二列形态分割,第三列距离变换分割,第四列 Voronoi 图分割,第五列特征分割。

fig.7 分割效果对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1669520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EPICS database练习

给定一个以下的数据库: # 指定Limit的上限,初始为10,可以通过通道访问进行设置,上限为100 record(ao, "$(P)Limit") { field(DRVH, "100") field(DOL, "10") field(PINI, "YES") }# 一个…

vue3中的computed

一.computed用法 computed 计算属性就是当依赖的属性的值发生变化的时候,才会触发他的更改;如果依赖的值,不发生变化的时候,使用的是缓存中的属性值。 computed 属性是 Vue3 中的一个响应式计算属性,它可以根据其他响应…

谷歌Flank潜藏3年的Github Action供应链攻击

01 简 介 Flank [1] 是谷歌 Firebase Test lab 开源在 Github 的一个项目,用于同时对多个安卓和IOS设备进行测试。2024年4月15号 AWS 安全工程师 Adnan Khan 公布了关于该项目代码仓库 Github Action CI/CD 存在漏洞的细节[2],漏洞在2020年于此 代码合…

LabVIEW二维码生成与识别

LabVIEW二维码生成与识别 随着数字化时代的快速发展,QR二维码作为一种高效的信息传递和识别手段,已广泛应用于各行各业。利用LabVIEW软件及其NI视觉开发模块(VDM)来实现一个高效的QR二维码生成与识别系统。该系统不仅能够快速生成带有自定义信息的二维码…

未授权访问:VNC未授权访问

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好的文章: 这里附上大…

C++的数据结构(五):树和存储结构及示例

在计算机科学中,树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。这种数据结构以一系列连接的节点来形成树形结构。在C中,树的概念和存储结构是实现各种复杂算法和…

如何利用AI提高内容生产效率与AIGC典型案例分析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

DI-engine强化学习入门(八)如何高效构建决策环境

本文章将介绍 DI-engine 中用于高效构建和标准化不同类型决策环境的系列工具,从而方便我们将各式各样的原始决策问题转化为适合使用强化学习方法解决的形式。 前言 对于“决策环境复杂性”的问题,这里描述的是在强化学习(RL)领域…

torch 单机 多卡 训练(二)

pytorch.distributed.launch和torchrun的对比 多卡训练 真的烦 并行训练最大的好处,在于GPU内存变大,不是变快 torch.distributed.launch CUDA_VISIBLE_DEVICES0,1,2,3 python -m torch.distributed.launch --nproc_per_node4 --nnodes1 --use_env k…

获取Linux上的Redis的用户名、密码、端口、host等信息

目录 进入redis-cli的目录 启动./redis-cli服务 查询密码 查询用户名 查询端口 查询host 参考文章:解决redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused-阿里云开发者社区 (aliyun.com) linux查看redis用户和密码_mo…

最新版★重大升级★神点云连锁餐饮V2独立版点餐系统★公众号/h5/小程序前后端全套源码

提醒: 市场上流通很多老版本代码,一大堆问题且无法保证售后的源码,请各位买家一定要睁大眼睛,以防上当受骗!!!本系统源码全是经本人亲自测试与修复的完好版本,且本人用此版本源码已…

面试官:说说你对Node.js 的理解?优缺点?应用场景?

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…

EDA设计学习笔记2:STM32F103C8T6最小系统板的仿绘

今日开始仿制练习一个STM32F103C8T6最小系统板,通过对这个最小系统板的仿制,达到对自己PCB设计的练习的目的,最终目标是自己设计出一块PCB,做一个OLED的桌面小摆件...... 也不知道画出来能不能用..... 目录 主控芯片的搜索与放置…

定期更新与维护:技术与生活的同步律动

在这个数字化时代,科技的温暖之光照进了盲人朋友们的日常生活中,特别是那些辅助出行的应用程序,它们如同贴心的向导,引领着用户穿越城市的喧嚣与宁静。然而,要确保这些应用始终能够高效、安全地服务于盲人用户&#xf…

Centos 7.9如何使用源码编译安装curl最新版本

文章目录 1、前言2、curl源代码下载3、openssl安装4、编译curl4.1、配置编译环境4.2、编译输出二进制curl程序4.3、安装编译后的curl4.4、编译完成检查4.5、验证安装 1、前言 Centos 7.9,由于系统为2017年发行,且以稳定性为主,部分工具版本较…

每日OJ题_贪心算法四⑥_力扣1262. 可被三整除的最大和

目录 力扣1262. 可被三整除的最大和 解析代码 力扣1262. 可被三整除的最大和 1262. 可被三整除的最大和 难度 中等 给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。 示例 1: 输入:nums [3,6,5,1,8] 输出:1…

chorme浏览器或者edge浏览器使用开发者模式

本篇文章主要讲解edge,因为它内核是chorme,还可以使用微软账号同步,谷歌翻译也凉凉了,edge还可以用翻译,推荐国内windows用户用它。 打开开发者模式 直接按F12点击右上角三个点...,点击更多工具&#xff…

如何通过iptables配置URL过滤白名单?

正文共:1111 字 18 图,预估阅读时间:1 分钟 我们刚刚测完了iptables配置URL黑名单过滤(如何通过iptables配置URL过滤黑名单?),整体效果还算不错。但是,在很多时候,可能我…

体验MouseBoost PRO,让Mac操作更高效

还在为Mac的右键功能而烦恼吗?试试MouseBoost PRO for Mac吧!这款强大的鼠标右键增强软件,能让你通过简单操作即可激活多种实用功能,让你的工作变得更加轻松。其高度定制化的设计,更能满足你的个性化需求。赶快下载体验…

Spring STOMP-消息处理流程

一旦STOMP的接口被公布,Spring应用程序就成为连接客户端的STOMP代理。本节描述服务端消息处理的流程。 spring-messaging模块包含消息类应用的基础功能,这些功能起源于Spring Integration项目。并且,后来被提取整合到Spring框架,…