DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点

这篇具有很好参考价值的文章主要介绍了DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DICOM 文件的结构,在网上有很多的学习资料,这里只介绍些容易混淆的概念,作为回看笔记。

1. 传输语法

每个传输语法,起都是表达的三个概念:大小端、显隐式、压缩算法

DICOM Implicit VR Little Endian: 1.2.840.10008.1.2
DICOM Explicit VR Little Endian: 1.2.840.10008.1.2.1
DICOM Explicit VR Big Endian: 1.2.840.10008.1.2.2
JPEG_LOSSLESS_TRANSFER_SYNTAX: “1.2.840.10008.1.2.4.70”;
在dcmtk中,dcmdata工程内dcxfer.cc文件都有明确的标识,例如JPEG_LOSSLESS_TRANSFER_SYNTAX: “1.2.840.10008.1.2.4.70”; 表示

{ UID_JPEGProcess14SV1TransferSyntax, // "1.2.840.10008.1.2.4.70"
  "JPEG Lossless, Non-hierarchical, 1st Order Prediction",
  EXS_JPEGProcess14SV1,
  EBO_LittleEndian,
  EVT_Explicit,
  EJE_Encapsulated,
  14L ,14L,
  OFFalse,
  OFFalse,
  ESC_none },

上边就表示了JPEG_LOSSLESS_TRANSFER_SYNTAX这个传输语法,是小端和显式的。

2 显式VR

  • 当VR是OB OW OF UT SQ UT UN的时候,VL占用4个字节
组号 元素号 VR+预留 值长度 数据元素值
2字节 2字节 2字节+2字节(0x00,0x00) 4字节 由数据长度决定

DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

  • 当为其他普通类型的时候,是如下的结构
组号 元素号 VR+预留 值长度 数据元素值
2字节 2字节 2字节 2字节 由数据长度决定

DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

  • 隐式
组号 元素号 值长度 数据元素值
2字节 2字节 4字节 由数据长度决定

DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

3. Sequence二进制文件编码

3.1. 显式长度

当Sequence的数据元素值被编码为32位无符号整数值的时候,这个长度应该包括由该数据元素传递的零个或多个Item产生的总长度。如果项目序列包含零个项目,则此数据元素长度应为00000000H。
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
以下是一个例子:
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
因为这个文件是显式小端(边)编码方式,标注1表示组号和元素号,标注2中显示,前两个字节是SQ,接下来2个字节是预留00 00,标注3中,长度是0x18,也就是24个字节长度,这就表示接下来的24个字节都是此Sequence元素。
接下来我们再详细看下Sequence内部item的定义的结构;内部的Item以FFFE,E000开始,然后是4个字节的长度,然后是一个标准的DataSet集合。
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
上图中,标注1就是Sequence中的Item的开始。
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

  • 再看另外一个例子2,这个可以大家自己分析一下
    DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

3.2 当Sequence中,是未定义的长度,也就是,数据元素长度字段为FFFF,FFFFH的值的时候,此时,它应与序列定界项目结合使用。序列定界项目应位于项目序列的最后一个项目之后,其Item的标签应为(FFFE,E0DD),项目长度为00000000H。

DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
以下是一个西门子CT产生的dicom文件片段,我个人感觉这个文件是错误的。
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
大家可以看到标注1的位置,表示这个sequence是没有设定长度的,所以,它的结尾是以FFFE,E0DD结束,后边再跟上0000 0000.也就是标注4所指的位置。这里,注意一下,第一个item的长度是四个字节,使用55 00 00 00来表示,换算为十进制就是85个字节,实际上接下来有122个字节,这里我感觉应该是7A 00 00 00。接下来的item都是正常,这里注意,内部也同样包含了一个SQ,内部的SQ的长度也是用FF FF FF FF表示的,这里的第一个item的长度文件内记为10 00 00 00,也就是16个字节,通过观察,确实是16个字节的长度,这样也可以进一步证明,标识2的位置55 00 00 00是错误的。或者,我理解错了,大家一起探讨。

4 文件二进制数据

隐式小端

下面给的一个例子是隐式,小端的例子。可见GroupTag(7FE0)和ElementTag(0010),在实际二进制排列中是e07f 1000的二进制;0x00080000=524288个字节=2Byte512512DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

显式,小端

可见GroupTag(7FE0)和ElementTag(0010),VR:OW 缺省两个字节 ,VL: 0X00 08 00 00=524288个字节=2Byte512512
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言

JpegLossLess 二进制存储方式 小端 显式

DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言
DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点,java,json,开发语言文章来源地址https://www.toymoban.com/news/detail-775577.html

到了这里,关于DICOM 文件中,VR,VL,SQ,图像二进制的几个注意点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux查看二进制文件

    hexdump 、 hd 、 od 、 xxd hexdump 、 hd 可以使用16进制、10进制、8进制、 ascii 码的形式查看文件。 执行 就会看到hd其实只是hexdump的一个软链接。 使用 man hexdump ,可以查看 hexdump 的各种参数。 length and offset 参数后面可以跟后缀KiB(=1024)、MiB(=1024 1024),依此类推GiB、TiB、PiB、

    2024年02月08日
    浏览(52)
  • Python读写二进制文件

    Python 读写文件的二进制数据需要使用到struct模块,进行C/C++与Python数据格式的转换。 struct模块中最常用的函数为pack和unpack,用法如下: 函数 return explain pack(fmt,v1,v2…) string 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. pack_into(fmt,buffer,offset,v1,v2…) No

    2024年02月08日
    浏览(47)
  • 【VSCode】查看二进制文件

    1.安装插件Hex Editor 2.打开二进制文件 3.执行Hex Editor命令

    2024年02月13日
    浏览(45)
  • Java中读取二进制文件

    读写二进制文件常用的类有DataInputStream和DataOutputStream。         利用DataInputStream类读二进制文件,其实与利用FileInputStream类读文本文件及其相似,也要用到FileInputStream类关联二进制文件。具体操作步骤如下:         1)导入相关的类                 import ja

    2023年04月08日
    浏览(42)
  • VBA下载二进制文件,文本读写

    这里使用了vba如下两个对象: Microsoft.XMLHTTP :文件读写,可读写二进制,可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开,读取到的内容可能会出现乱码,可以使用该对象打开;前期绑定添加引用: Microsoft ActiveX Data Objects 2.8 Microsoft.XMLHTTP :发送请求并获得返回,

    2024年02月16日
    浏览(66)
  • Base64转二进制文件流以及转File、图片转Base64、二进制流转Base64

    1、Base64转二进制文件流 方法一: 调用示例: 方法二: 调用示例:  2、Base64转File 方法一: 调用示例: 方法二: 调用示例: 补充: 3、图片转Base64 调用示例: 4、二进制流转Base64 方法一: 调用示例: 方法二: 调用示例: 5、补充 5.1 atob() atob()  对经过 base-64 编码的字符

    2024年02月04日
    浏览(70)
  • Java 压缩多个文件为zip包(中间不生成临时文件,直接压缩为zip二进制流),以及解压zip包二进制流为文件

    这篇博客将提供俩种方法, 提前生成要压缩的多个文件,然后读取文件夹多层或一层去遍历压缩zip包 直接用原始文件名称及二进制流,压缩返回zip包二进制流,中间不生成冗余文件; 很明显方法2更优一些; 解压zip文件或者zip文件流验证; 压缩俩个文件到zip包,并分别解析

    2024年02月06日
    浏览(55)
  • Unity 如何导入二进制Spine文件

    总是忘记Spine导出二进制到Unity的设置,记录一下。 TIP 此教程只满足URP渲染管线与Linear颜色空间的需求 纹理打包器也修改一下拓展名(日常操作) 修改图集扩展名 不要 勾选图集的 预乘Alpha ,勾选 溢出 修改图集扩展名 .atlas.txt 可导出以下几种文件 Default Shader 设置为 Univer

    2024年02月07日
    浏览(40)
  • 5.7:Python如何读取二进制文件?

    随着信息技术的不断发展,二进制数据已经成为了现代计算机应用中不可或缺的一部分。在许多情况下,我们需要读取和处理二进制数据,这些数据可能包括图像、音频、视频、压缩文件等。Python作为一种流行的编程语言,提供了多种方法和库,可以帮助我们读取和处理各种

    2024年02月06日
    浏览(53)
  • 如何使用VSCode来查看二进制文件

    2023年11月6日,周一下午 目录 方法1:安装插件Binary Viewer 然后用vscode打开一个二进制文件,并点击右上角的\\\"HEX\\\" 方法2:安装插件Binary 然后用vscode打开一个二进制文件,并点击右上角的\\\"B\\\" 特点:功能比较完善 然后用vscode打开一个二进制文件,并点击右上角的\\\"HEX\\\" 特点:功能简

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包