我目前正在尝试使用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文件中,如第二张图片中所示:
我做对了吗?我甚至不确定我是否正确使用
访问标签 ds[300a,0070]
给了我&#39; SyntaxError:无效的语法&#39;例如,输出作为输出,即使它作为分数组序列存在于文件中。我也知道[3249,1000]以某种方式连接到[3249,1010],显然因为它们是专有标签,它们不能在Matlab中编辑,但有人建议它们可以在python中由于某种原因进行编辑
非常感谢
答案 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属性。