簡體   English   中英

用fo-dicom保存后DICOMDir文件損壞

[英]DICOMDir file getting corrupted after save with fo-dicom

我在將文件添加到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 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

這是系列的打開方法:

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文件的內容,或者是否出錯。

您嘗試訪問顯然不存在的IconImageSequence(0088,0200)。 DicomDir僅包含圖像的一些主要數據。 將圖像添加到dicomdir時,由您決定是否要添加其他信息。 圖標是fo-dicom不會自動添加的那些可選信息之一。 DicomDir允許包含一個小圖標,以顯示是否要快速顯示一些預覽。

實際上, imageRecord應該包含您可能需要的所有信息,例如instanceuid或filename等。

我不知道為什么在使用fo-dicom存儲文件之前代碼行運行良好。 我假設已經使用其他包含Icon的應用程序創建了DICOMDIR? 然后當您到達新添加的條目時,foreach崩潰。

您可以在將新實例添加到DICOMDIR時自己添加一個Icon,也可以添加“ if imageRecord.TryGetSequece(iconImageSequence,out seq)..”之類的檢查以處理沒有圖標的情況。

我建議還是添加檢查,因為有一天您可能會閱讀DICOMDIR並參考一些結構化報告,並且那些結構化報告沒有像素數據,因此不會包含圖標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM