医学图像 .nii文件格式详解

目录

nii基础

坐标

体素

转换矩阵

nii格式


NIFTI 格式基本知识

Nifti 格式最初是为神经影像学发明的。神经影像信息学技术计划(NIFTI)将 NIfTI 格式预设为 ANALYZE7.5 格式的替代品。它最初的应用领域是神经影像,但是也被用在其他领域。这种格式的主要特点就是它包含两个能够将每个体素的索引(i,j,k)和它的空间位置(x,y,z)关联起来的仿射坐标。

nii基础

大部分医学领域导出dicom格式,但是太复杂了。很多时候,将dicom转换为nifti格式也就是nii格式
一个NIFTI格式主要包含三部分:hdr, ext, img

hdr/header

这部分数据长度是固定的,当然不同版本可能规定的长度不同,但是同一版本的多个nii文件是相同的。
header里包含的信息有:
--维度,x,y,z,单位是毫米。还有第四个维度,就是时间。这部分储存的主要是四个数字。
--voxel size(体素大小):毫米单位的x,y,z大小。
--数据类型,一般是int16,这个精度不够,最好使用double类型。
--Form和转换矩阵,每一个Form都对应一个转换矩阵。暂时不知道Form是什么。

 

Extension

是自己可以随意定义数据的部分,可以自己用。但是通用的软件公司都无法使用这部分。

Image

储存3D或者4D的图像数据

坐标

dicom和nii格式定义了不同的方向,对于nii格式,坐标原点在大脑中某个部位上,方向可以从图上看出。

体素

转换矩阵

转换矩阵可以轻松分清图像的左右。转换矩阵是一个4X4的矩阵,作用是将体素索引(i,j,k)转换为空间位置(x,y,z)。具体使用方法是转换矩阵乘以一个包含(i,j,k)的矩阵,就可以得到一个包含(x,y,z)的矩阵。
转换矩阵用到了一些概念,在dicom格式上也是一样的
详情见引用文章

nii格式

后缀名为.nii的文件格式又叫NIfTI-1,它改编自广泛使用的ANALYZE™7.5格式。一些比NIfTI-1发展早的老软件也可以兼容NIfTI-1。
比ANALYZE 7.5新的特性如下:

--将体素索引(i,j,k)与空间位置(x,y,z)相关的仿射坐标定义
--表示FMRI(核磁共振)的时空切片顺序的代码;
--“完整”的8-128位数据类型集;
--在1-4维域上存储矢量值数据集的标准化方法;
--表示数据“含义”的代码;
--向标头添加“扩展”数据的标准化方法;
--双文件(.hdr和.img)或单文件(.nii)存储;

还有很多。 目的是在FMRI数据分析软件包之间的文件交换级别上促进互操作性。
AFNI,BrainVoyager,FSL和SPM的作者都致力于支持这种格式的输入和输出。

 

### 对于.nii格式医学图像的分割 #### 数据预处理 在进行任何类型的医学图像分割之前,数据预处理是一个至关重要的环节。对于`.nii`格式文件而言,通常会涉及到读取这些三维体素数据并对其进行标准化操作。这包括但不限于调整灰度值范围至0到1之间、去除噪声以及可能存在的异常值处理等[^2]。 ```python import nibabel as nib import numpy as np def preprocess_nii(file_path): img = nib.load(file_path) data = img.get_fdata() # Normalize the image intensity to [0, 1] normalized_data = (data - np.min(data)) / (np.max(data) - np.min(data)) return normalized_data ``` #### 使用深度学习模型进行分割 近年来,在医学图像分析领域内,卷积神经网络(CNNs),尤其是U-Net架构及其变种版本被广泛应用于各种任务当中,其中包括肝脏肿瘤区域自动识别与边界描绘等工作。这类方法能够有效地捕捉空间特征,并实现端到端的学习过程[^1]。 ```python from tensorflow.keras.models import Model from tensorflow.keras.layers import Input, Conv3D, MaxPooling3D, UpSampling3D, concatenate def unet_3d(input_shape=(None, None, None, 1)): inputs = Input(shape=input_shape) conv1 = Conv3D(32, kernel_size=3, activation='relu', padding='same')(inputs) pool1 = MaxPooling3D(pool_size=(2, 2, 2))(conv1) conv2 = Conv3D(64, kernel_size=3, activation='relu', padding='same')(pool1) upsample2 = UpSampling3D(size=(2, 2, 2))(conv2) merged = concatenate([conv1, upsample2], axis=-1) output_layer = Conv3D(1, kernel_size=1, activation='sigmoid')(merged) model = Model(inputs=[inputs], outputs=[output_layer]) return model ``` #### 后处理及评估指标计算 完成预测之后还需要对结果做一定的优化工作,比如利用形态学运算来消除孤立的小斑点;另外也需要定义合适的评价标准用来衡量算法性能的好坏程度,常见的有Dice系数、Jaccard指数等等[^3]。 ```python from scipy.ndimage.morphology import binary_opening, generate_binary_structure from sklearn.metrics import jaccard_score def post_process(prediction, structure=None): if not isinstance(structure, type(None)): prediction = binary_opening(prediction, structure).astype(int) return prediction def calculate_jaccard(true_mask, pred_mask): intersection = np.sum(np.logical_and(true_mask, pred_mask)) union = np.sum(np.logical_or(true_mask, pred_mask)) iou = intersection / float(union + 1e-8) return iou ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值