1

当我在 scikit-image 包中使用打开操作时出现内存错误(它使我的 RAM 饱和)。对于半径为 16 或更大的球体/球的 3-D 结构元素会发生此内存错误。我正在尝试使用粒度测量来测量图像(3D 数组)中对象的大小分布,因此我需要增加半径的结构化元素。内存需求也呈指数增长,我找不到解决办法。这个问题是否有一个简单的解决方案,以便我可以使用更大半径的结构元素?图像尺寸为 200X200X200。TIA

Traceback (most recent call last):
  File "R3.py", line 124, in <module>
    output_image = skimage.morphology.binary_opening(image, ball)
  File "/usr/lib/python2.7/dist-packages/skimage/morphology/binary.py", line 117, in binary_opening
    eroded = binary_erosion(image, selem)
  File "/usr/lib/python2.7/dist-packages/skimage/morphology/binary.py", line 41, in binary_erosion
    ndimage.convolve(binary, selem, mode='constant', cval=1, output=conv)
  File "/usr/lib/python2.7/dist-packages/scipy/ndimage/filters.py", line 696, in convolve
    origin, True)
  File "/usr/lib/python2.7/dist-packages/scipy/ndimage/filters.py", line 544, in _correlate_or_convolve
    _nd_image.correlate(input, weights, output, mode, cval, origins)
MemoryError
4

1 回答 1

0

尺寸为 200x200x200 的体积非常小。粒度测量是由连续的开口组成的,因此您只需要再增加 2 个体积来进行计算:一个介于腐蚀和膨胀之间的临时体积,以及一个用于最终结果的体积。这意味着总共三卷。结构元素应该是一个坐标列表,所以不要太大。

因此,绝对没有理由不能在您的计算机上对这种尺寸的体积进行粒度测量。指数内存使用的唯一解释是中间结果不会被擦除。

于 2017-07-06T22:31:15.443 回答