我目前正在尝试为 Orthanc(DICOM 图像的开源服务器)构建插件。
该插件将是一个查看器,需要一些图像元数据才能正常工作。无法存储在“经典”标签(具有偶数组编号的标签)上的元数据。
免责声明:我们不是医疗组织,只会使用 Dicom 文件来存储我们的数据。这意味着我们的数据隐私不会有任何问题。
我知道私人创作者存储在这些标签上(gggg,00xx),其中(gggg是奇怪的并且>=0x0009和xx>0x10)并且它预订了一个块( gggg,xx00-xxff)为那个私人创作者。 我知道每个组有 240 个私人创作者,每个组中的每个私人创作者都必须是唯一的。
我想知道我必须做什么:
我的用例是,彼此无关的人将发送/接收 Dicom 文件,他们应该能够使用该插件查看它们,没有任何问题。
我找到的每个教程(如这个),只需添加私有数据而无需检查太多。
我必须遵循什么流程才能确保以后不会出现任何问题?
由于我目前在开始开发该插件之前正在学习尽可能多的信息,所以我仍然不知道将使用哪种编程语言和库(C++/DCMTK 或 Python/pydicom)。
感谢 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 个不同的创作者来看看会发生什么。 它只是抛出一个错误。