重塑图像后如何保存图像(nii.gz)



我试图在重塑图像后重塑图像,但在保存方法方面遇到了问题。这是我试图运行的代码:

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图像,则此操作不起作用。

最新更新