Почему происходит сбой SimpleITK во время выполнения ResampleImageFilter?

#python-3.x #ubuntu-18.04 #simpleitk

#python-3.x #ubuntu-18.04 #simpleitk

Вопрос:

В Ubuntu 18.04 LTS я пытаюсь изменить расстояние между вокселями в 3D-изображении, как в этом примере . Изображение довольно большое, имеет около 500x500x300 вокселов и использует около 100 МБ. При resampler.Execute() достижении строки оболочка прекращает выполнение скрипта python3. Я думаю, это из-за нехватки памяти, но какой памяти? Жесткий диск? Оперативная память? Кто-нибудь знает, почему это может произойти, и есть ли какое-либо обходное решение?

Ответ №1:

У вас заканчивается оперативная память. Ваш объем составляет 75 миллионов вокселов, но в этом примере кода повторной выборки используются 32-разрядные числа с плавающей запятой. Итак, это 300 мегабайт памяти. И затем есть память выходного тома. Итак, кто знает, сколько памяти вам нужно в общей сложности.

Попробуйте установить тип выходного пикселя на что-то меньшее, например, знак short или unsigned char .

Комментарии:

1. Я изменил тип выходного пикселя на uint8, но он все равно выходит из строя. Как я могу получить использованную память изображения sitk? Когда я преобразую его в numpy с image = numpy.uint8(image) помощью и получаю память, используемую в байтах, image.nbytes он возвращает 49283072 байта, что меньше 50 МБ… Мне это не кажется слишком большим…

2. Вы можете определить размер памяти изображения с помощью следующих методов: GetNumberOfPixels, GetNumberOfComponentsPerPixel и GetSizeOfPixelComponent . Умножьте результаты этих 3 вместе, чтобы получить количество байтов.