热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

医学影像人工智能实战(三):nii和dcm格式医学图像处理

.nii格式的读取与保存注意两种方式读取维度的差异1.nibabel读取importnibabelasnibimgnib.load(path)print(img.shape)#(z

.nii格式的读取与保存

注意两种方式读取维度的差异


1.nibabel

读取

import nibabel as nib
img = nib.load(path)
print(img.shape) # (z,y,x)
img_array = np.asarray(img.get_fdata())
print(img_array.shape) # (x,y,z)

保存

img = nib.Nifti1Image(img_array, np.eye(4))
nib.save(img, os.path.join('output', 'img.nii.gz')

关于get_data()和get_fdata()的区别:一个是返回原始数据,一个是返回浮点数

见神经影像学中的python的一些基本函数的用法


2.SimpleITK

读取

import SimpleITK as sitk
img = sitk.ReadImage(ct_path, sitk.sitkInt16) # 可自行改变存储类型
print(img.shape) # (x,y,z)
img_array =sitk.GetArrayFromImage(img)
print(img_array.shape) # (z,y,x)

保存

out = sitk.GetImageFromArray(img_array)
sitk.WriteImage(out,'simpleitk_save.nii.gz')

NIfTI格式医学图像不同方向之间旋转


.dcm格式的读取

读取

# 采用pydicom模块
import pydicom
# 数据路径
file_path = r"C:\Users\os\Desktop\data\xxxxx.dcm"
# read_file
data0 = pydicom.read_file(file_path)
# file_data = data0.pixel_array
# print(file_data)
# dcmread
data1 = pydicom.dcmread(file_path)

读取dcm格式

分别采用了read_file和dcmread两种方式读取数据,两种方式读取效果相同

也可查询参数,自行参考链接


打印图片

借助numpy与PIL.Image

import numpy as np
data = np.array(data0.pixel_array)
from PIL import Image
data_img = Image.fromarray(data0.pixel_array)
data_img_rotated = data_img.rotate(angle=45,resample=Image.BICUBIC)
from matplotlib import pyplot
pyplot.imshow(data0.pixel_array,cmap=pyplot.cm.bone)
pyplot.show()

dcm和nii格式的互相转化

有对应的python代码可以转化

但是直接将.dcm重命名为.nii后仍然可以读取

.nii重命名为.nii.gz后仍然可以读取(也可通过gzip压缩后得到)

但是反过来.nii.gz重命名为.nii后不可读取

nii与nii.gz格式的关系



推荐阅读
author-avatar
清-新花曼的日子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有