ndimage.label()给出“数据类型不受支持”错误

时间:2013-10-09 12:54:03

标签: python image-processing numpy scipy runtime-error

我正在尝试使用python和scipy进行一些非常简单的分割。我在这里尝试做的是标记和图像(一个numpy ndarray),然后计算一些补丁的大小,删除其中最大的补丁,然后再次标记。

然而,最后ndimage.label( fin )给了我一个错误

RunTimeError: data type not supported

知道可能导致错误的原因是什么?数组a和数组fin都是与int32相同的数据类型。此外,label函数应该将结构元素和输出默认为与未定义的相同类型。这真让我烦恼。

这是我正在运行的小测试代码:

import numpy as np
from scipy import ndimage

def main():

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

    labeled_array, numpatches = ndimage.label(a)

    sizes = ndimage.sum(a,labeled_array,range(1,numpatches+1))

    mp = np.where(sizes == sizes.max())[0]+1 

    max_index = np.zeros(numpatches + 1, np.uint8)
    max_index[mp] = 1
    max_feature = max_index[labeled_array]

    fin = max_feature^a

    lArr, npa = ndimage.label( fin )

    return

main()

1 个答案:

答案 0 :(得分:1)

从ali_m的评论中得到了这个想法。我想尝试强制将数组类型转换为np.int64,这似乎解决了问题。不知道为什么默认情况下阵列首先是np.int32。

a = np.array([  [1, 1, 1, 0, 0, 0],
            [1, 1, 1, 0, 0, 0],
            [1, 0, 0, 0, 1, 0],
            [0, 0, 0, 1, 1, 0],
            [0, 0, 0, 0, 1, 1],
            [1, 0, 0, 0, 1, 0]  ], np.int64)

无论如何将类型转换为np.int64似乎解决了这个问题。