为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
手掌心 2022-09-04 17:00:10
我在将文件添加到 DICOMDir 时遇到问题。基于此示例,我已成功创建系列映像并将其保存到磁盘。然后,我尝试将该文件添加到DICOMDIR,以便Dir引用新文件,并且,尽管保存成功,但当我尝试再次打开DICOMDir及其系列时,我得到“标记:(0088,0200)在数据集中找不到”异常。代码如下:var dataset = new DicomDataset();this.FillDataset(dataset); //this function copies several Tag values of an already existing DICOM Series file, such as Patient informationdataset.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 viewervar 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这是串联开场法: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文件的内容,或者是否是错误。
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您尝试访问明显不存在的 IconImageSequence (0088,0200)。DicomDir仅包含图像的一些主要数据。将图像添加到 dicomdir 时,由您来添加其他信息。其中一个可选信息,fo-dicom不会自动添加,是图标。DicomDir允许包含一个小图标,以显示是否要快速显示一些预览。

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

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

在将新实例添加到 DICOMDIR 时,您可以自己添加一个 Icon,也可以添加一个检查,如“if imageRecord.TryGetSequece(iconImageSequence, out seq)..”来处理没有图标的情况。

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


查看完整回答
反对 回复 2022-09-04
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信