为什么 Nibabel 会更改我的文件的大小?
Why does Nibabel change the size of my file?
我正在处理 nii.gz 格式的图像。因此,我使用 nibabel 来打开它们。问题是当我打开图像,将它们转换为 numpy 数组并将它们转换回 Nifti 格式时,输出大小发生了变化。顺序是:
nifti_image = nib.load('/my_path_to_image/image.nii.gz')
np_img = ct_images.get_fdata()
nifti_final = nib.Nifti1Image(data, affine=np.eye(4)) # Convert them to nifti
nib.save(nifti_final , 'image.nii.gz')
初始文件是~45 MB
,在运行上面的代码之后,图像是~65 MB
。我知道原始图像是 16 位编码的。我最初的理论是,当转换为 numpy 数组时,它们被编码为 64-bit
,事实确实如此。所以我尝试了以下方法:
nifti_image = nib.load('/my_path_to_image/image.nii.gz')
np_img = ct_images.get_fdata()
np_img = np_img.astype(numpy.float16, copy=False)
nifti_final = nib.Nifti1Image(data, affine=np.eye(4)) # Convert them to nifti
nib.save(nifti_final , 'image.nii.gz')
但是,输出的大小仍然相同 ~65MB
。知道为什么会这样吗?
您应该将原始 nifti 仿射和 header 信息添加到输出 nifti。例如,在您的情况下:
nifti_final = nib.Nifti1Image(data, nifti_image.affine, nifti_image.header)
我正在处理 nii.gz 格式的图像。因此,我使用 nibabel 来打开它们。问题是当我打开图像,将它们转换为 numpy 数组并将它们转换回 Nifti 格式时,输出大小发生了变化。顺序是:
nifti_image = nib.load('/my_path_to_image/image.nii.gz')
np_img = ct_images.get_fdata()
nifti_final = nib.Nifti1Image(data, affine=np.eye(4)) # Convert them to nifti
nib.save(nifti_final , 'image.nii.gz')
初始文件是~45 MB
,在运行上面的代码之后,图像是~65 MB
。我知道原始图像是 16 位编码的。我最初的理论是,当转换为 numpy 数组时,它们被编码为 64-bit
,事实确实如此。所以我尝试了以下方法:
nifti_image = nib.load('/my_path_to_image/image.nii.gz')
np_img = ct_images.get_fdata()
np_img = np_img.astype(numpy.float16, copy=False)
nifti_final = nib.Nifti1Image(data, affine=np.eye(4)) # Convert them to nifti
nib.save(nifti_final , 'image.nii.gz')
但是,输出的大小仍然相同 ~65MB
。知道为什么会这样吗?
您应该将原始 nifti 仿射和 header 信息添加到输出 nifti。例如,在您的情况下:
nifti_final = nib.Nifti1Image(data, nifti_image.affine, nifti_image.header)