scipy.ndimage.label的特征如何指定周期连接?
How to specify a periodic connection for features of scipy.ndimage.label?
给定一个由 0 和 1 组成的 N*N 数组,我想构建集群列表(集群是一组标有 1 的连接点)。
scipy.ndimage.label
非常有用,因为它告诉你哪些点是相连的。
但我还想在我的阵列上设置周期性边界条件,即识别点 (0,j)
和 (N,j)
(就像我粘合成圆柱体的平面)。所以我需要告诉 scipy.ndimage.label 特征是通过边界连接的。
比如我原来的数组是:
In[187]: a = [[1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 0, 1, 0, 0, 1, 1],[1, 1, 0, 0, 0, 1, 1, 1]]
labels = measurements.label(a)
print(labels)
Out [187]: (array([[1, 1, 0, 0, 0, 0, 2, 2],
[1, 1, 0, 3, 0, 0, 2, 2],
[1, 1, 0, 0, 0, 2, 2, 2]], dtype=int32), 3)
我想:
(array([[1, 1, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 3, 0, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 1, 1]], dtype=int32), 2)
标签的结构参数允许指定连接(例如即使它们对角线接触也连接的特征),它也可以用于此目的吗?
这里是一个在左右边界上施加周期性边界条件的例子。右侧的每个标签都用左侧的相应标签标识(如果存在)。
for y in range(label_image.shape[0]):
if label_image[y, 0] > 0 and label_image[y, -1] > 0:
label_image[label_image == label_image[y, -1]] = label_image[y, 0]
你可以对上下边界做类似的事情。您还可以提出任何其他边界条件,迭代 for
循环中的边界像素并以类似方式检查 if
语句中的条件。
给定一个由 0 和 1 组成的 N*N 数组,我想构建集群列表(集群是一组标有 1 的连接点)。
scipy.ndimage.label
非常有用,因为它告诉你哪些点是相连的。
但我还想在我的阵列上设置周期性边界条件,即识别点 (0,j)
和 (N,j)
(就像我粘合成圆柱体的平面)。所以我需要告诉 scipy.ndimage.label 特征是通过边界连接的。
比如我原来的数组是:
In[187]: a = [[1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 0, 1, 0, 0, 1, 1],[1, 1, 0, 0, 0, 1, 1, 1]]
labels = measurements.label(a)
print(labels)
Out [187]: (array([[1, 1, 0, 0, 0, 0, 2, 2],
[1, 1, 0, 3, 0, 0, 2, 2],
[1, 1, 0, 0, 0, 2, 2, 2]], dtype=int32), 3)
我想:
(array([[1, 1, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 3, 0, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 1, 1]], dtype=int32), 2)
标签的结构参数允许指定连接(例如即使它们对角线接触也连接的特征),它也可以用于此目的吗?
这里是一个在左右边界上施加周期性边界条件的例子。右侧的每个标签都用左侧的相应标签标识(如果存在)。
for y in range(label_image.shape[0]):
if label_image[y, 0] > 0 and label_image[y, -1] > 0:
label_image[label_image == label_image[y, -1]] = label_image[y, 0]
你可以对上下边界做类似的事情。您还可以提出任何其他边界条件,迭代 for
循环中的边界像素并以类似方式检查 if
语句中的条件。