我是靠谱客的博主 无情大米,最近开发中收集的这篇文章主要介绍使用matlab读取MRI影像的DICOM文件&header,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

matlab的图像处理工具箱(image processing toolbox)自带了读取医学图像DICOM文件的函数dicomread、dicominfo等,如果MRI影像数据的扫描参数丢失(本文以Slice order为例),可以使用dicominfo函数来获取MRI影像的头文件,从而读取到扫描参数。

在图像处理工具箱中,涉及DICOM图像处理的matlab函数主要有以下12个
在这里插入图片描述
今天主要介绍dicominfo、dicomread、dicomdisp

dicominfo

info = dicominfo(filename)

filename 指定的某一个DICOM文件全名
以西门子的机器为例,filename应该是一个后缀为IMA的DICOM文件

该函数负责把DICOM文件的header读进变量info里,以结构体的形式存储。
DICOM文件的header又称作metadata,里面基本存放了所有的扫描参数,当扫描参数记录丢失时,可以用这种方法重新找回扫描参数。
dicominfo的输出通常包含148个字段,如下图
在这里插入图片描述
其中包含很多命名具有明确意义的字段,这些字段表示了DICOM文件的基础信息和一部分扫描参数,例如FileSize表示文件大小,ImageType表示图像格式等等
而另一部分扫描参数通常在一系列名为“Private_00******”的字段内,如下图
在这里插入图片描述在这里插入图片描述
在做MRI数据预处理时,我们需要知道很多扫描参数,例如做Slice Timing时需要知道slice number和slice order,以此为例,dicominfo输出的info变量中,slice order信息存储在一个命名为“Private_00**
”的字段内(每个DICOM文件的具体字段名称可能不一样)。要想找到Slice order也很简单,只需观察“Private_00**_”字段中,那些存储着double类型的字段即可。通常的Slice number一般是32、33、34,只需找到Slice number*1的double类型变量,如上图中的Private_0019_1029字段,也就找到slice order了。

打开这一字段后,里面的数值大小就表示着每一层对应的扫描时间在这里插入图片描述
以西门子的机器为例,当slice number为偶数时,先扫偶数层再扫奇数层,即2、4、6、8、10……34、1、3、5、7、9……33。由上图所示的变量内容也可以轻松推断出slice order

dicomdisp

使用dicomdisp函数可以在命令行窗口显示出DICOM文件的header

dicomdisp(filename)

在这里插入图片描述

dicomread

这个函数用于读取指定的DICOM文件

X = dicomread(filename) 

它可以直接以DICOM文件名为输入

info = dicominfo(filename)
X = dicomread(info)

也可以拿dicominfo函数的输出来作为dicomread的输入

X以一个uint16的矩阵来存储DICOM图像
使用下面这条语句可以显示读入的DICOM图像

imshow(X,'DisplayRange',[]);

在这里插入图片描述

最后

以上就是无情大米为你收集整理的使用matlab读取MRI影像的DICOM文件&header的全部内容,希望文章能够帮你解决使用matlab读取MRI影像的DICOM文件&header所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部