关于nibabel和SITK处理nii文件的区别

文章对比了nibabel和SimpleITK在处理三维nii骨骼数据时的不同,特别是在Arima软件中的显示效果。nibabel处理后的文件在Arima中显示灰度值固定在0-255,而SimpleITK则能正确显示0-1024的灰度范围。因此,作者建议在nii文件处理中优先考虑使用SimpleITK,以获得更理想的显示效果。

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

因为有对三维nii骨骼数据标注处理的需要,通过Arima软件分割出来的不同骨块需要灰度值处理才能在可视化软件中显现出肉眼可见的颜色区别方便进行校正、筛选或者其他的处理步骤。故重新捡起nibabel和SimpleITK来读取存储nii文件,在使用过程中发现了两个库对于nii文件的处理内部颇有些不同,在arima软件中的适配度也不一样,所以记录一下。

用Arima导出的单部分mask的背景均为0,骨骼均为1,所以需要读入后筛选值为1的元素进行修改。

nibabel:

import numpy as np
import nibabel as nib

nii_path = r'\10\L.nii'
src_img = nib.load(nii_path)
src_data = src_img.get_fdata()

modified_data = np.copy(src_data)
mask_indexes = np.where(src_data == 1)
modified_data[mask_indexes] += 1023
print(modified_data)
nii_img = nib.Nifti1Image(modified_data, src_img.affine, src_img.header)
nib.save(nii_img, r'\10\L_1.nii')

SimpleITK

import numpy as np
import nibabel as nib
import os
import SimpleITK as sitk

img_name = r'57\S.nii'
ct = sitk.ReadImage(img_name, sitk.sitkInt16)
ct = sitk.GetArrayFromImage(ct)
modified_data = ct
mask_indexes = np.where(ct == 1)
modified_data[mask_indexes] += 1023

print(modified_data)
modified_data = sitk.GetImageFromArray(modified_data)
sitk.WriteImage(modified_data, r'57\S_1.nii')

可以看出两端基础代码只是在读取和存入的时候不同,都希望更改为1024的灰度值,且用ITK-Snap查看图片信息的min-max值都为0-1024

 

 

但是nibabel在Arima医疗软件中显示值固定为0-255

SimpleITK在Arima医疗软件中显示值则为正常的0-1024(512)等自定义的值

 

 显示于融合mask中的结果就更明显

nibabel:

 SimpleITK:

 没有深入了解过这两个库的源码,不知道底层区别,但基于结果,建议在nii中使用SimpleITK库进行处理,效果更理想

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nimmermehr。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值