如何使用 fo-dicom 从嵌套标签序列中删除一个项目?

问题描述 投票:0回答:1

DICOM 文件包含许多组定义为 (fffe,e000) 的标签。

  • “参考光束序列”包含3项; (项目#1、项目#2、项目#3)。

  • 所有物品都有标签(fffe,e000)。

  • 每个项目(fffe,e000)内部都包含附加标签。

  • 如何删除其中一项(fffe,e000)。

如何删除整个 (fffe,e000) item#1 嵌套组?

我试过这个:

for (int i = 0; i < beams; i++)
{
    var items = dicomDataset.GetSequence(DicomTag.BeamSequence).Items[i];
     
    var beamNumber = items.GetSingleValueOrDefault<string>(DicomTag.BeamNumber, "");

    //remove the first seq
    if(beamNumber=="1")
    {
        dicomDataset.Remove(x => x.Tag.Group == 2);
    }
}

但运气不佳。

fo-dicom
1个回答
0
投票

首先,让我们澄清一下术语。 DICOM 数据集具有 DICOM 标签列表。一种类型的标签是序列,例如带有 VR(值表示)的标签

SQ
。 序列是一种“特殊类型的标签”,包含 0-n 个项目,这些项目按其索引进行编号。它们不是标签,而是整个(嵌套)数据集,每个数据集都包含自己的 DICOM 标签列表(可能包括嵌套序列标签)。 项目表示在内部使用 (fffe,e000) 等分隔符,但这是由 DICOM 框架处理的细节,通常不会打扰您。

fo-dicom

中,序列标记值(例如 DICOM 序列)由

DicomSequence

类表示,该类允许通过

Items
属性访问其序列项,表示
DicomDataset
对象的列表。如果您想删除其中一项,您只需处理该列表即可:
var datafile = DicomFile.Open("my_dicom_file.dcm");
var dataset = datafile.Dataset;

// error handling omitted here, you have to check for existence
// of sequence and items
var items = dataset.GetSequence(DicomTag.BeamSequence).Items;

// removes the first sequence item
items.RemoveAt(0);

datafile.Save("my_dicom_file_without_first_beam_sequence_item.dcm");
您可以以类似的方式修改嵌套序列,首先从所需的项目中获取序列标签,然后继续与数据集根中的序列相同的方式(如上所示)。

© www.soinside.com 2019 - 2024. All rights reserved.