一个非常简单的pydicom示例涉及读取文件,然后输出Series Time
import pydicom
info = pydicom.dcmread("file.dcm")
print(info.SeriesTime)因此,对于已被读取的对象,点表示法可以替代更复杂的构造,如print(info[pydicom.tag.Tag((0x0008, 0x0031))])或print(info[0x0008, 0x0031])。好的。
现在,pydicom只支持读取一些标签,以提高性能:
info = pydicom.dcmread("file.dcm", specific_tags=['SeriesTime', ])我不喜欢在代码中使用字符串常量。那么在上面的例子中,'SeriesTime'的可读性有哪些呢?specific_tags=[pydicom.tag.Tag((0x0008, 0x0031)), ]的可读性并不是特别好。
理想情况下,我希望能够通过点符号访问标记字典,比如pydicom.allTags.SeriesTime,但我似乎找不到它。
发布于 2019-03-23 07:42:37
这是获取 pydicom 字典的另一种相对简单的方法:
from pydicom.datadict import tag_for_keyword
from pydicom.tag import Tag
class DottedDcmDict(object):
def __getattr__(self, name):
tag = tag_for_keyword(name)
if tag:
return Tag(tag)
raise AttributeError("Not a valid DICOM identifier")
dd = DottedDcmDict()
print(dd.SeriesTime)
(0008, 0031)发布于 2019-03-22 19:22:47
您要查找的是数据字典。在Pydicom中,您可以在以下位置找到它:pydicom.datadict.DicomDictionary,但这是一个元组字典,并不适合通过点表示法访问。例如,要检索“SeriesTime”,您必须编写pydicom.datadict.DicomDictionary[524337][4],它既不可读,也不能保证在更新Pydicom时保持有效(尽管我怀疑它是否会经常更改)。
你可以用一个命名的元组自己来实现:
from collections import namedtuple
import pydicom
def get_dict_as_namedtuple(pdict):
# some keywords are empty, check for those
keywords_list = [pdict[i][4] for i in pdict if pdict[i][4].strip() != '']
Keywords = namedtuple('Keywords', keywords_list)
# unpack the list as positional arguments
return Keywords(*keywords_list)
dicom_tags = get_dict_as_namedtuple(pydicom.datadict.DicomDictionary)
print(dicom_tags.SeriesTime)
# prints 'SeriesTime'或者我最初的不太优雅的解决方案(tab自动补全不适用于我的解决方案):
(通过this answer找到的Fabric codebase中的AttributeDict示例代码)
import pydicom
class AttributeDict(dict):
def __getattr__(self, key):
try:
return self[key]
except KeyError:
# to conform with __getattr__ spec
raise AttributeError(key)
def __setattr__(self, key, value):
self[key] = value
def first(self, *names):
for name in names:
value = self.get(name)
if value:
return value
def get_data_dict(pydicom_data_dict):
data_dict = AttributeDict({})
for entry in pydicom_data_dict:
keyword = pydicom_data_dict[entry][4]
data_dict[keyword] = keyword
return data_dict
pydicom_data_dict = get_data_dict(pydicom.datadict.DicomDictionary)
print(pydicom_data_dict.SeriesTime)
#prints 'SeriesTime'https://stackoverflow.com/questions/55287711
复制相似问题