尝试编辑私人 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属性。
我目前正在尝试使用 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属性。