当前位置:首页 > 前端 > Cornerstone3D > 正文内容

DICOM3.0医学文件的解析

virtualman4年前 (2021-02-06)Cornerstone3D36

最近导师一直让做智慧医疗的一个项目,这里面涉及到DICOM格式的文件处理,在这里分享一下自己学到的关于DCM文件的一些内容。

1.DICOM

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

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

目前采用的标准是DICOM3.0,每一张图像中都携带着大量的信息,这些信息具体可以分为以下四类:

  • (a)Patient
  • (b)Study
  • (c)Series
  • (d)Image

每一个DICOM Tag都是由两个十六进制数的组合来确定的,分别为Group和Element。如(0010,0010)这个Tag表示的是Patient’s Name,它存储着这张DICOM图像的患者姓名。

2.DICOM存储格式

DICOM文件的整体结构如下表所示,先是128字节的导言部分(没有实际信息),接着是四个字节组成的"DICM"字符串,然后是若干DataElement元素依次排列直至文件结束。

导言

"DICM"

DataElement

DataElement

...

DataElement

128 Byte

4 Byte

n Byte

n Byte

 

n Byte

2.1 DataElement的三种结构

DataElement是存储文件信息的主体,DataElement的总体结构如下表所示:

Tag

VR(值表示法)

Len(数据长度)

数据值(内容)

4 Byte

2 Byte

2 Byte

Len Byte

Tag由2 Byte的组号(group)和2 Byte的元素号(element)组成,VR是DICOM特有的值表示法,关于值表示法的解释见下文

 

按照VR的类型以及是否显示VR,DataElement又分为三种具体的结构。

  • 显示VR:VR为OB OW OF UT SQ UN的元素结构

结构

组号

元素号

VR

预留

值长度

数据元素值

字节数

2

2

2

2(0x00,0x00)

4

由值长度确定

  • 显示VR:VR为普通类型时元素结构(少了预留那一行)

结构

组号

元素号

VR

值长度

数据元素值

字节数

2

2

2

4

由值长度确定

  • 隐式VR

结构

组号

元素号

值长度

数据元素值

字节数

2

2

4

由值长度确定

2.2 DataElement的Tag

DataElement的Tag用于标识Element的数据内容,比如病人信息、图像的格式等。

Tag总共有2000多个。

常用的主要组号:0002组描述设备通讯,0008组描述特征参数,0010组描述患者信息,0028组描述图像信息参数。

Dicom文件数据中所有dataElement从前到后

2.2.1 按tag格式又可简单分段
  • 文件元Tag(组号+0000)

不受传输语法影响,总是以显示VR方式表示,用于定义了传输语法;

文件元Tag的dataElement,并没有多大的意义,它的值长度是整个组所有DataElement的字节长度,一个Dicom中可以只有一个文件元Tag,也可以有多个文件元Tag。

  • 普通Tag

除了文件元Tag和像素Tag,其余的都是普通Tag数据。包括:图像宽,高,数据传输格式,病人姓名,病人生日,病历医院,病历科室,病情的描述等等数据;

  • 像素Tag(7fe0,0010)

表示DataElement存储的是病历的图像数据。

 

2.2.2 按Tag展示信息的类别
  • Patient Tag

Group

Element

Tag Description

中文解释

VR

0010

0010

Patient’s Name

患者姓名

PN

0010

0020

Patient ID

患者ID

LO

0010

0030

Patient’s Birth Date

患者出生日期

DA

0010

0032

Patient’s Birth Time

患者出生时间

TM

0010

0040

Patient’s Sex

患者性别

CS

0010

1030

Patient’s Weight

患者体重

DS

0010

21C0

Pregnancy Status

怀孕状态

US

  • Study Tag

Group

Element

Tag Description

中文解释

VR

0008

0050

Accession Number:A RIS generated number that identifies the order for the Study.

检查号:RIS的生成序号,用以标识做检查的次序.

SH

0020

0010

Study ID

检查ID.

SH

0020

000D

Study Instance UID:Unique identifier for the Study.

检查实例号:唯一标记不同检查的号码.

UI

0008

0020

Study Date:Date the Study started.

检查日期:检查开始的日期.

DA

0008

0030

Study Time:Time the Study started.

检查时间:检查开始的时间.

TM

0008

0061

Modalities in Study

一个检查中含有的不同检查类型.

CS

0008

0015

Body Part Examined

检查的部位.

CS

0008

1030

Study Description

检查的描述.

LO

0010

1010

Patient’s Age

做检查时刻的患者年龄,而不是此刻患者的真实年龄.

AS

  • Series Tag

Group

Element

Tag Description

中文解释

VR

0020

0011

Series Number:A number that identifies this Series.

序列号:识别不同检查的号码.

IS

0020

000E

Series Instance UID:Unique identifier for the Series.

序列实例号:唯一标记不同序列的号码.

UI

0008

0060

Modality

检查模态(MRI/CT/CR/DR)

CS

0008

103E

Series Description

检查描述和说明

LO

0008

0021

Series Date

检查日期

DA

0008

0031

Series Time

检查时间

TM

0020

0032

Image Position (Patient):The x, y and z coordinates of the upper left hand corner of the image, in mm.

图像位置:图像的左上角在空间坐标系中的x,y,z坐标,单位是毫米. 如果在检查中,则指该序列中第一张影像左上角的坐标.

DS

0020

0037

Image Orientation (Patient):The direction cosines of the first row and the first column with respect to the patient.

图像方位:

DS

0018

0050

Slice Thickness:Nominal slice thickness, in mm.

层厚.

DS

0018

0088

Spacing Between Slices

层与层之间的间距,单位为mm

DS

0020

1041

Slice Location:Relative position of exposure expressed in mm.

实际的相对位置,单位为mm.

DS

0018

0023

MR Acquisition

 

CS

0018

0015

Body Part Examined

身体部位.

CS

  • Image Tag

Group

Element

Tag Description

中文解释

VR

0008

0008

Image Type:Image identification characteristics.

 

CS

0008

0018

SOP Instance UID

SOP实例UID.

 

0008

0023

Content Date:The date the image pixel data creation started.

影像拍摄的日期.

DA

0008

0033

Content Time

影像拍摄的时间.

TM

0020

0013

Image/Instance Number:A number that identifies this image.

图像码:辨识图像的号码.

IS

0028

0002

Samples Per Pixel:Number of samples (planes) in this image.

图像上的采样率.

US

0028

0004

Photometric Interpretation:Specifies the intended interpretation of the pixel data.

光度计的解释,对于CT图像,用两个枚举值MONOCHROME1,MONOCHROME2.用来判断图像是否是彩色的,MONOCHROME1/2是灰度图,RGB则是真彩色图,还有其他.

CS

0028

0010

Rows: Number of rows in the image.

图像的总行数,行分辨率.

US

0028

0011

Columns: Number of columns in the image.

图像的总列数,列分辨率.

US

0028

0030

Pixel Spacing:Physical distance in the patient between the center of each pixel.

像素间距.像素中心之间的物理间距.

DS

0028

0100

Bits Allocated:Number of bits allocated for each pixel sample. Each sample shall have the same number of bits allocated.

分配的位数:存储每一个像素值时分配的位数,每一个样本应该拥有相同的这个值.

US

0028

0101

Bits Stored:Number of bits stored for each pixel sample. Each sample shall have the same number of bits stored.

存储的位数:有12到16列举值.存储每一个像素用的位数.每一个样本应该有相同值.

US

0028

0102

High Bit:Most significant bit for pixel sample data. Each sample shall have the same high bit.

高位.

US

0028

0103

Pixel Representation:Data representation of the pixel samples. Each sample shall have the same pixel representation.Enum: 0000H=unsigned integer,0001H=2’s complement.

像素数据的表现类型:这是一个枚举值,分别为十六进制数0000和0001.0000H = 无符号整数,0001H = 2的补码.

US

0028

1050

Window Center

窗位.

DS

0028

1051

Window Width

窗宽.

DS

0028

1052

Rescale Intercept:The value b in relationship between stored values (SV) and the output units.Output units = m*SV + b.Required if Modality LUT Sequence (0028, 0030) is not present.

截距:如果表明不同模态的LUT颜色对应表不存在时,则使用方程Units = m*SV + b,计算真实的像素值到呈现像素值。其中这个值为表达式中的b。

DS

0028

1053

Rescale Slope:m in the equation specified by Rescale Intercept (0028,1052).Required if Rescale Intercept is present.

斜率.这个值为表达式中的m。

DS

0028

1054

Rescale Type:Specifies the output units of Rescale Slope (0028,1053) and Rescale Intercept (0028,1052).Enum: US=Unspecified Requried if Photometric Interpretation is MONOCHROME2, and Bits Stored is greater than 1.This specifies an identity Modality LUT transformation.

输出值的单位.这是一个枚举值,

LO

2.3 DataElement的VR

VR(Value Representation)值表示法是DICOM文件中特有的一种数据类型表示方式,规定了不同数据类型的含义及存储格,共有27种VR。在隐式VR的结构中会根据元素标识进行判断。Tag和VR是有对应关系的,每一种Tag其实是有一个固定的VR类型。

2.3.1 27种VR的含义及数据长度

VR

含义

允许的字符

数据长度

CS - Code String代码字符串

开头结尾可以有没有意义的空格的字符串,比如“CD123_4”

大写字母,0-9,空格以及下划线字符

最多 16 个字符

SH - Short String短字符串

短字符串,比如:电话号码,ID等

 

最多 16 个字符

LO - Long String 长字符串

一个字符串,可能在开头、结尾填有空 格。比如“Introduction to DICOM”

 

最多 64 个字符

ST - Short Text短文本

可能包含一个或多个段落的字符串

 

最多 1024 个字符

LT - Long Text短文本

可能包含一个或多个锻炼的字符串,与LO相同,但可以更长

 

最多 10240 个字符

UT - Unlimited Text无限制文本

包含一个或多个段落的字符串,与 LT 类似

 

最多(2的32次方–2)个字符

AE - Application Entity应用实体

标识一个设备的名称的字符串,开头和 结尾可以有无意义的字符。比如 “MyPC01”

 

最多 16 个字符

PN - Person Name病人姓名

有插入符号()作为姓名分隔符的病人姓名。比如“SMITHJOHN” “Morrison- JonesSusan^^Ph.D, Chief Executive Officer”

 

最多 64 个字符

UI - Unique Identifier (UID)唯一标识符

一个用作唯一标识各类项目的包含 UID 的字符串。比如“1.2.840.10008.1.1”

0-9 和半角句号(.)

最多64 个字符

DA - Date日期

格式为 YYYYMMDD 的字符串;YYYY 代表年;MM 代表月;DD 代表日。比 如“20050822”表示 2005 年 8 月 22 日

0-9

8个字符

TM - Time时间

格式为 HHMMSS 的字符串。FRAC; HH 表示小时(范围“00”-“23”); MM 表示分钟(范围“00”-“59”); 而 FRAC 包含秒的小数部分,即百万分 之一秒。比如“183200.00” 表示下午 6:32

0-9 和半角句号(.)

最多 16 个字符

DT - Date Time日期时间

格式为 YYYYMMDDHHMMSS. FFFFFF,串联的日期时间字符串。字符串的各部分从左至右是:年 YYYY;月 MM;日 DD;小时 HH;分钟 MM;秒 SS;秒的小数 FFFFFF。比如 20050812183000.00”表示 2005 年 8 月 12 日下午 18 点 30 分 00 秒

0-9,加号,减号和半角句号

最多 26 个字符

AS - Age String年龄字符串

符合以下格式的字符串:nnnD, nnnW, nnnM, nnnY;其中 nnn 对于 D 来说表示天数,对于W来说表示周数,对于M 来说表示月数,对于 Y 来说表示岁数。 比如“018M”表示他的年龄是 18 个月

0–9, D, W,M, Y

4 个字符

IS - Integer String整型字符串

表示一个整型数字的字符串。比如“-1234567”

0-9,加号(+),减号(-)

最多 12 个字符

DS - Decimal String 小数字符串

表示定点小数和浮点小数。 比如“12345.67”,“-5.0e3”

0-9,加号(+),减号(-), 最多 16 个字符 E,e 和半角句号(.)

最多 16 个字符

SS - Signed Short有符号短型

符号型二进制整数,长度 16 比特

 

2 个字符

US - Unsigned Short 无符号短型

无符号二进制整数,长度 16 比特

 

2 个字符

SL - Signed Long有符号长型

有符号二进制整数

 

4 个字符

UL - Unsigned Long 无符号长型

无符号二进制整数,长度 32 比特

 

4 个字符

AT - Attribute Tag属性标签

16 比特无符号整数的有序对,数据元素的标签

 

4 个字符

FL - Floating Single 单精度浮点

单精度二进制浮点数字

 

4 个字符

FD - Floating Point Double双精度二进制浮点数字

双精度二进制浮点数字

 

8 个字符

OB - Other Byte String其他字节字符串

字节的字符串(“其他”表示没有在VR中定义的内容)

 

 

OW - Other Word String其他单词字符串

16 比特(2 字节)单词字符串

 

 

OF - Other Float String其他浮点字符串

32 比特(4 个字节)浮点单词字符串

 

 

SQ - Sequence Items条目序列

条目的序列

 

 

UN – Unknown未知

字节的字符串,其中内容的编码方式是未知的

 

 

2.4 DataElement的数据长度

数据长度用两个字节存储了数据元素值的长度,所有DICOM数据元素都应该为偶数长度,若为奇数,追加空格或空NULL。当数据长度为0xFFFFFFFF时,数据一直到截止符为止。

现有的解析库

  1. 基于C++的DCMTK
  2. 基于Java的dcm4che
  3. 基于python的pydicom
  4. 基于C#的fo-dicom
  5. 基于JS的cornerstone

通过在工程中引入它们可以避免软件开发人员去进行底层的解析工作,可为项目开发提高效率。

相关文章

【解决】在Vite中使用Cornerstone2.0时,无法编译的问题

在vite.config.js文件中,加入: worker: { format: "es", rollupOptions: { external: ["@icr/polyseg-wasm"], }, }, 这段代码配置了 Vite 构建工具中的...

通过cornerstone2.0获取dicom文件头信息

在解析dicom头信息之前,需要先明确,DICOM文件的具体格式,可移步:https://virtualman.top/index.php/post/57.html /** * 获取头部信息,仅限Dicom文件 */ function getHeaderInfo() {...

【Cornerstone2.0中文文档】入门篇——cornerstone概述

【Cornerstone2.0中文文档】入门篇——cornerstone概述

在本节中,您将了解使用 Cornerstone 的基本知识。 概述 Cornerstone3D是一个轻量级 Javascript 库,用于在支持 HTML5 Canvas 元素的现代 Web 浏览器中可视化医学图像。使用Cornerstone3D及其附带的库(例如Cornerstone3DT...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。