假设我有一个这样的数组:
import numpy as np
arr = np.array([
[1, 1, 3, 3, 1],
[1, 3, 3, 1, 1],
[4, 4, 3, 1, 1],
[4, 4, 1, 1, 1]
])
有 4 个不同的区域:左上 1s、3s、4s 和右 1s。
我将如何获得每个区域边界的路径?区域顶点的坐标,按顺序排列。
例如,对于左上角的 1,它是(0, 0), (0, 2), (1, 2), (1, 1), (2, 1), (2, 0)
(我最终想得到类似的东西start at 0, 0. Right 2. Down 1. Right -1. Down 1. Right -1. Down -2.
,但它很容易转换,因为它只是相邻顶点之间的差异)
我可以将其拆分为以下区域scipy.ndimage.label
:
from scipy.ndimage import label
regions = {}
# region_value is the number in the region
for region_value in np.unique(arr):
labeled, n_regions = label(arr == region_value)
regions[region_value] = [labeled == i for i in range(1, n_regions + 1)]
看起来更像这样:
{1: [
array([
[ True, True, False, False, False],
[ True, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False]
], dtype=bool), # Top left 1s region
array([
[False, False, False, False, True],
[False, False, False, True, True],
[False, False, False, True, True],
[False, False, True, True, True]
], dtype=bool) # Right 1s region
],
3: [
array([
[False, False, True, True, False],
[False, True, True, False, False],
[False, False, True, False, False],
[False, False, False, False, False]
], dtype=bool) # 3s region
],
4: [
array([
[False, False, False, False, False],
[False, False, False, False, False],
[ True, True, False, False, False],
[ True, True, False, False, False]
], dtype=bool) # 4s region
]
}
那么我如何将其转换为路径?