试图编辑私人dicom标签

时间:2016-12-12 01:00:35

标签: python tags dicom pydicom

我目前正在尝试使用python中的pydicom来编辑导致放射治疗问题的私有dicom标签。这里有点蟒蛇新手所以请耐心等待。

dicom文件正确导入到python中;我已经从命令

中附加了第一张图像中的一些输出
ds = dicomio.read_file("xy.dcm")
print(ds)

这将返回以下数据: pydicom output

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

尝试类似

ds[0x10,0x10].value

这给出了正确的输出:

'SABR Spine'

但是,尝试按照

的方式行事
ds[3249,1000]

ds[3249,1000].value

返回以下输出:

> 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],它将返回KeyError为(0cb1,03f2)。

我已尝试将标记添加到_dicom_dict.py文件中,如第二张图片中所示:

end of _dicom_dict.py

我做对了吗?我甚至不确定我是否正确使用

访问标签

ds[300a,0070]

给了我&#39; SyntaxError:无效的语法&#39;例如,输出作为输出,即使它作为分数组序列存在于文件中。我也知道[3249,1000]以某种方式连接到[3249,1010],显然因为它们是专有标签,它们不能在Matlab中编辑,但有人建议它们可以在python中由于某种原因进行编辑

非常感谢

2 个答案:

答案 0 :(得分:1)

看起来您的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'])

本质上,顶级Dataset对象中的数据元素可以是列表或另一个Dataset对象。使解析数据变得更难,但可能是不可避免的。

有关详细信息,请查看this

答案 1 :(得分:0)

正如安德鲁·盖伊在上一次评论中指出的那样,你需要获得300a,0070的第一个序列项目。然后从该项目中的300c,0004序列中获取第二个序列项。在那个序列项中,您应该能够获得3249,1000属性。