1

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

但是最后一个ndimage.label( fin )给了我一个错误

RunTimeError: data type not supported

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

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

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()
4

1 回答 1

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 似乎可以解决问题。

于 2013-10-09T13:35:46.200 回答