读取nii.gz格式的医学图像和标签

该博客介绍了如何在PyCharm中使用nibabel库读取和展示nii.gz格式的医学图像,包括图像的维度、值范围、可视化以及切片展示。同时,还展示了如何加载和分析标签数据,包括标签中的不同值及其数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接在Pycharm中CV
安装相应的包可对具体内容取消注释进行展示

import numpy as np  # 转换格式
import nibabel as nib   # 读取数据
import matplotlib.pyplot as plt # 单张图像展示
from nibabel.viewers import OrthoSlicer3D   # nii.gz展示
import matplotlib
matplotlib.use('TkAgg') # 用于滚动查看nii.gz

# 使用 nibabel库读取图像
image_path = r"G:\Task66_K\imagesTr\9006723.nii.gz"
image_obj = nib.load(image_path)
print(f'文件路径: {image_path}')
print(f'图像类型: {type(image_obj)}')

# 提取numpy数组
image_data = image_obj.get_fdata()
# print(type(image_data))

# 查看图像大小
depth, height, width = image_data.shape
print(f"The image object height: {height}, width:{width}, depth:{depth}")

# 查看图像值范围
print(f'image value range: [{image_data.min()}, {image_data.max()}]')

# 可视化图像
OrthoSlicer3D(image_obj.dataobj).show()

# 查看图像成像信息
print(image_obj.header.keys())

# 图像分辨率信息
pixdim =  image_obj.header['pixdim']
print(f'z轴分辨率: {pixdim[3]}')
print(f'in plane 分辨率: {pixdim[1]} * {pixdim[2]}')

# 依据层厚信息,以及矩阵大小,就可以求出实际的扫描范围。
z_range = pixdim[3] * depth
x_range = pixdim[1] * height
y_range = pixdim[2] * width
print(f'扫描范围:', x_range, y_range, z_range)

# 查看指定层slice图像
maxval = 140
i = np.random.randint(0, maxval)
# Define a channel to look at
print(f"Plotting z Layer {i} of Image")
plt.imshow(image_data[:, :, i], cmap='gray')
plt.axis('off'); # 关闭网格
plt.show()


# 读取标签数据
label_path = "G:\Task66_K\labelsTr\9006723.nii.gz"
label_obj = nib.load(label_path)
label_array = label_obj.get_fdata()
print(f'label_path: {label_path}')
# 查看label里面有几种值
print(f'标签中有几种值: {np.unique(label_array)}')

# 查看每个标签对应多少像素
print(f'每个标签像素数量:',np.unique(label_array, return_counts=True))


参考内容:

https://blog.csdn.net/u014264373/article/details/119545255?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-13.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-13.highlightwordscore

Python中可以使用一些专门处理医疗影像数据的库,如`nibabel``pydicom`,来进行`.nii.gz`到DICOM格式的转换。以下是一个简单的步骤: 1. 首先,你需要安装必要的库,通过pip安装: ``` pip install nibabel pydicom ``` 2. 使用`nibabel`读取`.nii.gz`文件: ```python import nibabel as nib img_nifti = nib.load('path_to_your_nii.gz') nifti_data = img_nifti.get_fdata() ``` 3. 然后创建一个`pydicom.Dataset`对象,用于存储DICOM元数据: ```python from pydicom.dataset import Dataset dicom_dataset = Dataset() dicom_dataset.file_meta = Dataset() # DICOM header dicom_dataset.is_little_endian = True # 根据需要设置字节顺序 dicom_dataset.is_implicit_VR = False # 设置VR显式 ``` 4. 定义像素数组并设置相应的属性(例如患者信息、图像尺寸等): ```python dicom_dataset.PatientName = 'Patient Name' dicom_dataset.StudyDate = img_nifti.header.get_data_element('pixdim', 0).value # 获取时间日期元素 # ...其他元数据设置... ``` 5. 将nifti数据转换为dicom可用的像素数组,并添加到`Dataset`中: ```python pixel_array = dicom_dataset.pixel_array = nifti_data.astype('uint16') # 可能需要调整数据类型 ``` 6. 最后保存为DICOM文件: ```python save_path = 'path_to_save_your_dicom.dcm' dicom_dataset.save_as(save_path) ``` 注意:上述过程假设.nii.gz文件包含了足够的信息以填充DICOM元数据。如果需要更复杂的数据转换,可能还需要查看.nii.gz文件的header信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值