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

2023-12-13 06:28

本文主要是介绍DICOM 文件中,VR,VL,Sequence,图像二进制的几个注意点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

1. 传输语法

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

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

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字节由数据长度决定

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

3. Sequence二进制文件编码

3.1. 显式长度

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

  • 再看另外一个例子2,这个可以大家自己分析一下
    在这里插入图片描述

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

在这里插入图片描述
以下是一个西门子CT产生的dicom文件片段,我个人感觉这个文件是错误的。
在这里插入图片描述
大家可以看到标注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个字节=2Byte512512在这里插入图片描述

显式,小端

可见GroupTag(7FE0)和ElementTag(0010),VR:OW 缺省两个字节 ,VL: 0X00 08 00 00=524288个字节=2Byte512512
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于DICOM 文件中,VR,VL,Sequence,图像二进制的几个注意点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/487416

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

SpringMVC入参绑定特别注意

1.直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则失效。 @RequestMapping("test2")@ResponseBodypublic DBHackResponse<UserInfoVo> test2(String id , String name){UserInfoVo userInfoVo = new UserInf

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

Verybot的几个视频

1、Verybot的运动控制                 http://v.youku.com/v_show/id_XNjYxNjg4MTM2.html           2、Verybot比较初步的网络视频监控           http://v.youku.com/v_show/id_XNjYxNjkyMjg0.html           3、V

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在