在 DICOM 文件中创建新的私有标签

问题描述 投票:0回答:1

我目前正在尝试为 Orthanc(DICOM 图像的开源服务器)构建插件。

该插件将是一个查看器,需要一些图像元数据才能正常工作。无法存储在“经典”标签(具有偶数组编号的标签)上的元数据。

免责声明:我们不是医疗组织,只会使用 Dicom 文件来存储我们的数据。这意味着我们的数据隐私不会有任何问题。

我知道私人创作者存储在这些标签上(gggg00xx),其中(gggg是奇怪的并且>=0x0009xx>0x10)并且它预订了一个块( ggggxx00-xxff)为那个私人创作者。 我知道每个组有 240 个私人创作者,每个组中的每个私人创作者都必须是唯一的。

我想知道我必须做什么:

  • 使用任意标签并覆盖任何数据(如果存在)(这似乎并不明智,即使采用完全随机的标签可以降低发生这种情况的风险)
  • 使用任意标签,检查私人创建者是否已在其上,并在这种情况下抛出错误(该文件的下一步是什么?)
  • 使用任意标签,如果已使用,则免费使用下一个(这意味着2个不同的DICOM文件有可能没有相同的私人创建者标签,我该如何处理?)
  • 还有什么吗?

我的用例是,彼此无关的人将发送/接收 Dicom 文件,他们应该能够使用该插件查看它们,没有任何问题。

我找到的每个教程(如这个),只需添加私有数据而无需检查太多。

我必须遵循什么流程才能确保以后不会出现任何问题?

由于我目前在开始开发该插件之前正在学习尽可能多的信息,所以我仍然不知道将使用哪种编程语言和库(C++/DCMTK 或 Python/pydicom)。

dicom pydicom dcmtk orthanc-server
1个回答
0
投票

感谢 MrBeanBremen 的解释,我自己用 pydicom 测试了一个完整的用例。

ds = dicom.Dataset()
block_1 = ds.private_block(0x1001, "Test", create=True)
block_1.add_new(0x01, VR.UL, 42)
block_1.add_new(0x02, VR.SH, "Hello World")
block_1.add_new(0x03, VR.UI, "1.2.3.4.5")

block_2 = ds.private_block(0x1001, "Test_bis", create=True)
block_2.add_new(0x01, VR.UL, 83)
block_2.add_new(0x02, VR.SH, "HelloWorld-bis")
block_2.add_new(0x03, VR.UI, "6.7.8.9")

block_3 = ds.private_block(0x1001, "Test", create=True)
block_3.add_new(0x01, VR.SH, "Changing the data completely")

ds.PixelSpacing = [0.1,0.1]

print(ds)

这是终端上的结果:

(0028, 0030) Pixel Spacing                       DS: [0.1, 0.1]
(1001, 0010) Private Creator                     LO: 'Test'
(1001, 0011) Private Creator                     LO: 'Test_bis'
(1001, 1001) Private tag data                    SH: 'Changing the data completely'
(1001, 1002) Private tag data                    SH: 'Hello World'
(1001, 1003) Private tag data                    UI: 1.2.3.4.5
(1001, 1101) Private tag data                    UL: 83
(1001, 1102) Private tag data                    SH: 'HelloWorld-bis'
(1001, 1103) Private tag data                    UI: 6.7.8.9

这意味着block_1在私有组0x1001中创建了新的私有创建者“Test”。并在 (1001, 1001)、(1001, 1002) 和 (1001, 1003) 处添加 3 个标签。

Block_2,因为它是一个新的私有创建者,将在下一个保留块((1001, 1101),(1001, 1102),(1001, 1103))添加标签

Block_3 不会创建新块(因为私人创建者已经存在于该组内),但会更新该组中的标签。

这意味着框架会自动将您的私人创建者放入您的私人组中。

为了以防万一,我尝试添加 241 个不同的创作者来看看会发生什么。 它只是抛出一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.