Nibabel 不加载斜率和内部参数

问题描述 投票:0回答:1

我正在使用

nibabel
包将一些 nparray 保存为 nifti 格式。我指定斜率和截距值,以便将数据缩放回原始格式。但是,当我加载回数据时,比例和截距信息不再可用。这是重现该行为的代码片段:

import numpy as np
import nibabel as nib

# Create dumb 3D data:
img=np.ones((20,20,5),dtype=np.uint16)

# Create an affine matrix:
affine=np.eye(4)

# Create nifti
nii=nib.Nifti1Image(img,affine=affine)

# Set slope and inter values
nii.header.set_slope_inter(slope=1,inter=0)

# Save the nifti on disk
nib.save(nii,'test.nii')

# Load back the data
nii2=nib.load('test.nii')

# Get the slope and inter
print(nii2.header.get_slope_inter())

# It returns (None, None)

输出为

(None,None)
,尽管
nii2.header.has_data_slope
nii2.header.has_data_intercept
都返回 True。

我用其他 nifti 阅读器(例如 mango 和 itk-snap)打开 nifti 文件,可以检查斜率和截距是否正确显示。

这是一个错误吗?

感谢您的帮助!

python python-3.x nifti nibabel
1个回答
0
投票

不,这不是一个错误。 Nibabel 的 docs 中记录了此行为。

首次创建/加载时,nifti1 对象(Nibabel 图像)具有比例斜率和截距,可通过以下方式访问:

import nibabel as nib

# load the image
im = nib.load("image.nii.gz")

# get scale slope/inter values
scale_slope = im.dataobj.slope
scale_intercept = im.dataobj.inter

# scale_slope and scale_intercept won't be None and None, but the following:
slope_inter = im.header.get_slope_inter()

# will probably print (None, None)
print("slope_inter: %r" % (slope_inter,))

要回答您的问题,在调用 set_slope_inter() 后,您设置的新值可在以下位置找到:

image.dataobj.slope
image.dataobj.inter

虽然有点晚了,但希望对大家有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.