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]
它按预期工作,您真傻