如何使用Nibabel从Nifti图像中获取图像强度矩阵?

时间:2017-07-14 11:57:38

标签: python nifti

我是NiBabel的新人。我想知道如何使用此库从Nifti图像中获取强度矩阵。我使用以下脚本来获取体素:

import nibabel as ni
example_img = ni.load('myImage.nii')

data = example_img.get_data()

我开始认为数据包含体素'强度,但是当我打印它时,我看到了负值,在图像中出现负强度似乎很奇怪,你想不想? 我需要得到体素'在nifti图像中的强度,是否可以使用nibabel?如果没有,你能提出另一个解决方案吗?感谢。

4 个答案:

答案 0 :(得分:2)

不确定你是如何得到负体素值的,但是这里有一种方法可以将NifTi图像显示为矩阵:

import nibabel as ni
img = ni.load('myImage.nii')

data = example_img.get_data()

mat = []

for i in range(img.shape[0]):
  plane = []
  for j in range(img.shape[1]):
    row = []
    for k in range(img.shape[2]):
        row.append(data[i][j][k])
    plane.append(row)
  mat.append(plane)

现在您可以在文本文件中打印/存储变量“mat”。

答案 1 :(得分:0)

另一种直接使用的方法是nltools :: Brain_Data函数,可将数据直接提取到一维数组中。虽然不是Nibabel,但与您的逻辑类似。

from nltools.data import Brain_Data
img = Brain_Data('myImage.nii')
data = img.data

答案 2 :(得分:0)

不。您可以使用负数和nan。

这些代表大脑外部的体素。 强度只是

的输出
data = example_img.get_fdata()

注意:使用get_fdata而不是get_data来始终获取浮点数numpy数组。

答案 3 :(得分:0)

除了 seralouk 在 earlier answer, 中所说的之外,由于我们正在处理 'nii' nifti 图像,体素值可能为负。例如,如果是 CT 扫描,则每个体素将值存储在 Hounsfield unit 中,在这种情况下,0 表示通过水的衰减,而通过空气的衰减为 -1000。