[医学影像知识] 医学体数据.mha文件,如何存取元信息?

本文由Markdown语法编辑器编辑完成.

在这里插入图片描述

1. 背景:

在上一篇文章中,已经介绍了.mha格式的体数据文件,在医学影像软件中的应用,即,它可以将一个序列内所有的dicom内的PixelData, 都集成到一个文件中.
这对于后续的读取是一个很大的帮助.因为计算机在读取一个整块的.mha大文件(几百MB)的速度,要远远高于读取很多很多小(一张512*512的CT dicom图像是500KB左右)的文件.

但是,.mha文件由于主要保存的像素信息,因此它包含的其他信息很少,比如DICOM文件中,一般会包含几百个不同的tag, 记录了这张dicom的各种参数,比如患者信息,检查描述,检查号,拍摄日期和时间,扫描协议,拍摄方位等等.

这些信息,对于后处理有很大的帮助.

因此,如果我们可以直接从.mha文件中来读取出这些tag信息,那么就极大地简化了一些处理逻辑.于是,我们这篇文章,主要就是要解决,如何与.mha文件进行交互,存储和读取其他tag信息.

2. 方法介绍:

2.1 .mha元信息

在之前的博文中,已经写过如果利用simpleITK, 来生成一个包含一个序列内全部像素信息的.mha文件。这里不再赘述。
假设我们已经有一个之前生成好的.mha文件。那么我们首先读取这个.mha文件,看看它除了体数据,还有哪些信息。

以下是一段, 基于SimpleITK读取一个已经存在.mha的文件,并且读取它已知的元信息的代码.

import SimpleITK as sitk
image = sitk.ReadImage("test.mha")
image.GetMetaDataKeys()

它的输出结果为:

('ITK_InputFilterName', 'ITK_original_direction', 'ITK_original_spacing')

然后读取这几个Key值时,输出的结果却是UNKNOWN_PRINT_CHARACTERISTICS.

image.GetMetaData("ITK_original_direction")

'[UNKNOWN_PRINT_CHARACTERISTICS]\n'

从这里可以看出,虽然.mha文件,虽然有默认的几个元信息的key. 但如果不提前赋值的话,也是读取不到结果的。

2.2 为.mha提前写入元信息

既然可以从.mha中,读出默认的一些key. 那么我们也可以在生成.mha之后,将一些未来需要使用的key值,提前写入到.mha文件中,比如PatientID, AccessionNumer等。

以下是一个测试代码:

import SimpleITK as sitk
image = sitk.ReadImage("test.mha")
image.SetMetaData("PatientID", "123456")

modify_mha_file = "modify.mha"
sitk.WriteImage(image, modify_mha_file)

image2 = sitk.ReadImage(modify_mha_file)
image2.GetMetaData("PatientID")

在这里插入图片描述

通过以上的测试,可以发现,虽然.mha体数据文件,主要是用来保存dicom文件中的像素信息的。
但是如果由于特定的需求,也需要在.mha中,包含一些文本信息。那么,基于SimpleITK的sitk.Image对象提供的SetMetaData(), GetMetaData()接口,通过设置key, value的方式,写入和读出包含在.mha文件中的元信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

inter_peng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值