【问题标题】:How to find a path between the 2 points on a walkable path [closed]如何在可步行的路径上找到两点之间的路径[关闭]
【发布时间】:2021-12-14 23:41:22
【问题描述】:

在类似上面的图像中,也假设二值化(1 代表白色,0 代表黑色)。 白色区域代表可步行区域,2个红点只是为了告诉你起点和终点在哪里(但实际上2个红点的像素值仍然是1)。

如何找到从起点(可能是这两个红点中的任何一个)到另一个红点的路径?

搜索了一段时间,发现很多文章只讨论找到 2 个点之间的最短路径,但没有运气在可步行区域连接点。

我对这个问题的最初想法是使用所谓的“注水”方法来找出路径,但它需要递归调用,这很慢且内存密集。 由于路径是在 RPi 上的视频流中,因此需要非常快速地绘制路径,因此计算能力并不强。

欢迎任何想法和代码。

更新

为了更清楚:

  1. 作为起点的点将始终是底部(固定位置)并且

  2. 另一个点在同一个分支迷宫中。

  3. 让我们假设必然存在一条现有路径。

  4. 可以有多个路径,但我正在寻找最短路径

  5. 路径不太靠近可步行区域的边缘,这意味着路径与边缘有一个边距 X(宽度)。(可选)

【问题讨论】:

  • 您应该提供其他示例和限制条件。其中一个点可能位于分支迷宫的中间吗?是否一定存在现有路径?可以有(非平凡相同的)多条路径吗?
  • 使用 BFS 或 A* 在像素上查找路径,如果像素路径不够好,则使用高斯/拉格朗日插值来查找曲线
  • 嗨@Photon 谢谢,是的,我找到了一个可以进行 BFS 或 A* 路径查找的库,但我发现它需要很多依赖项。您对小型且有效的库有什么建议吗?
  • 嗨@mozway 一个点作为起点将始终是底部(固定位置),另一个点在同一个分支迷宫中。是的,它必然是一条现有的路径。是的,可以有多条路径,但我正在寻找一条不会太靠近可步行区域边缘的最短路径。
  • 我有一个解决这个问题的想法。 1-您已经知道红点在哪里,计算红点到其行中的黑色区域有多远。 2- 将这些长度相互缩放 3- 将此比例用于每个白色行并确定点,直到到达另一个红点

标签: python algorithm opencv image-processing opencv-python


【解决方案1】:

您可以使用 A* 等路径规划算法的任何实现,并在搜索矩阵时使用每个像素,其中 0 是可步行路径,1 是不可步行(墙壁)

这里是实现的要点 https://gist.github.com/ryancollingwood/32446307e976a11a1185a5394d6657bc

以及您需要根据需要导入和子类化的通用解决方案 https://github.com/jrialland/python-astar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多