3

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

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

data = example_img.get_data()

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

4

4 回答 4

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”打印出来/存储在文本文件中。

于 2017-07-24T20:28:57.277 回答
1

不,你可以有底片和 nan 。

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

data = example_img.get_fdata()

注意:使用get_fdataand notget_data来始终获取浮点 numpy 数组。

于 2019-06-18T11:23:16.393 回答
0

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

from nltools.data import Brain_Data
img = Brain_Data('myImage.nii')
data = img.data
于 2018-10-07T09:53:12.323 回答
0

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

于 2021-01-23T14:59:42.430 回答