覆盖 DICOM 中的像素数据时应替换哪些 DICOM UID?

问题描述

我正在尝试从现有的 DICOM 文件(实例)创建一个新的 DICOM 文件(实例),并在其中更改像素数据。

我知道在替换像素数据时我需要更改一些 UID。目前我正在生成 SOPInstanceUIDMediaStorageSOPInstanceUIDReferencedSOPInstanceUID(如果适用)。

是否还有其他一些 UID 需要更改才能获得有效的 DICOM 文件?如果您能指点我在标准中的何处查找此内容,将会很有帮助。

解决方法

以下是关于 UID 唯一性的规范的引用:

唯一标识符 (UID) 提供了唯一标识各种项目的能力。它们保证了多个国家、站点、供应商和设备的唯一性。不同类别的对象、对象的实例和信息实体可以在整个 DICOM 话语领域中相互区分,而与任何语义上下文无关。
PS 3.5 2017a - Data Structures and Encoding - 9 Unique Identifiers (UIDs)

如果您要更改像素数据(将压缩(传输语法)更改为有损或全部覆盖),则必须更改 SOP Instance UID (0008,0018)

关于 Media Storage SOP Instance UID (0002,0003),如您所见,它属于第 2 组,即文件元信息标题。这些标签仅在您将实例序列化到硬盘时出现。这应该与 SOP Instance UID (0008,0018) 具有相同的值。所以,如果你改变一个,你也应该改变另一个。请参考this答案和规范中的以下部分:

C.12.1.1.1 SOP 类 UID、SOP 实例 UID
SOP 类 UID 和 SOP 实例 UID 属性是为所有 DICOM IOD 定义的。但是,它们仅在类型等于 1 的复合 IOD 中编码。参见第 C.1.2.3 节。编码后,它们应等于 DIMSE 服务和文件元信息头中的各自属性(请参阅 PS3.10 媒体存储)。
PS3.3 2021a - Information Object Definitions - C.12.1.1.1

Referenced SOP Instance UID (0008,1155) 是对其他实例的引用。这取决于您是否需要根据您的情况进行更改;一般不需要。请参阅 this 答案以了解有关参考 SOP 实例 UID 的更多详细信息。

Transfer Syntax UID (0002,0010) 需要根据您应用的新传输语法进行更改。在覆盖像素数据时,如果您要更改它,请相应地更改 UID。

SOP Class UID (0008,0016)Media Storage SOP Class UID (0002,0002) 定义了您的 SOP 类。仅仅改变像素数据,你并没有改变它。因此您无需更改此 UID。

Implementation Class UID (0002,0012) 与创建者相关联。无需更改。

关于 Study Instance UID (0020,000D)Series Instance UID (0020,000E) 的决定取决于您的用例。这取决于您希望用户如何处理您新创建的实例。例如,在为 Study 创建报告时,许多实现不会更改 Study IUID,而是会创建新系列(即新系列 IUID)。

详情请参考以下回答:
https://stackoverflow.com/a/46316162/5779732
https://stackoverflow.com/a/53775161/5779732

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...