对于我的项目,我试图在VS2015(.Net 4.5.2)中使用fo-dicom 3.0.2和C#从DICOM文件中读取放射治疗计划(RT Plan).
感谢DICOM编辑器,我知道存储在不同的值DicomTags,但我无法访问所有Tagseg我正在尝试阅读DicomTag.BeamDose,我知道值不是空的.
string storedfile = file_path + file_name;
Dicom.DicomFile file = Dicom.DicomFile.Open(@storedfile);
MessageBox.Show(file.Dataset.Get<string>(Dicom.DicomTag.BeamDose));
Run Code Online (Sandbox Code Playgroud)
运行代码会抛出一条带有消息的异常:
(300a,0084)在数据集中找不到.
如前所述,我知道它存在,但嵌套在序列中的序列项中.我尝试的下一件事是分析序列,BeamDose存储在哪里.
var NewDataSet = file.Dataset.Get<Dicom.DicomItem>(Dicom.DicomTag.FractionGroupSequence);
Run Code Online (Sandbox Code Playgroud)
但是,处理这个变量的每一次机会都没有让我进入下一级序列.
我应该如何使用fo-dicom从序列中读取嵌套/子DICOM标签?
您查找标记的方式仅在DICOM标记树的最外层次结构中查找.要正确搜索标记,您需要先访问正确的序列,然后再访问相应的项目,然后搜索该项目中的标记.DICOM数据集可能包含可以进一步嵌套的序列(由VR SQ标识).
从这里复制以下内容:
标识为"SQ"的VR应用于数据元素,其值由零个或多个项目组成,其中每个项目包含一组数据元素.SQ提供了一种灵活的编码方案,可用于重复数据元素集的简单结构,或者用于通常称为文件夹的更复杂信息对象定义的编码.SQ数据元素也可以递归使用,以包含多级嵌套结构.
SQ数据元素中存在的项目应为有序集合,其中每个项目可以通过其顺序位置引用.每个项目应隐式分配一个序号位置,从序列中第一个项目的值1开始,并随后的每个项目递增1.序列中的最后一项应具有等于序列中项目数的序数位置.
从这里复制以下内容:
DICOM允许数据集包含其他嵌套数据集,这些数据集被编码为"序列".该结构的要点是允许重复数据组,因此虽然这样的序列通常仅包含单个数据集,但是定义格式使得每个序列由一组数据集组成.当然,这种结构非常适合递归,而一些DICOM IOD如Structured_Reporting和Radiotherapy_Extensions可以使用嵌套5或6深的序列!
序列的格式如下所示:[
足够的理论.以下是如何读取序列中的嵌套标记:
var value = file.Dataset.Get<DicomSequence>(DicomTag.FractionGroupSequence).Items[0].Get<string>(DicomTag.BeamDose);
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此主题.
| 归档时间: |
|
| 查看次数: |
1730 次 |
| 最近记录: |