zoukankan      html  css  js  c++  java
  • Grassfire算法- 运动规划(Motion planning)

     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

  • 相关阅读:
    spark内存管理这一篇就够了
    spark推测机制及参数设置
    python易错点汇总,不定期更新
    Spark架构与原理这一篇就够了
    MySQL查询这一篇就够了
    pyspark计算最大值、最小值、平均值
    Spark性能调优的方法
    大流量场景下MySQL如何准备
    100台CentOS7要分区怎么办?
    100台CentOS7要升级OpenSSH怎么办?
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/AlgorithmOfGrassfire.html
Copyright © 2011-2022 走看看