问题描述
我正在尝试使用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位版本来解决了这个问题
谢谢, 玛尼