0

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

dicom 文件正确导入python;我在命令的第一张图片中附加了一些输出

ds = dicomio.read_file("xy.dcm")
print(ds)

这将返回以下数据: pydicom 输出

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

当尝试类似

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

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

_dicom_dict.py 结束

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

ds[300a,0070]

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

非常感谢

4

2 回答 2

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 对象。使解析数据更加困难,但可能是不可避免的。

看看这个以获取更多信息。

于 2016-12-12T02:36:48.963 回答
0

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

于 2016-12-12T17:41:35.867 回答