Получение пиксельных данных из многокадрового (цветного) файла Dicom. fo-dicom

#c# #dicom #fo-dicom

#c# #dicom #fo-dicom

Вопрос:

В настоящее время, когда я собираю пиксельные данные из этого файла dicom, кажется, что они не соответствуют предоставленному разрешению изображения.

В качестве примера, ширина и высота изображения могут быть: W: 600, H: 430, что заставляет меня думать, что ожидаемый общий размер составит 258 000 элементов, но когда я получаю пиксельные данные, это всего лишь 50104 элемента.

Что меня озадачивает, так это то, что в массиве МЕНЬШЕ элементов, чем разрешение файла. Я ожидал, что если возникнет несоответствие, это будет возможно, потому что все кадры были сгруппированы в один и тот же буфер, и мне, возможно, потребуется разделить пиксельные данные по количеству кадров, но не хватает элементов для покрытия разрешения изображения? Я немного в растерянности.

Пиксельные данные файла dicom предоставляются из этого класса:

https://fo-dicom.github.io/html/cfa9fe02-c413-ea1f-52df-dd1a6f5b71cf.htm

Где каждый пиксель — это байт, который используется для поиска индекса таблицы поиска цветов.

Пример кода

 protected override byte[] GetPixelDataInternal(GrayscalePixelDataU8 pixelData, DicomDataset dicomDataset)
{
    long totalDimensions = pixelData.Width * pixelData.Height;
    DicomPixelData header = DicomPixelData.Create(dicomDataset);

    // These uncompressed framesize matches total dimensions
    Debug.Log($"Uncompressed Frame Size: {header.UncompressedFrameSize}");
    Debug.Log($"GetPixelDataInternal: {pixelData.Width} x {pixelData.Height} Total: {totalDimensions}");

    // pixelData.Data.Length does not match total length
    Debug.Log($"PixelDataLength: {pixelData.Data.Length} ");

    // It says it is not lossy.
    Debug.Log($"IsLossy: {header.IsLossy}");

    // ...
}
 

Желаемое поведение
Открытие и визуализация многокадрового изображения dicom с фотометрической интерпретацией PaletteColor с использованием библиотеки fo-dicom.

Комментарии:

1. Вы уверены, что данные не сжаты?

2. @ChristopherOezbek, как вы проверяете, сжаты ли данные? Я попытался проверить, было ли оно «С потерями», но оно вернуло false. Не уверен, что есть что-то еще, что я должен искать?

3. Я видел, что может быть сжатие RLE? dicom.nema.org/medical/dicom/2016c/output/chtml/part05 / … Я не совсем уверен, как обнаружить или справиться с этим, если это так.

Ответ №1:

Оказывается, это действительно было потому, что синтаксис передачи был RLELossless , и данные необходимо было декодировать.

Смотрите DicomTranscoder из fo-dicom:
https://fo-dicom.github.io/html/f94d5b29-c69f-c0c7-6443-1b001cfc91ec.htm