首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DICOMDir文件在使用fo-dicom保存后损坏

DICOMDir文件在使用fo-dicom保存后损坏
EN

Stack Overflow用户
提问于 2019-02-12 11:25:29
回答 1查看 450关注 0票数 1

我在向DICOMDir添加文件时遇到问题。基于this example,我已经成功地创建了一系列图像并将其保存到磁盘上。然后,我尝试将该文件添加到DICOMDIR,以便Dir引用新文件,虽然保存成功,但当我再次尝试打开DICOMDir及其系列时,我得到一个"Tag:(0088,0200) not found in dataset“异常。

代码如下:

代码语言:javascript
复制
var dataset = new DicomDataset();
this.FillDataset(dataset); //this function copies several Tag values of an already existing DICOM Series file, such as Patient information
dataset.Add(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Rgb.Value);
dataset.Add(DicomTag.Rows, (ushort)rows);
dataset.Add(DicomTag.Columns, (ushort)columns);

var pixelData = DicomPixelData.Create(dataset, true);
pixelData.AddFrame(buffer);
var dicomfile = new DicomFile(dataset);
var pathImage = Path.Combine(dirImages.FullName, imageFileName);
dicomfile.Save(pathImage); //Image is saved fine and it's well formed, I've checked opening it with an online DICOM viewer

var dicomdirPath = Path.Combine(studyPath, Constants.DICOMDIRFileName);
var dicomdir = DicomDirectory.Open(dicomdirPath);
dicomdir.AddFile(dicomfile, $@"Images\{imageFileName}");
dicomdir.Save(dicomdirPath); //this executes without problems and the DICOMDIR is saved

这是序列打开的方法:

代码语言:javascript
复制
var dicomDirectory = await DicomDirectory.OpenAsync(dicomdirPath);
foreach (var patientRecord in dicomDirectory.RootDirectoryRecordCollection)
{
    foreach (var studyRecord in patientRecord.LowerLevelDirectoryRecordCollection)
    {
        foreach (var seriesRecord in studyRecord.LowerLevelDirectoryRecordCollection)
        {
            foreach (var imageRecord in seriesRecord.LowerLevelDirectoryRecordCollection)
            {
                var dicomDataset = imageRecord.GetSequence(DicomTag.IconImageSequence).Items.First(); //This line works fine before saving the image in the method above, but throws when opening the same study
                //Load data and series from dataset
            }
        }
    }
}

我不知道我是否遗漏了一些关于保存DICOMDir文件的东西,或者这是一个错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 15:29:57

您试图访问显然不存在的IconImageSequence (0088,0200)。DicomDir只包含图像的一些主要数据。将图像添加到dicomdir时,由您决定是否添加附加信息。fo-dicom不会自动添加的这些可选信息之一是图标。如果你想快速显示一些预览,DicomDir允许包含一个小图标来显示。

实际上,imageRecord应该包含您可能需要的所有信息,比如instanceuid或文件名等。

在您使用fo-dicom存储文件之前,我不知道为什么这行代码工作得很好。我假设已经有一个使用其他应用程序创建的DICOMDIR,其中包括图标?然后,当您到达新添加的条目时,foreach崩溃。

您可以在将新实例添加到DICOMDIR时自己添加图标,也可以添加类似"if imageRecord.TryGetSequece(iconImageSequence,out seq)..“的复选标记。来处理没有图标的情况。

我建议您无论如何都要添加检查,因为您可能会在某一天读到引用了一些结构化报告的DICOMDIR,而这些结构化报告没有像素数据,因此不会包含图标。

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

https://stackoverflow.com/questions/54642388

复制
相关文章

相似问题

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