DICOM醫學影像文件格式解析
dicom協議中文文檔可去csdn下載
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時,數據一直到截止符為止。
3 未完待續
添加js解析dicom的內容