Python:TypeError:scikit-image regionprops仅支持2-D和3-D图像

时间:2016-07-27 09:54:54

标签: python numpy image-processing 2d scikit-image

给出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]])

2 个答案:

答案 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

一切正常:)