医学图像格式预处理

医学图像文件数据存储格式


DICOM

DICOM(Digital Imaging and Communications in Medicine)是指医疗数字影像传输协定,是用于医学影像处理、储存、打印、传输的一组通用的标准协定。它包含了文件格式的定义以及网络通信协议。DICOM是以TCP/IP为基础的应用协定,并以TCP/IP联系各个系统。两个能接受DICOM格式的医疗仪器间,可通过DICOM格式的文件,来接收与交换影像及病人资料。

目前,DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领域得到越来越深入广泛的应用。

一个 DICOM 文件包含文件头部和同文件名的*.dcm 图像数据。文件头部的大小取决于它所提供的信息的多少。文件头包含以下信息:病人的 ID,病人的姓名,图像的模态以及其他信息。它定义了帧的数量以及图像的精度。这些信息会被图像浏览器在显示图像时用到。对于一个单词采样,会有很多个 DICOM 文件。

医学图像格式预处理

尽管DICOM是MRI采集的标准输出格式,但是,数据分析前往往要把DICOM格式转化为其他分析格式,这主要是因为DICOM数据比较庞大。由于DICOM把每层图像都存储为独立文件,这会导致产生大量较小的数字文件,从而堵塞文件系统,降低分析速度。

dicom 文件读取

使用pydicom包

读取数据

显示数据

编辑影像大小

NRRD

官网:Teem: nrrd

NRRD是一种库和文件格式,旨在支持涉及n维栅格数据的科学可视化和图像处理。 NRRD代表“几乎原始的栅格数据”。除了尺寸的通用性外,NRD还具有相对于类型(8种积分类型,2种浮点类型),书面文件(RAW,ASCII,HEX或GZIP或BZIP2压缩)和Endianness的编码(数据字节顺序是明确的,当类型或编码公开时记录)。除了NRRD格式外,库还可以读取和编写PNG,PPM和PGM图像,以及一些VTK“ bustical_points”数据集。实施了关于栅格数据的大约两打操作,包括量价,切片和裁剪等简单的事情,以及更奇特的东西,例如使用任意分离的内核进行投影,直方图均衡和过滤的重采样(上下和下)。

MITK默认会将医学图像保存为格式为NRRD(Nearly Raw Raster Data)的图像,在这个数据格式中包含:

  • 一个单个的数据头文件:为科学可视化和医学图像处理准确地表示N维度的栅格信息。
  • 既能分开又能合并的图像文件。

一个NRRD文件的大致格式(带有数据头)如下图所示:

医学图像格式预处理

nrrd读取数据

nrrd转nii格式

使用ITK转换

NIFTI

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

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

DICOM 和 NIfTI 这两种格式的主要区别是:NIfTI 中的图像原始数据被存储成了 3 维图像,而 dicom 一些 2 维的图层。这就使得 NIFTI 更加适合那些应用在 DICOM 上的机器学习的方法,因为它是以 3D 图像建模的。处理一个单独的 NIFTI 文件要比处理成百上千个 dicom 文件更加容易一些。与 DICOM 格式下的好多个文件相比,NIFTI 格式下,每个 3d 图像只有两个文件。

神经成像信息技术创新”将NIFTI格式视为ANALYZE7.5格式的替代品。NIFTI最初是用于神经成像的,但它也适用于一些其他的领域。NIFTI中一个主要的特点在于它包含了两个仿射坐标定义,这两个仿射坐标定义能够将每个立体元素指标(i,j,k)和空间位置(x,y,z)联系起来。 Nibabel是用于读取nifti文件的一个朋友Python库,“oro.nifti”是用于读取nifti数据的一个R工具包。

标准NIfTI图像的扩展名是.nii,包含了头文件及图像资料。由于NIfTI格式和Analyze格式的关系,因此NIfTI格式也可使用独立的图像文件[.img]和头文件[.hdr]。单独的.nii格式文件的优势就是可以用标准的压缩软件[如gzip],而且一些分析软件包[比如FSL]可以直接读取和写入压缩的.nii文件[扩展名为.nii.gz]。

简而言之,nii格式和.nii.gz格式是一个东西。

医学图像格式预处理

hdr/header

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

Extension

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

Image

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

坐标

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

医学图像格式预处理

读取.nii/.nii.gz文件

使用nibabel包读取


  1. '''
  2. 查看和显示nii文件
  3. '''
  4. import matplotlib
  5. matplotlib.use('TkAgg')
  6. from matplotlib import pylab as plt
  7. import nibabel as nib #使用这个工具
  8. from nibabel import nifti1
  9. from nibabel.viewers import OrthoSlicer3D
  10. # 文件名,nii或nii.gz
  11. example_filename = './img/0001.nii.gz'
  12. img = nib.load(example_filename)
  13. print(img)
  14. print(img.header['db_name']) # 输出头信息
  15. # shape不一定只有三个参数,打印出来看一下
  16. width, height, queue = img.dataobj.shape
  17. # 显示3D图像
  18. OrthoSlicer3D(img.dataobj).show()
  19. 来源:淡唱暮念

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月6日
下一篇 2022年8月6日

相关推荐