G W*_*ner 7 python dicom pydicom
我正在尝试使用 freesurfer 的实用程序将大量 DTI siemens DICOM 转换为 NifTi,dcm2nii但在某些文件上失败,因为它们缺少生成和文件DiffusionGradientDirection tag (0x19,0x100E)所必需的。这并不是说标签没有值,而是它们似乎根本不存在。.bvec.bval
ds[0x19,0x100E] 回溯(最近一次调用):文件“”,第 1 行,文件“/space/jazz/1/users/gwarner/anaconda/lib/python2.7/site-packages/pydicom-0.9 .9-py2.7.egg/dicom/dataset.py”,第 277 行,在getitem data_elem = dict 中。getitem (self, tag) KeyError: (0019, 100e)
我尝试添加它,但出现以下错误:
ds[0x19,0x100E].value = 'yes' 回溯(最近一次调用):文件“”,第 1 行,文件“/space/jazz/1/users/gwarner/anaconda/lib/python2.7/site -packages/pydicom-0.9.9-py2.7.egg/dicom/dataset.py”,第 277 行,在getitem data_elem = dict 中。getitem (self, tag) KeyError: (0019, 100e)
有没有办法可以手动插入这个标签?
要将 pydicom 中的新私有数据元素添加到数据集 ds 中,add_new可以使用以下方法:
ds.add_new(tag, VR, value)
Run Code Online (Sandbox Code Playgroud)
对于这种情况,在 pydicom 的 _private_dict.py 文件中查找私有标签(源自 gdcm 的私有标签信息):
'SIEMENS MR HEADER': {
...
'0019xx0e': ('FD', '3', 'DiffusionGradientDirection', ''),
Run Code Online (Sandbox Code Playgroud)
它是一种重复组类型的标签,其中 xx 可以更改以允许同一类型的多个数据元素。这里 FD 是双精度浮点数,3 是重数(需要三个值)。
因此,在这种情况下,要添加所需的数据元素,应类似于:
ds.add_new(0x19100e, 'FD', [0,1,0]) # I have no idea what this last vector should actually be
Run Code Online (Sandbox Code Playgroud)
然而,正如 malat 指出的那样,还需要有一个私有创建者标签来引入该块,以使文件成为有效的 DICOM。如果它尚不存在,您可能还需要添加它。由于您要将文件转换为另一种格式,因此您可能不关心仅添加单个标签是否有效。
添加数据元素后,您可以使用ds[0x19100e].value = ...原始问题中的方式更改值。
顺便说一句,add_new标准词典中的关键字不需要;对于那些可以直接按名称设置项目,例如ds.OtherPatientIDs='test',即使它尚不存在于数据集中。