04.DICOM存储

DICOM存储

所有 DICOM 数据(比如医学图像、命令和报告) 被打包在 DICOM 对象中。信息通过 DICOM 对象这种载体在各类 DICOM 设备之间传导。而 DICOM 对象是通过 DICOM 文件进行保存的。

一个 DICOM 对象就是一个个数据元素的集合,在DICOM中有一个特殊的 VR 是用来提供序列的 SQ,SQ 中的每个数据元素集实际上就是一个 DICOM 对象,形成了嵌套的属性结构。

image-20231115214121683

数据元素的编码

数据元素的编码分为隐式VR编码、显式VR编码两种类型。

隐式编码

每个元素的数据存储如下表所示,读取前 2 + 2 = 4 字节可以 得到“(组, 元素)”标签,继续读取后 4 个字节可以得到值长度为 L 的数值,再往后读取 L 个字节得到的就是元素值了,这样就完成的一个元素的读取。然后接着读取后面的属性。

image-20231115220555179

eg:

image-20231115220754069

显式编码

使用显式 VR 编码时,需要在编码中包含两个 VR 类型的字符(与隐式编码的区别)。

对于除 OB、OW、 OF、SQ、UT 和 UN 以外所有 VR 类型(这些类型以外的类型长度固定,较短,使用两个字节存储长度), 在隐式编码中使用的 4 字节 VR 长度字段在此处被劈成了两半,2 字节存 VR 类型,2 字节存 VR 长度

image-20231115220959240

eg:

image-20231115221040523

对于除OB、OW、 OF、SQ、UT 和 UN VR 类型,两字节的保留字段(值设置为 0000)跟在 VR 类型后面,并且在这之后分派 4 字节来存储 VR 长度

image-20231115221316247

eg:

image-20231115221331739

在同一个 DICOM 对象中,只能使用同一种编码类型,隐式编码或者显式编码,从结构上看,显式编码对于元素可能会多使用4个字节的数据来表示,导致数据量变大。

但是显示编码也会有一些好处:

  1. 一些 VR 类型会发生改变并且可能与当前版本 DICOM 字典中的样式不一致。这种情况下可能会解析到错误的结果
  2. 对于私有的Tag,在DICOM标准字典中没有对应的类型,不便于解析。

image-20231115225903923

数据组的编码

DICOM 数据字典中的所有 DICOM 元素都是以为单位组织的,用一对(组,元素)来表示

有序

当 DICOM 数据元素被编码成为 DICOM 对象时,他们会严格遵循(组,元素)标签的顺 序形成 DICOM 对象,并且从标签号较小的开始排序。组内元素是按照升序排列的; 而对象中的组也是按照升序排列的。

一般将最基础的数据放在数字较小的组号中,比如病人数据在 0010 组。 这可以帮助 DICOM 应用程序在只希望了解基础标签时不用去读取后面的内容

组长度

组中最靠前的保留元素(组,0000)是用作保存所有之后组中数据元素整体的长度。

image-20231115225446838

如果你的程序不需 要读取组的数据,它可能只从标签(组, 0000)中读取组长度 L,并且立即快进 L 字节来处理下一个组。

修改 DICOM 对象中的任何数据元素就可能会影响元素组的长度,需要同时去更新长度。

但是因为是一个的可选的标签,所以需要软件会不生成这个标签、或者生成一个错误的长度…

DICOM序列的编码

SQ(序列)这种 VR 序列,在 DICOM 数据编码方面比较特殊,SQ 元素本身没有数据,而是存储了一个 DICOM 对象序列,而且还会形成嵌套的结构。

image-20231115230023218

在 SQ 序列中的 DICOM 对象是以序列项目的形式进行编码的。

每个在 SQ 序列中的对象项目(object-item)前面都会有个(FFFE, E000)的标签,作为项目分隔符项。

这个项目后面还会跟着以下之一:

  1. DICOM 项目的显式长度(比如第一个和第二个项目)。这个长度是用来定义为了获得后面的对象所要读取的字节数。

    image-20231122221322574

    image-20231122221400682

  2. 隐式(未定义)长度,设置为十六进制数字 FFFFFFFF。那么,我们需要用项目分隔符项(FFFE,E00D)来标记DICOM 对象项目的结尾。 这个分隔符项是零长度的,因为他只是用来标记 DICOM 对象的结尾并且自己不含 有任何数据。

与普通dicom属性相似,整个 SQ 序列能够显式长度或未定义长度:

  1. 如果使用显式长度,那么这个长度等于所有编码的 DICOM 对象序列的总长度。
  2. 也可以使用隐式(未定义)长度,在 DICOM 中会标记为 FFFFFFFF。因为长度是未知的,所以使用零长度的序列分隔符项(FFFE,E0DD)来标记 SQ 序列的结尾。

image-20231122221630772

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值