首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用fo-dicom从序列中读取嵌套/子DICOM标记?

如何使用fo-dicom从序列中读取嵌套/子DICOM标记?
EN

Stack Overflow用户
提问于 2017-10-11 14:08:56
回答 1查看 4.6K关注 0票数 2

对于我的项目,我试图从一个包含fo-dicom 3.0.2和C# in VS2015 (.Net 4.5.2)的DICOM文件中读取一个放射治疗计划(RT计划)。

感谢DICOM编辑器,我知道存储在不同DicomTags中的值,但是我无法访问所有的Tag。例如,我试图读取DicomTag.BeamDose,并且知道值不是空的。

代码语言:javascript
复制
string storedfile = file_path + file_name;
Dicom.DicomFile file = Dicom.DicomFile.Open(@storedfile);

MessageBox.Show(file.Dataset.Get<string>(Dicom.DicomTag.BeamDose));

运行代码会引发异常,并带有消息:

(300a,0084)在数据集中找不到。

正如前面提到的,我知道它在那里,但是嵌套在序列中的序列项中。接下来,我尝试分析BeamDose存储的序列。

代码语言:javascript
复制
var NewDataSet = file.Dataset.Get<Dicom.DicomItem>(Dicom.DicomTag.FractionGroupSequence);

但是下一个处理这个变量的机会并没有把我带到一个新的层次。

如何使用fo-dicom从序列中读取嵌套/子DICOM标记?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 14:22:36

您查找标记的方式只在DICOM标记树的最外层层次中查找。要正确搜索标记,您需要先访问正确的序列,然后访问适当的项,然后搜索该项中的标记。DICOM数据集可能包含序列(由VR、SQ识别),这些序列甚至可能被进一步嵌套。

下面是从这里复制的

VR标识的"SQ“应用于数值由零个或多个项目组成的数据元素,其中每个项目包含一组数据元素。SQ提供了一种灵活的编码方案,可用于重复数据元素的简单结构,也可用于对更复杂的信息对象定义(通常称为文件夹)的编码。SQ数据元素也可以递归地用于包含多层嵌套结构。 SQ数据元素中的项目应是有序集合,其中每一项可按其序号位置引用。每一项应隐式地分配序号位置,从序列中第一项的值1开始,并随其后的每一项增加1。序列中的最后一项的序号位置应等于序列中的项目数。

下面是从这里复制的

DICOM允许数据集包含其他嵌套数据集,这些数据集被编码为“序列”。这种结构的目的是允许重复的数据组,因此虽然这些序列通常只包含单个数据集,但是格式的定义使得每个序列都由一组数据集组成。当然,这种结构非常适合递归,一些DICOM IODs,比如Structured_Reporting和Radiotherapy_Extensions,可以使用嵌套5或6深的序列! 序列的格式如下所示:[

理论够多了。以下是如何读取序列中的嵌套标记:

代码语言:javascript
复制
var value = file.Dataset.Get<DicomSequence>(DicomTag.FractionGroupSequence).Items[0].Get<string>(DicomTag.BeamDose);

有关详细信息,请参阅线程。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46690392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档