如何区分图形或数组中的多个形状?

How to distinguish between multiple shapes in a figure or array?

我在 Python 中有一个二维数组,其中包含值 0 或 1,排列成各种形状。对于我当前的项目,我需要一种方法来区分图像中的形状。

我目前正在尝试通过将第一个形状的值设置为 1,将第二个形状的值设置为 2 等等来实现这一点。然而,事实证明这对我来说太难编码了,所以我想知道是否有人知道一个好的算法来做到这一点,或者知道另一种方法。谢谢。

我怀疑您正在寻找 scipy.ndimage 中可用的 label features。尽管有这个名字,但它不一定特定于图像分析。引用文档 "Any non-zero values in input are counted as features and zero values are considered the background."

结果将是一个数组,大小相同,特征已编号。例如下面的代码:

import numpy as np
from scipy.ndimage import measurements

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

labeled_array, number_of_features = measurements.label(arr)
print(labeled_array)

...将产生以下输出,其中两个特征分别编号为 1 和 2:

array([[0, 0, 0, 0, 0, 0],
       [0, 1, 1, 0, 0, 0],
       [0, 1, 1, 0, 0, 2],
       [0, 0, 0, 0, 2, 2],
       [0, 0, 0, 0, 2, 2]], dtype=int32)

第二个return参数包含数组中的number_of_features(这里是2)。