MemoryError:无法为DIPY图像注册中形状344、344、127和数据类型为float64的数组分配115. MiB

问题描述

我正在尝试使用DIPY进行图像配准(3d中的仿射配准) 我尝试运行以下代码(实际上,我尝试使用其他nifti文件重现example code

from os.path import join as pjoin
import numpy as np
from dipy.viz import regtools
from dipy.data import fetch_mni_template,read_mni_template
from dipy.data.fetcher import fetch_syn_data,read_syn_data
from dipy.io.image import load_nifti
from dipy.align.imaffine import (transform_centers_of_mass,AffineMap,MutualinformationMetric,AffineRegistration)
from dipy.align.transforms import (TranslationTransform3D,RigidTransform3D,AffineTransform3D)

files,folder = fetch_mni_template()
static_data,static_affine = load_nifti(pjoin(folder,'mni_icbm152_t1_tal_nlin_asym_09a.nii'))
static = np.squeeze(static_data)
static_grid2world = static_affine

files,folder = fetch_syn_data()
moving_data,moving_affine = load_nifti(pjoin(folder,'2018.nii'))
moving = moving_data
moving_grid2world = moving_affine

identity = np.eye(4)
affine_map = AffineMap(identity,static.shape,static_grid2world,moving.shape,moving_grid2world)
print(static.shape)


resampled = affine_map.transform(moving)


regtools.overlay_slices(static,resampled,None,"Static","Moving","resampled_0.png")
regtools.overlay_slices(static,1,"resampled_1.png")
regtools.overlay_slices(static,2,"resampled_2.png")

c_of_mass = transform_centers_of_mass(static,moving,moving_grid2world)

transformed = c_of_mass.transform(moving)
regtools.overlay_slices(static,transformed,"Transformed","transformed_com_0.png")
regtools.overlay_slices(static,"transformed_com_1.png")
regtools.overlay_slices(static,"transformed_com_2.png")

nbins = 32
sampling_prop = None
metric = MutualinformationMetric(nbins,sampling_prop)

level_iters = [10000,1000,100]

sigmas = [3.0,1.0,0.0]

factors = [4,1]

affreg = AffineRegistration(metric=metric,level_iters=level_iters,sigmas=sigmas,factors=factors)

transform = TranslationTransform3D()
params0 = None
starting_affine = c_of_mass.affine

translation = affreg.optimize(static,transform,params0,moving_grid2world,starting_affine=starting_affine)

但我收到以下错误

MemoryError:无法为形状为(344、344、127)和数据类型为float64的数组分配115. MiB

我找不到解决方案。

解决方法

我通过将python的32位版本升级到64位版本来解决了这个问题

谢谢, 玛尼

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...