识别对象并标记为“内置方法全部...”

时间:2019-08-22 09:50:36

标签: python numpy tuples numpy-ndarray

基本上,我有一个numpy数组,我要在其中标记不同的对象,并且对于每个对象,要查找分配的最大(原始)值和质心。

我设法标记了数组,并尝试使用极值来查找最大值,但遇到了我不理解的错误。

import numpy as np
from scipy.ndimage import generate_binary_structure, label, find_objects, extrema

s = generate_binary_structure(2,2)
ft_object = np.asarray(label(ft2, structure = s)) #ft2 is originally a tuple which is why I perform np.asarray
print ft_object

因为这给了我一个元组,所以我再次转换为numpy.ndarray并执行极值函数以获取最大值。

ft_extrema = extrema(ft_object)

这会显示错误消息

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(). 

所以我将其更改为

ft_extrema = extrema(ft_object.all)

这可行,但是当我print ft_extrema期望得到一些结果时,我得到了以下回报:

(<built-in method all of numpy.ndarray object at 0x2b90d09ed0d0>, built-in method all of numpy.ndarray object at 0x2b90d09ed0d0>, [()], [()])

不太确定如何解决此问题或为什么这样做,因此不胜感激。

我也想使用find_objects分别拼接我的对象,以分别找到每个对象的center_of_mass,但我无法做到这一点。

1 个答案:

答案 0 :(得分:0)

请注意,文档label()返回一个元组,并且实际标签位于第一位,它们已经是nparray。 我没有您的ft2对象,但请以

为例
ft2 = np.array([[1,1,0,0,0], [0,0,0,0,0], [0,0,0,0,1]])

然后,我将以另一种方式编辑您的代码:

import numpy as np #same
from scipy.ndimage import generate_binary_structure, label, find_objects, extrema #same

s = generate_binary_structure(2,2)   #same
ft_object = label(ft2, structure = s)[0]   #here take only the first object, these are the labels
ft_extrema = extrema(ft2, ft_object)   #here you should give as an argument the input and the labels
print ft_extrema

输出为:

(1,1,(0,0),(0,0))

正如预期的那样,因为1是最大值和最小值