给出numpy.ndarray
种类
myarray=
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1])
我想在数组(已经标记)上使用scikit-image
来派生一些属性。
这就是我的所作所为:
myarray.reshape((11,11))
labelled=label(myarray)
props=sk.measure.regionprops(labelled)
但后来我收到了这个错误:
TypeError: Only 2-D and 3-D images supported.
,指向props
。 有什么问题?我传递给props
的图片已经是2D对象了。
myarray
的形状:
In [17]: myarray
Out[17]:
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
答案 0 :(得分:3)
我尝试了这段代码而且没有错误:
import numpy as np
from skimage.measure import label, regionprops
myarray = np.random.randint(1, 4, (11,11), dtype=np.int64)
labelled = label(myarray)
props = regionprops(labelled)
示例输出:
In [714]: myarray
Out[714]:
array([[1, 2, 1, 1, 3, 3, 1, 1, 3, 3, 3],
[1, 1, 3, 1, 3, 2, 2, 2, 3, 3, 2],
[3, 3, 3, 1, 3, 3, 1, 1, 2, 3, 1],
[1, 3, 1, 1, 1, 2, 1, 3, 1, 3, 3],
[3, 2, 3, 3, 1, 1, 2, 1, 3, 2, 3],
[3, 2, 1, 3, 1, 1, 3, 1, 1, 2, 2],
[1, 3, 1, 1, 1, 1, 3, 3, 1, 2, 2],
[3, 3, 1, 1, 3, 2, 1, 2, 2, 2, 1],
[1, 1, 1, 3, 3, 2, 2, 3, 3, 3, 1],
[1, 2, 2, 2, 2, 2, 1, 3, 3, 2, 2],
[3, 2, 2, 3, 1, 3, 3, 1, 3, 3, 2]], dtype=int64)
In [715]: labelled
Out[715]:
array([[ 0, 1, 0, 0, 2, 2, 3, 3, 4, 4, 4],
[ 0, 0, 5, 0, 2, 6, 6, 6, 4, 4, 7],
[ 5, 5, 5, 0, 2, 2, 0, 0, 6, 4, 8],
[ 9, 5, 0, 0, 0, 10, 0, 4, 0, 4, 4],
[ 5, 11, 5, 5, 0, 0, 10, 0, 4, 12, 4],
[ 5, 11, 0, 5, 0, 0, 13, 0, 0, 12, 12],
[14, 5, 0, 0, 0, 0, 13, 13, 0, 12, 12],
[ 5, 5, 0, 0, 15, 12, 0, 12, 12, 12, 16],
[ 0, 0, 0, 15, 15, 12, 12, 17, 17, 17, 16],
[ 0, 12, 12, 12, 12, 12, 18, 17, 17, 19, 19],
[20, 12, 12, 21, 22, 17, 17, 18, 17, 17, 19]], dtype=int64)
In [716]: props[0].area
Out[716]: 1.0
In [717]: props[1].centroid
Out[717]: (1.0, 4.4000000000000004)
我注意到当myarray
的所有元素具有相同的值时(如示例所示),labelled
是一个零数组。我还在regionprops
文档中读到了这个:
参数: label_image :( N,M)ndarray
标记的输入图像。值为0的标签将被忽略。
也许您应该使用具有多个不同值的myarray
来获得有意义的属性...
答案 1 :(得分:1)
我遇到了同样的问题,然后在检查了Tonechas的答案后,我意识到我是从scipy而不是skimage导入标签。
from scipy.ndimage.measurements import label
我刚将其替换为
from skimage.measure import label, regionprops
一切正常:)