Dicom格式文件解析器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Dicom格式文件解析器
学数字图像与通讯,这里讲的暂不涉及通讯那方面的问题只讲*.dcm也就是diocm格式文件的读取,读取本身是没啥难度的无非就是字节码数据流处理。只不过确实比较繁琐。
分析
又把论文里的这图贴上来总结的很好。单个dataElement的结构如下:
隐式VR?时元素结构
要问VR是啥东东,值表示法啥叫值表示法啊俺不懂intstringshortushort懂不就是这个意思,Dicom标准真坑爹非要整个怪怪的概念。
VR总共27个跟c#值类型对应关系我都写好了:
1string getVF(string VR,byte[]VF)
2{
3
4
5{
6case
7
8break
9case
10
11
12
13case
14
15
16
17case
18
19
20
21case
22
23
24
25case
26
27
28break;
29case"FD":
30VFStr=BitConverter.ToDouble(VF,0).ToString();
31
32break;
33case"OB":
34VFStr=BitConverter.ToString(VF,0);
35break;
36case"OW":
37VFStr=BitConverter.ToString(VF,0);
38break;
39case"SQ":
40VFStr=BitConverter.ToString(VF,0);
41break;
42case"OF":
43VFStr=BitConverter.ToString(VF,0);
44break;
45case"UT":
46VFStr=BitConverter.ToString(VF,0);
47
48case
49
50
51
52
53
54}
55
56}
找个
所有dataElement从前到后按tag又可简单分段:
几个特殊的tag很重要前面说过了tag就是dicom里定义的字典。文件元dataElement和跟像素数据相关的dataElement都很重要,其他的很多如果全部照顾完的话估计得写上千行switch语句
来确定
关键的
1
2{
3
4{
5case
6
7break
8case
9
10
11case
12
13
14case
15
16
17case
18
19
20case
21return"SQ";
22break;
23case"0008,1111":
24return"SQ";
25break;
26case"0008,0020"://检查日期
27return"DA";
28break;
29case"0008,0060"://成像仪器
32case"0008,0070"://成像仪厂商
33return"LO";
34break;
35case"0008,0080":
36return"LO";
37break;
38case"0010,0010"://病人姓名
39return"PN";
40
41case
42
43
44case
45
46
47case
48
49
50case
51
52
53case
54
55
56case
57
58
59case
60
61
62case
63
64
65case"0020,0013"://影像编号
66return"IS";
67break;
68case"0028,0002"://像素采样1为灰度3为彩色69return"US";
70break;
71case"0028,0004"://图像模式MONOCHROME2为灰度72return"CS";
73break;
74case"0028,0010"://row高
77case"0028,0011"://col宽
78return"US";
79break;
80case"0028,0100"://单个采样数据长度81return"US";
82break;
83case"0028,0101"://实际长度
84return"US";
85
86case
87
88
89case
90
91
92case
93
94
95case
96
97
98case
99
100
101
102
103
104
105
106
107
108
109
110case"7fe0,0010"://像素数据开始处111return"OW";
112break;
113default:
114return"UN";
115break;
116}
117}
最关键的两个tag: