Python 如何最好地应用`skimage.util.apply_parallel`删除大型数据集中的小对象?

Python 如何最好地应用`skimage.util.apply_parallel`删除大型数据集中的小对象?,python,scipy,scikit-image,Python,Scipy,Scikit Image,作为一个例子,我想实现一个裁剪功能,从周围环境中提取每颗牙齿。 为此,我使用了scipy.ndimage.find_对象(阈值化的_数据)[0]并遵循中概述的内容 为了从完整数据集中可靠地提取牙齿,我需要在使用find\u object提取牙齿之前,从阈值数据中删除小对象。 我是通过努力做到这一点的 def裁剪器(图像,阈值=66): 阈值=图像>阈值 despeckled=撇除。形态学。移除小对象(阈值化,最小大小=500) cropdimensions=scipy.ndimage.find_

作为一个例子,我想实现一个裁剪功能,从周围环境中提取每颗牙齿。 为此,我使用了
scipy.ndimage.find_对象(阈值化的_数据)[0]
并遵循中概述的内容

为了从完整数据集中可靠地提取牙齿,我需要在使用
find\u object
提取牙齿之前,从阈值数据中删除小对象。 我是通过努力做到这一点的

def裁剪器(图像,阈值=66): 阈值=图像>阈值 despeckled=撇除。形态学。移除小对象(阈值化,最小大小=500) cropdimensions=scipy.ndimage.find_对象(去斑)[0] 返回(图像[cropdimensions]) 我的数据集非常大(每个数据集的大小约为4000 x 1632 x 1632体素),我正在使用
dask
在磁盘上存储完整数据集的表示。 因此,为了使上述功能正常工作,我必须在开始时故意使用
.compute()
,将完整的数据集加载到RAM中。 我想我应该能够应用
skimage.util.apply_parallel
函数来加快我的处理速度(并使它能够在内存不足196 GB的机器上运行,幸运的是,我拥有这台机器)

如果我正确地阅读了文档,似乎我可以“简单地”扩展我的函数并使用下面的代码

def裁剪器(图像,阈值=66): 阈值=图像>阈值 despeckled=skimage.util.apply_parallel(skimage.形态学.remove_小对象, 阈值, 额外_关键字={'min_size':500}) cropdimensions=skimage.util.apply_parallel(scipy.ndimage.find_对象, 阈值化) cropdimensions=cropdimensions[0] 返回(图像[cropdimensions]) 但是我得到了一个
属性错误
“list”对象没有属性“dtype”
。 如果我移除
find_objects
,我就可以像这样取出去除斑点的图像

def裁剪器(图像,阈值=66): 阈值=图像>阈值 despeckled=skimage.util.apply_parallel(skimage.形态学.remove_小对象, 阈值, 额外_关键字={'min_size':500}) 返回(去斑)
在一段时间的调试后,我不能在同一个函数中使用两个连续的
应用\u parallel
s吗?

;显然,您不能,因为您没有使用
skimage
查找对象! 如果您将相关行更改为
cropdimensions=scipy.ndimage.find_objects(despeckled)[0]
它按预期工作,您真傻