尝试编辑私人 dicom 标签

Trying to edit private dicom tag

我目前正在尝试使用 python 中的 pydicom 编辑导致放射治疗出现问题的私人 dicom 标签。 python 有点新手,所以请多多包涵。

dicom 文件正确导入 python;我在第一张图片中附上了命令

的一些输出
ds = dicomio.read_file("xy.dcm")
print(ds)

本returns以下数据: pydicom output

突出显示的标签是我需要编辑的标签。

当尝试

ds[0x10,0x10].value

这给出了正确的输出:

'SABR Spine'

但是,尝试按照

ds[3249,1000]

ds[3249,1000].value

returns 输出如下:

> Traceback (most recent call last):
  File "<pyshell#64>", line 1, in <module>
    ds[3249,1000].value
  File "C:\Users\...\dataset.py", line 317, in __getitem__
    data_elem = dict.__getitem__(self, tag)
KeyError: (0cb1, 03e8)

如果我尝试通过相同的方法访问 [3249,1010],它 returns (0cb1, 03f2) 的 KeyError。

我已经尝试将标签添加到 _dicom_dict.py 文件中,如第二张图片中突出显示的那样:

end of _dicom_dict.py

我做对了吗?我什至不确定我是否正确访问了标签 - 使用

ds[300a,0070]

给我 'SyntaxError: invalid syntax' 作为输出,例如,即使它作为分数组序列存在于文件中。我也知道 [3249,1000] 以某种方式连接到 [3249,1010],显然因为它们是专有标签,所以它们不能在 Matlab 中编辑,但是有人建议它们可以在 python 出于某种原因。

非常感谢

您的 dicomio 查找似乎正在将所有输入转换为十六进制。

你可以试试:

ds[0x3249,0x1000]

这应该可以防止任何强制转换为十六进制。

您显然可以直接以字符串形式访问它们:

ds['3249', '1000']

但是,您的问题是您正在尝试访问嵌套了多层的数据元素。根据顶部的输出,我建议尝试:

first_list_item = ds['300a', '0070'][0]

for item in first_list_item['300c', '0004']:
    print(item['3249','1000'])

本质上,来自顶级数据集对象的数据元素可以是列表或另一个数据集对象。使解析数据变得有点困难,但可能是不可避免的。

查看 this 了解更多信息。

正如 Andrew Guy 在他最后的评论中指出的那样,您需要获取 300a,0070 的第一个序列项。然后从该项目中的 300c,0004 序列中获取第二个序列项目。在那个序列项中,你应该可以得到3249,1000属性。