首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中遍历3D NIFTI图像

如何在Python中遍历3D NIFTI图像
EN

Stack Overflow用户
提问于 2019-01-04 09:02:52
回答 3查看 2K关注 0票数 0

对于我正在做的一个项目,我想写一个脚本,可以计算nifti格式(.nii扩展)的核磁共振图像的总脑体积。我不知道怎么做的是循环遍历所有独立的体素,并提取其中的整数数据。有人知道怎么做吗?

这是我用来在Python中加载特定nifti图像的代码:

代码语言:javascript
复制
import nibabel as nib
import numpy as np
import os

path = '/Users/arnavlohe/Desktop/ADNI_002_S_0782_MR_MP-RAGE_REPEAT_br_raw_20060814234209235_1_S17836_I20520_be_be_mixeltype.nii'
img = nib.load(path)
print(img)

这是结果输出/图像数据:

代码语言:javascript
复制
<class 'nibabel.nifti1.Nifti1Image'>
data shape (166, 256, 256)
affine: 
[[  1.20000184   0.           0.         113.7559967 ]
 [  0.           0.9375       0.         158.26870728]
 [  0.           0.           0.9375     418.0289917 ]
 [  0.           0.           0.           1.        ]]
metadata:
<class 'nibabel.nifti1.Nifti1Header'> object, endian='<'
sizeof_hdr      : 348
data_type       : 
db_name         : 
extents         : 0
session_error   : 0
regular         : r
dim_info        : 0
dim             : [  3 166 256 256   1   1   1   1]
intent_p1       : 0.0
intent_p2       : 0.0
intent_p3       : 0.0
intent_code     : none
datatype        : int32
bitpix          : 32
slice_start     : 0
pixdim          : [1.        1.2000018 0.9375    0.9375    1.        0.        
0.
 0.       ]
... 

这是我能提供的所有信息,我很抱歉我的问题不是很具体。

EN

回答 3

Stack Overflow用户

发布于 2019-01-05 01:12:28

您可以组合get_fdata()以NumPy数组的形式检索图像数据:

代码语言:javascript
复制
img = nib.load(path)
data = img.get_fdata()

NumPy indexing来访问体素,例如:

代码语言:javascript
复制
data[1,1,1]

最后请注意,您可能会在Neurostars上提出这样的问题。

票数 1
EN

Stack Overflow用户

发布于 2020-05-06 05:07:11

不要循环遍历每个体素,这会非常慢(需要几分钟才能运行)。相反,使用能处理整个数组的numpy操作。我建议使用一个阈值:

代码语言:javascript
复制
img = nib.load(path)
voxel_volume = np.prod(img.header['pixdim'][1:4])
data = img.get_fdata()
threshold = 0
mask = np.where(data > threshold, 1, 0)
volume = voxel_volume*np.sum(mask)
print(volume/1000, "cm³")
票数 1
EN

Stack Overflow用户

发布于 2020-04-30 06:28:26

非常近似的计算:

代码语言:javascript
复制
img = nib.load(path)
voxel_volume = np.prod(img.header['pixdim'][1:4])
voxel_count = np.count_nonzero(img.get_fdata())
print(voxel_volume*voxel_count/1000, "cm³")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54031899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档