【问题标题】:How to distinguish between multiple shapes in a figure or array?如何区分图形或数组中的多个形状?
【发布时间】:2015-02-23 09:46:05
【问题描述】:

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

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

【问题讨论】:

  • 对于每一个这样的问题:你试过什么?您是否有一些示例代码,您尝试过的内容不起作用。你有写在纸上的算法吗?
  • 基于这个问题,我不明白你试图完成什么或形状和数据结构是什么(二维数组是一个二进制位图,整体上是你所指的“形状”吗?) .请描述您尝试解决的问题,形状是什么,您在算法方面尝试了什么并给出代码示例
  • 如果您可以添加现有代码以阐明您要实现的目标以及问题所在,这将很有帮助。

标签: python scipy


【解决方案1】:

我怀疑您正在寻找label features,它可以在scipy.ndimage 中找到。尽管名称如此,但它不一定特定于图像分析。引用文档“输入中的任何非零值都算作特征,零值被视为背景。”

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

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)

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

【讨论】:

  • 谢谢!这正是我一直在寻找并完美工作的东西。欢呼
  • 太好了,乐于助人!如果答案解决了您的问题,请考虑将其标记为已接受(左上角的绿色勾号)。干杯。
猜你喜欢
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多