Файл DICOMDir поврежден после сохранения с помощью fo-dicom - PullRequest
0 голосов
/ 12 февраля 2019

У меня проблема с добавлением файла в 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, или если это ошибка.

1 Ответ

0 голосов
/ 12 февраля 2019

Вы пытаетесь получить доступ к IconImageSequence (0088,0200), который явно отсутствует.DicomDir содержит только некоторые основные данные изображения.При добавлении изображения в dicomdir вы можете добавить дополнительную информацию.Одна из тех необязательных сведений, которые fo-dicom не добавляет автоматически, - это Icon.DicomDir позволяет содержать небольшую иконку для отображения, если вы хотите быстро отобразить некоторые предварительные просмотры.

На самом деле imageRecord должен содержать всю информацию, которая может вам понадобиться, например, instanceuid или имя файла и т. Д.

Я не знаюНе знаю, почему строка кода работала хорошо, прежде чем вы сохранили файл с fo-dicom.Я предполагаю, что уже был DICOMDIR, созданный с другим приложением, которое включало Icon?затем происходит сбой foreach при достижении новой добавленной записи.

Вы можете либо добавить Icon самостоятельно при добавлении нового экземпляра в DICOMDIR, либо добавить проверку типа «if imageRecord.TryGetSequece (iconImageSequence, outseq) .. "для обработки случаев, когда нет значков.

Я рекомендую добавить проверку в любом случае, потому что вы можете прочитать DICOMDIR со ссылкой на какой-то структурированный отчет, а эти структурированные отчеты неиметь данные пикселей и поэтому не будет иметь включенного значка.

...