【问题标题】:Algorithm to find change in direction in raster在栅格中查找方向变化的算法
【发布时间】:2019-12-27 15:10:14
【问题描述】:

我有一个包含 0 和 1 的栅格作为一个 numpy 数组,所有带 1 的像素都连接在一起形成一条线。这条线在所有地方都是 1 像素粗。使用寻路算法,我有一个所有点(列、行)的坐标列表,包括起点和终点。 我的线的形状是方形 U/矩形,缺少顶部。

我想找到线的方向变化更长的点。例如从下到右,或从右到上。

我看过Finding the point of a slope change as a free parameter- Python;但是,由于我的点都是水平、垂直或对角连接的,所以这是行不通的。我的 u 形也可以在阵列中对角线,因此我正在寻找连接类型变化超过 2 个像素的点。下面是我的数据示例,我想找到 (5,3)/(6,4) 和 (6,7)/(5,8)

a = np.array([[0,0,1,0,0,0,0,0,1],
              [0,0,1,0,0,0,0,0,1],
              [0,0,0,1,0,0,0,0,1],
              [0,0,0,1,0,0,0,1,0],
              [0,0,0,1,0,0,0,0,1],
              [0,0,0,1,0,0,0,0,1],
              [0,0,0,0,1,1,1,1,0],
              [0,0,0,0,0,0,0,0,0]])

list_of_points = [(0,2),(1,2),(2,3),(3,3),(4,3),(5,3),(6,4),(6,5),(6,6),(6,7),(5,8),(4,8),(3,7),(2,8),(1,8),(0,8)]

【问题讨论】:

  • 路径平缓弯曲怎么办?
  • @MattTimmermans 这是一个很好的问题 - 保留它,我只想要发生突然变化的那一点

标签: python algorithm raster


【解决方案1】:

U 形有 3 个方向:向下、向右和向上。您可以使用以下规则跟随线条和方向,其中 O 是当前位置,X 是可能的下一个像素:

  1. 向下
...
.0.
XXX
..X
.0X
..X
  1. 向上
XXX
.0.
...

并遵循下一个算法(伪代码)

while next move can be down:
    move down
// here ends down line

while next move can be right:
    move right
// here ends right line

while next move can be up:
    move up
// here ends up line

如果U形可以这样对角:

.......
...1...
....1..
1....1.
.1.11..
..1....

您可以为向下、向右和向上的含义定义不同的矩阵。 即

// down
...
.0X
.XX

// right
.XX
.0X
...

// up
XX.
X0.
...

【讨论】:

  • 谢谢,我使用了你的方法,它可以解决我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2021-02-21
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多