我有一些MRI扫描扩展文件.img/.hdr/.gif
。我是全新的。
我该如何使用它?我怎样才能看到那片' .img'阵列
我找到了
import nibabel as nib
img = nib.load('./OAS1_0001_MR1_mpr_n4_anon_111_t88_masked_gfc_fseg.img')
print(img)
显示
<class 'nibabel.spm2analyze.Spm2AnalyzeImage'>
data shape (176, 208, 176, 1)
affine:
[[ -1. 0. 0. 87.5]
[ 0. 1. 0. -103.5]
[ 0. 0. 1. -87.5]
[ 0. 0. 0. 1. ]]
metadata:
<class 'nibabel.spm2analyze.Spm2AnalyzeHeader'> object, endian='>'
sizeof_hdr : 348
data_type : b'\x00B\x00\x00YA\x00\x00\xe8@'
db_name : b'\x00\x00\x14@\x00\x00\x9d?\x00\x00\xbf>\x00\x005>'
extents : 16384
session_error : 0
regular : b'r'
hkey_un0 : b' '
dim : [ 4 176 208 176 1 0 0 0]
vox_units : b'mm'
cal_units : b'7\x00\x00\x006\x16'
unused1 : 0
datatype : uint8
bitpix : 8
dim_un0 : 0
pixdim : [ 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00
1.65311180e-41 1.60658869e-41 1.55614194e-41 1.50821754e-41]
vox_offset : 0.0
scl_slope : nan
scl_inter : 0.0
funused3 : 0.0
cal_max : 0.0
cal_min : 0.0
compressed : 0
verified : 0
glmax : 3
glmin : 0
descrip : b' '
aux_file : b' '
orient : b''
origin : [8224 8224 8224 8224 8192]
generated : b' '
scannum : b' '
patient_id : b' '
exp_date : b' '
exp_time : b' '
hist_un0 : b' '
views : 0
vols_added : 0
start_field : 0
field_skip : 0
omax : 0
omin : 0
smax : 0
smin : 0
但是我无法获得MRI扫描片。我该怎么画呢?我假设img.get_data()
应该帮助我......
答案 0 :(得分:1)
对于绘图,您可以使用
from nilearn import plotting
plotting.plot_anat(img, title="plot_anat")
要提取正确的数据,可以使用 img.get_data()
答案 1 :(得分:1)
从数据的形状(data shape (176, 208, 176, 1)
来看,它是3D图像,因此您需要指定要以2D绘制的平面。共有三个选项:
您可以在Wikipedia中找到有关解剖平面的更多详细信息以及非常有用的图表。
因此,对于数据,按照说明阅读后,您可以通过调用来获取普通数组
im_data = img.get_fdata()
(我收到get_data()
的折旧警告)
数据数组将具有相同的形状,因此,如果您想沿着一个平面绘制中心切片,只需编写:
import matplotlib.pyplot as plt
center_slice = im_data[:,:,88, 0]
fig, ax = plt.subplots(1,1)
ax.imshow(center_slice, cmap="gray")
plt.show()
请注意,图像不一定正确放置(旋转,轴等)。有时足以将其旋转90度或使用scipy.ndimage.shift()
进行手动移位。 nilearn plotting
源代码提供了对默认MPL轴的完整转换和修改列表,因此值得一看。