Получение «DicomTag не поддерживает значения» при попытке получить DicomDataset

2

После обновления до fo-dicom 4.0 я начал получать DicomDataException: 'DicomTag doesn't support values' при попытке получить DicomDataset из файла DICOMDIR.

Код выглядит следующим образом:

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)
            {
                //this is the problematic line
                var dicomDataset = imageRecord.GetValue<DicomSequence>(DicomTag.IconImageSequence, 0).Items.First();
                //more stuff
            }
        }
    }
}

С предыдущей версией (3.?) Я делал var dicomImage = imageRecord.Get<DicomSequence>(DicomTag.IconImageSequence).Items.First(); и это сработало очень хорошо, но после обновления я получал предупреждение об устаревании, поэтому я изменил его на рекомендованный метод, который был GetValue.

Как я могу получить набор данных, используя текущую версию fo-dicom?

  • 3
    Из этого изменения видно, что Get<DicomSequence> должен стать вызовом GetSequence , а не GetValue : github.com/fo-dicom/fo-dicom/commit/…
  • 0
    @BenVoigt Да, после еще нескольких копаний я решил проблему с помощью GetSequence; Я думаю, я застрял, потому что сообщение об исключении было недостаточно ясно (по крайней мере, для меня). Я собирался написать это как ответ, но, если вы победили меня, вы могли бы рекламировать свой комментарий на «Ответить», чтобы я мог пометить его как таковой. Спасибо
Показать ещё 1 комментарий
Теги:
dicom
fo-dicom

1 ответ

3
Лучший ответ

Наконец, после изучения проблем Gitter и GitHub в fo-dicom (и, как @BenVoight упоминалось и в комментариях), я обнаружил, что в 4.0 мы должны использовать GetSequence(DicomTag.IconImageSequence) вместо GetValue<DicomSequence>(DicomTag.IconImageSequence): при извлечении последовательностей будет использоваться метод GetValue. Было добавлено несколько других методов Get, таких как GetValueOrDefault, GetValues<T> вместо GetValue<T[]> и другие, что можно увидеть в тесте набора данных проекта.

Кроме того, в качестве следствия я также обнаружил еще одну несовместимость API в версии 4.0 относительно предыдущей версии (я опубликую ее здесь на случай, если кто-то обновится и потерян в изменениях): при работе с DicomImage мы не должны получать доступ к его .Dataset чтобы получить значения, потому что это также устарело. Вместо этого мы должны сохранить ссылку на набор данных, из которого был создан DicomImage, чтобы получить значения тегов.

  • 0
    Рад, что вы нашли ответ сами. При желании вы можете принять свой собственный ответ. Это помогает будущим читателям. Кроме того, рассмотрите возможность упоминания @BenVoigt в своем ответе, чей комментарий полезен.
  • 0
    Спасибо @AmitJoshi. Собирался, но ТАК говорит мне подождать 24 часа (5 осталось на данный момент), прежде чем принять мой собственный ответ. Я не думал упомянуть Бена на нем, однако, будет делать в обновлении

Ещё вопросы

Сообщество Overcoder
Наверх
Меню