Python读取.nii文件

MRI影像处理用。

1 什么是.nii文件

.nii 文件是 Neuroimaging Informatics Technology Initiative (NIfTI) 格式的文件,是一种用于存储医学影像数据的文件格式,特别常用于功能性磁共振成像 (fMRI)、结构性 MRI、DTI(扩散张量成像)等领域。

NIfTI 文件可以存储三维或四维的医学图像数据,并且还包含有关这些图像的元数据信息,如图像的尺寸、分辨率、坐标系等。这种格式广泛应用于神经科学和医学图像处理领域,主要用于分析和处理脑部扫描数据。

.nii 文件有两种形式:

  1. 单文件格式 (.nii): 图像数据和元数据都存储在一个文件中。
  2. 双文件格式 (.hdr/.img): 图像数据和元数据分别存储在两个文件中,.hdr 文件包含头部信息,.img 文件包含图像数据。

2 Python 读取.nii 文件

需要在Jupyter notebook中运行。3D 图可以交互查看不同层的效果

2.1 准备环境

在conda环境下

1
conda install nibabel numpy matplotlib ipywidgets
  • nibabel: 用于处理医学成像文件(如 NIfTI)的库。
  • numpy: 提供高效数组操作和数学计算的基础库。
  • matplotlib: 用于创建静态、动态和交互式图形的绘图库。
  • ipywidgets: 在 Jupyter 笔记本中创建交互式控件的库。

2.2 代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import nibabel as nib
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, IntSlider, Layout

def load_and_visualize_nifti(filename: str):
# Load the NIfTI file
nifti_img = nib.load(filename)
data = nifti_img.get_fdata()
# Remove the singleton dimension if it exists
data = np.squeeze(data)
# Check data dimensions
if data.ndim == 3:
# Function to display a slice of the 3D data
def display_slice(slice_index):
plt.figure(figsize=(8, 8))
plt.imshow(data[:, :, slice_index], cmap='gray')
plt.title(f'Slice {slice_index}')
plt.axis('off')
plt.show()

# Create an interactive widget
interact(display_slice, slice_index=IntSlider(
min=0,
max=data.shape[2]-1,
step=1,
value=data.shape[2]//2,
layout=Layout(width='80%')
))
elif data.ndim == 2:
# If the data is already 2D, just display it
plt.figure(figsize=(8, 8))
plt.imshow(data, cmap='gray')
plt.title('2D Image')
plt.axis('off')
plt.show()

else:
print("Unsupported data dimension")

# Example usage
load_and_visualize_nifti(img_path)

2.3 实现效果

作者

Zhou

发布于

2024-08-13

更新于

2024-08-13

许可协议

评论

+ + +