dicom文件的传输语法讲解

来源:互联网 发布:windows错误恢复教程 编辑:程序博客网 时间:2024/06/06 04:42

dicom文件的传输语法讲解

Dicom全称是医学数字图像与通讯,这里讲diocm格式文件的解读,读取本身是没啥难度的 无非就是字节码数据流处理。只不过确实比较繁琐。
dicom中文协议文档:http://download.csdn.net/download/wenzhi20102321/9897014
dicom文件结构:
1

整体结构先是128字节所谓的导言部分,跳过就是了,接着就是四个字节组成的字符串,然后是dataElement元素依次排列的方式, 就是一个dataElement接一个dataElement的方式排到文件结尾.我们要读取dicom里面的各种数据就是在各个数据元素中。通俗的讲dataElement就是指tag,就是破Dicom标准里定义的数据字典,每个dataElement中的tag决定自身或整个文件的某些数据类型或自身dataElement内容类别。

标记tag(2字节UInt16分组号和2字节UInt16元素号);

tag是4个字节表示的 前两字节是组号后两字节是元素号 比如0008(组号) 0018(元素号)。
我们获取dicom里面的数据,就是根据tag,来知道这个dataElement里面是否是我们需要的数据,然后读取该dataElement里面的数据。

tag的dataElement结构,分为下面三种:

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

组号 元素号 VR 预留 值长度 数据元素值 2 2 2 2(0x00,0x00) 4 由数据长度决定

组号和元素号组成tag,上面的数组表示给类型占有的字节长度

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

组号 元素号 VR 值长度 数据元素值 2 2 2 4 由数据长度决定

3.隐式VR时元素结构(也就是dataElement中没有VR这个值)

组号 元素号 值长度 数据元素值 2 2 4 由数据长度决定

所有dataElement从前到后按tag又可简单分段:

文件元dataElement 不受传输语法影响 总是以显示VR方式表示 因为它里面就定义了传输语法 普通dataElement 受传输语法影响 显示VR表示方式还是隐式VR表示方式 像素数据dataElement 最重要也是最大的一个数据项 其实存储的就是图像数据

决定dataElement的传输方式的tag是0002, 0010

这个tag决定了dicom文件所有普通tag的传输方式和影像的存储方式!
传输的方式包括little字节方式和big字节方式。
dicom文件的图像分为压缩过的和没压缩的。

1
上面图就是一个dicom文件的数据展示。

下面罗列出该tag的VF值,并介绍他表示的意义。

未压缩:

意义 VF Implicit VR Little Endian: 同下 Default Transfer Syntax for DICOM 1.2.840.10008.1.2 Explicit VR Little Endian 1.2.840.10008.1.2.1 Explicit VR Big Endian 1.2.840.10008.1.2.2

无损压缩:

意义 VF JPEG Lossless : 同下 Default Transfer Syntax for Lossless JPEG 同下 ImageCompression 1.2.840.10008.1.2.4.70 JPEG 2000 Image Compression(Lossless Only) 1.2.840.10008.1.2.4.90 RLE Lossless 1.2.840.10008.1.2.5

有损压缩:

意义 VF Default Transfer Syntax for Lossy 同下 JPEG 12 Bit Image Compression 1.2.840.10008.1.2.4.51 LOSSY(8 bit) 1.2.840.10008.1.2.4.50 动态:MPEG2 image Compression 1.2.840.10008.1.2.4.100

上面这些VF值虽然不是所有的,但是也算是最常用的,我们遇见的dicom文件的99%都是在上面。
上面可以看到未压缩的文件都是显示VR类型的,虽然压缩的没标明,但是我知道那基本都是隐式类型&little字节。
我常见的压缩格式是无损压缩的JPEG和JPEG2000的dicom文件。上面还写有RLE也是一个压缩格式。
还有一点要注意的是显示VR和隐式VR和字节方式little字节和big字节没有太大的关联,是一种组和关系。
比如显示VR有可能是little字节的,也有可能是big字节的,隐式VR也是同理。
具体的查找就要去看dicom协议的定义了!

看了上面那么多,知道有显示VR和隐式VR,和little字节和big字节的传输方式,但是有什么意义呢?
表面上来说,隐式VR的dataElement要比显示的VR的dataElement前面要少调VR这两/四个字节。
特别要注意的是,隐式VR并不是这个dataElement没有值类型,而是隐藏了,它这个tag的类型该是什么,还是什么,就像前面那句话说的,少两个字节而已。
隐式与显式没什么好讨论的啊,隐式一个tag少2个字节,可以节省空间,就像有的人的名字有4个字有的2个一样的吧
我觉得之所有会有显隐式之分,应该是当时制定DICOM标准时,为了兼容那几个已有的大厂商。

大小字节的区别:

little和big字节方式,决定流的传输方式,比如:是同一个字节流的数据通过不同的方式传输后表现的数据形式是不一样的。

5

图像压缩的原理:

修剪率:

2

无损压缩:

3
把固定的符号替换成短一些的另一种符号。

有损压缩:

4
把相近的固定符号替换成某一个符号。

dicom传输的相关知识也只能介绍到这里,其实我也是一个菜鸟,上面很多知识还没有理解透彻,只是把这些知识罗列出来,给大家参考一下!

dicom文件解析知识的其他地址:

1.dicom文件详解

http://blog.csdn.net/wenzhi20102321/article/details/75127362

2.dicom文件的值类型VR详解

http://blog.csdn.net/wenzhi20102321/article/details/75127140

3.dicom文件tag详解

http://blog.csdn.net/wenzhi20102321/article/details/75127101

4.android 解析并显示dicom文件的数据和图像

http://blog.csdn.net/wenzhi20102321/article/details/75040225

5.java代码使用ImageJ解析dicom文件成图片

http://blog.csdn.net/wenzhi20102321/article/details/74995084

前面5个是我自己写的,后面是一些我自己看过的相关资料:

6.Dicom文件解析

http://blog.csdn.net/leaf6094189/article/details/8510325

7.使用dcm4che3获取Dicom的bmp格式缩略图

http://blog.csdn.net/Kerrigeng/article/details/60866656

8.使用dcm4che3解析DICOM中,中文乱码问题

http://blog.csdn.net/Kerrigeng/article/details/53942846

9.使用dcm4che3对jpeg压缩的dcm文件进行解压

http://blog.csdn.net/Kerrigeng/article/details/62215647

10.DICOM的常用Tag分类和说明

http://www.cnblogs.com/stephen2014/p/4579443.html

11.dicom的大牛zssure的博客,几十篇文章

http://blog.csdn.net/zssureqh/article/category/1389985

12.dicom协议中文文档下载

http://download.csdn.net/detail/wenzhi20102321/9897014

13.Sante DICOM Editor 4,查看dicom文件的工具,直接打开用

http://download.csdn.net/detail/wenzhi20102321/9895616

共勉:现在的你跟十年以后的你,是有很大关系的!

原创粉丝点击