Ошибка памяти при использовании операции Binary Opening в пакете Sci-Kit Image для гранулометрии

Я получаю сообщение об ошибке памяти, когда использую операцию открытия в пакете scikit-image (она переполняет мою оперативную память). Эта ошибка памяти возникает для элемента трехмерной структуры, который представляет собой сферу/шар радиусом 16 или больше. Я пытаюсь использовать гранулометрию для измерения распределения размеров объектов на изображении (3D-массив), поэтому мне нужно структурировать элементы увеличивающегося радиуса. Требования к памяти также увеличиваются в геометрической прогрессии, и я не могу найти способ обойти это. Есть ли простое решение этой проблемы, чтобы я мог использовать структурные элементы еще большего радиуса? Размер изображения 200х200х200. ТИА

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

person sea_carpet    schedule 01.06.2017    source источник


Ответы (1)


Объем размером 200x200x200 довольно мал. Гранулометрия состоит из последовательных открытий, поэтому для расчета вам понадобятся еще 2 объема: один временный между эрозией и расширением и еще один для окончательных результатов. То есть всего три тома. А структурирующим элементом должен быть список координат, так что ничего лишнего.

Следовательно, нет абсолютно никаких причин, по которым вы не можете выполнить гранулометрию на своем компьютере для объема таких размеров. Единственным объяснением экспоненциального использования памяти может быть то, что промежуточные результаты не стираются.

person FiReTiTi    schedule 06.07.2017