我试图在重塑图像后重塑图像,但在保存方法方面遇到了问题。这是我试图运行的代码:
import nibabel as nib
import numpy as np
from nibabel.testing import data_path
import os
example_filename = os.path.join("D:/Volumes convertidos LIDC",
'teste001converted.nii.gz')
img = nib.load('teste001converted.nii.gz')
print (img.shape)
newimg = img.get_fdata().reshape(332,360*360)
print (newimg.shape)
final_img = nib.Nifti1Image(newimg, img.affine)
nib.save(final_img, os.path.join("D:/Volumes convertidos LIDC",
'test2d.nii.gz'))
我得到了一个错误:
(最近一次通话(:
文件";d: \Volumes convertidos LIDC\resume.py";,第17行,infinal_img=笔尖。Nifti1Image(newimg,img.affine(
文件";C: \Python39\lib\site-packages\nibabel\nifti1.py";,第1756行,在initsuper(Nifti1Pair,self(中init(dataobj,
文件";C: \Python39\lib\site-packages\nibabel\analyze.py";,initsuper(AnalyzeImage,self(中的第918行初始化(文件";C: \Python39\lib\site-packages\nibabel\spacealimages.py";,第469行,在initself.update_header((中
文件";C: \Python39\lib\site-packages\nibabel\nifti1.py";,第2032行,在update_header中super(Nifti1Image,self(.update_header((文件";C: \Python39\lib\site-packages\nibabel\nifti1.py";,第1795行,在update_header中super(Nifti1Pair,self(.update_header((
文件";C: \Python39\lib\site-packages\nibabel\spacealimages.py";,第496行,在update_header中hdr.set_data_shape(形状(
文件";C: \Python39\lib\site-packages\nibabel\nifti1.py";,第880行,set_data_shapesuper(Nifti1Header,self(.set_data_shape(shape(
文件";C: \Python39\lib\site-packages\nibabel\analyze.py";,第633行,在set_data_shape 中
raise HeaderDataError(f'shape {shape} does not fit in dim datatype')
nibabel.spacealimages.HeaderDataError:shape(332129600(不适合dim数据类型
有什么办法解决吗?
您正在尝试保存numpy
数组,而nib.save
需要一个SpatialImage
对象。
您应该将numpy
数组转换为SpatialImage
:
final_img = nib.Nifti1Image(newimg, img.affine)
之后您可以保存图像:
nib.save(final_img, os.path.join("D:/Volumes convertidos LIDC", 'test4d.nii.gz'))
有关更多解释,请参阅文档和此答案。
编辑:如果newimg
是2D图像,则此操作不起作用。