python - 查找栅格方向变化的算法

标签 python algorithm raster

我有一个包含 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)]

最佳答案

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.
...

关于python - 查找栅格方向变化的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57606864/

相关文章:

python - 从源代码构建 Tensorflow 时出现非法指令错误

c# - .NET BCL API 或框架方法的时间复杂度

algorithm - 这是什么贪婪或动态编程方法?

c# - 从多个列表创建组合列表

javascript - 无法使用传单上的图像叠加插件查看光栅图像(多波段卫星图像)

r - 更改 R 中栅格层的范围和分辨率以成功堆叠

python - 在 Mountain Lion 服务器上查看文件源时出现 Gitlab 500 错误

python - 如何根据列条目从 Pandas 数据框中删除随机行?

python - ttk 组合框以编程方式动态设置背景颜色

java - 如何在java中访问R(光栅对象)