问题描述
要在Windows 7 64位(具有16Gb RAM和...)上运行我正在使用PyCharm最新版本的代码,
Python version: 3.7.7 (default,May 6 2020,11:45:54) [MSC v.1916 64 bit (AMD64)]
我正在尝试使用BraTS 2019 dataset中的SimplyITK和Numpy加载很多NIFTI图像。
这是我用来将图像加载到numpy数组中的代码。
import SimpleITK as sitk
def read_nifti_images(images_full_path):
"""
Read nifti files from a gziped file.
Read nifti files from a gziped file using SimpleITK library.
Parameters:
images_full_path (string): Full path to gziped file including file name.
Returns:
SimpleITK.SimpleITK.Image,numpy array: images read as image,images read as numpy array
"""
# Reads images using SimpleITK.
images = sitk.ReadImage(images_full_path)
# Get a numpy array from a SimpleITK Image.
images_array = sitk.GetArrayFromImage(images)
# More info about SimpleITK images: http://simpleitk.github.io/SimpleITK-Notebooks/01_Image_Basics.html
return images,images_array
此代码适用于最小的数据集。我正在尝试加载518个nii.gz文件,每个文件包含155张图像。
当我运行代码时,使用了4GiB的RAM,而当达到8GiB时,它将引发异常。
是否可以将所有图像加载到内存中? Windows和/或PyCharm中可能存在内存使用限制。
解决方法
您在内存中有两个图像副本,一个SimpleITK版本和一个numpy版本。因此,当您击中8 gig图像时,您确实有16 gig的内存,因此崩溃了。
您可以尝试使用sitk.GetArrayViewFromImage。从SimpleITK转换为numpy时,并不会生成图像的全新副本。它创建一个numpy数据结构,该结构指向与SimpleITK图像相同的像素缓冲区。