Grassfire算法:

一、概念

这个算法是做图像处理的抽骨架处理,目的是求出图像的骨架,可以想象一片与物体形状相同的草,沿其外围各点同时点火。当火势向内蔓延,向前推进的火线相遇处各点的轨迹就是中轴。

一个与细化有关的运算是抽骨架,也称为中轴变换(Medialaxis transform)或焚烧草地技术(grass-fire technigue)。中轴是所有与物体在两个或更多非邻接边界点处相切的圆心的轨迹。但抽骨架很少通过在物体内拟合圆来实现。
    概念上,中轴可设想成按如下方式形成。想象一片与物体形状相同的草,沿其外围各点同时点火。当火势向内蔓延,向前推进的火线相遇处各点的轨迹就是中轴。
      抽骨架的实现与细化相似,可采用一个两步有条件腐蚀实现,但是删除像素的规则略有不同。
    下图将细化与抽骨架进行比较。二者的主要的差别在于抽骨架在拐角处延伸到了边界,而由细化得到的骨架却没有。
上面图a是细化的效果,下面的图b是抽骨架的效果。
(左边是处理一个均匀的矩形区域,右边是处理一个均匀的圆形区域)

二、简单运算实现:(加强理解)

我们的目标是:找到start-end之间的最短路径。

如图所示。刷过leetcode的朋友看见这张应该会会心一笑,BFS,DFS这类词争先恐后往外跳。但是呢,太高级了,我的朋友们。让我们先用一种最文艺(傻气)的办法,来解决这个问题。

Grassfire 算法。小时候,大家都背过一首诗:离离原上草,一岁一枯荣。 野火烧不尽,春风吹又生。说的就是这种算法。这首诗告诉我们,草,都是从旁边的草开始燃烧蔓延的!grassfire-烧草,就这么简单又有力。

1.首先把终点的距离设定为0,然后设定距离终点最近的格子距离为1。如图所示

2.然后,距离1最近的格子是2,距离2最近的格子是3,以此类推

3.好了,这时候每一个数字都代表这该单元格到终点的距离。我们把数字连起来,就形成了最短路径,注意了,这个路径很可能不是唯一解。

整个过程用伪代码表示就是:

For each node n in the graph
2  ·n.distance=Infinity
Create an empty list.
goal.distance=0,add goal to list.
While list not empty
6  ·Let current=first node in list,remove current from list
7  ·For each node,n that is adjacent to current
8    ·If n.distance=Infinity
9      ·n.distance=current.distance+1
10      ·add n to the back of the list

但是有些时候,我们会遇见走不通的情况,我们写代码的时候就要考虑好这个问题

三、实现过程:
1.如果start-end之间有路,找到最短路径
2.如果start-dend之间没有路,跳出循环,报错

下面谈谈这个算法计算复杂度的问题,这个算法是一种遍历搜索,火会席卷每一个角落。

计算复杂度为:O(|V|)

其中,V是图中格子的数量。我们假设我们有100个格子,要访问的格子数
2维棋盘:100 X100 = 1000
3维棋盘: 100X100X100 = 1000000
6维棋盘: 100X100X100X100X100X100 =1000000000000

1000000000000啊朋友们,什么概念,就差不多和天上的星星一样多了哇!grassfire的计算量随着格子的变多或者维度的上升而变得很大。

好啦,总的来说这是一个很简单的算法,一定能找到全局最优解。

参考:1)运动规划(Motion planning)- Grassfire 算法——https://www.jianshu.com/p/e22acfc75731?from=timeline

2)grassfire算法——https://www.iteye.com/blog/benworld-1920217

Grassfire算法- 运动规划(Motion planning)的更多相关文章

  1. 运动规划 (Motion Planning): MoveIt! 与 OMPL

    原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 最近有不少人询问有关MoveIt!与OMPL相关的话题,但是大部分问题都集中于XXX功能怎么实现,XXX错 ...

  2. 运动规划 (Motion Planning): MoveIt! 与 OMPL---44

    原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 最近有不少人询问有关MoveIt!与OMPL相关的话题,但是大部分问题都集中于XXX功能怎么实现,XXX错 ...

  3. 运动规划(Motion Planning)

    相关介绍: https://mp.weixin.qq.com/s?__biz=MzA5MDE2MjQ0OQ==&mid=2652786406&idx=1&sn=f937dd6a ...

  4. MoveIt运动规划-1

    按照帮助文档Setup Assistant Tutorial中的描述,用moveit_setup_assistant图形界面一步步配置机器人,最后生成机器人的配置文件保存到指定的文件夹中. 以UR5机 ...

  5. 【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一

    参考资料及致谢 本文的绝大部分内容转载自以下几篇文章,首先向原作者致谢,希望自己能在这些前辈们的基础上能有所总结提升. 1. 运动规划/路径规划/轨迹规划的联系与区别 https://blog.csd ...

  6. 如何用MoveIt快速搭建机器人运动规划平台?

    MoveIt = RobotGo,翻译成中文就是“机器人,走你!”所以,MoveIt的主要就是一款致力于让机器人能够自主运动及其相关技术的软件,它的所有模块都是围绕着运动规划的实现而设计的. 两个月前 ...

  7. 泡泡一分钟:Automatic Parameter Tuning of Motion Planning Algorithms

    Automatic Parameter Tuning of Motion Planning Algorithms 运动规划算法的自动参数整定 Jos´e Cano, Yiming Yang, Brun ...

  8. 泡泡一分钟:Motion Planning for a Small Aerobatic Fixed-Wing Unmanned Aerial Vehicle

    Motion Planning for a Small Aerobatic Fixed-Wing Unmanned Aerial Vehicle Joshua Levin, Aditya Paranj ...

  9. 泡泡一分钟:Learning Motion Planning Policies in Uncertain Environments through Repeated Task Executions

    张宁  Learning Motion Planning Policies in Uncertain Environments through Repeated Task Executions 通过重 ...

随机推荐

  1. Python的Asyncore异步Socket模块及实现端口转发的例子

    Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...

  2. Centos7安装php5.6并配置php-fpm协同工作

    yum install epel-release rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum in ...

  3. orcale11g安装

    一.centos7.5安装orcale 安装环境 内存最小1G,推荐2G或者更高 内存为1-2g,swap是内存的1.5倍左右 内存大于2G, swap和内存相等 硬盘最小为30G oracle版本 ...

  4. sqlserver 数据库操作导出数据sql工具

    软件名称sqldbx 下载URL  https://download.csdn.net/download/yanghl1998/7832861 Navicat Premium  这个工具任何类型数据库 ...

  5. 【c# 学习笔记】所有类的父类:System.object

    在c#中,所有的类都派生自System.Object类.如果定义的类,没有直达任何基类,编译器就会自动把Object类当作它的基类.和其他类 一样,System.Object类也定义了一组共有的成员, ...

  6. js前端 多条件筛选查询

    一.前言 在做项目中,遇到多条件筛选案例.实现完成以后,我将我做的代码分享在这里,希望可以帮助到其他朋友. 二.效果截图 三.实现代码 首先我先类型.类别.职位分成三块来处理,如果传到服务器端的话,就 ...

  7. 【基本优化实践】【1.6】在sql server修改且移动数据库文件位置

    在master数据库中,SQL Server提供系统扩展的存储过程,其中有一些存储过程的命名以xp_开头,用于处理操作系统的文件. 一,判断文件是否存在 存储过程sys.xp_fileexist 用于 ...

  8. [转帖]8086 CPU 寄存器简介

    8086 CPU 寄存器简介 https://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 哎 没看完 感觉好复杂. 引子 打算写几篇 ...

  9. Jetbrains系列产品2019.2.3最新激活方法

    Jetbrains系列产品2019.2.3最新激活方法[持续更新] 发表于 2018-08-25 | 分类于 软件调试 本站惯例:本文假定你知道Jetbrains家的产品.不知道可以问问搜索引擎. 大 ...

  10. Python class and object

    # Python继承 class Person(object): """人""" def __init__(self, name, age) ...