DICOMDir file getting corrupted after save with fo-dicom

Refresh

5 days ago

Views

8 time

0

I'm experiencing an issue with adding a file to a DICOMDir. Based on this example I've successfully created and saved to disk an image from a series. Then, I tried adding that file to the DICOMDIR, so that the Dir references the new file, and, though the saving is successful, when I try to open the DICOMDir and its series again, I get a "Tag: (0088,0200) not found in dataset" exception.

Code is as follows:

                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, [email protected]"Images\{imageFileName}");
                dicomdir.Save(dicomdirPath); //this executes without problems and the DICOMDIR is saved

And this is the series opening method:

                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
                            }
                        }
                    }
                }

I don't know if I'm missing something regarding saving a DICOMDir file, or if it's an error. Thanks for any help you can give me.

1 answers

0

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

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

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

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

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