Срез DICOM поврежден при сохранении в формате PNG - PullRequest
0 голосов
/ 01 июля 2019

Я использую SimpleITK для чтения DICOM и сохранения определенного фрагмента в виде файла PNG. Я могу записать новый файл DICOM на диск нормально, и он выглядит как положено. Но всякий раз, когда я пытаюсь сохранить его в любом другом формате, он сильно искажается. Под этим я подразумеваю, что это не похоже на ввод, оно полностью искажено.

Вот код:

        var imageReader = new ImageFileReader();
        imageReader.SetOutputPixelType(PixelIDValueEnum.sitkUInt8);
        var dicomFileNames = ImageSeriesReader.GetGDCMSeriesFileNames(@"D:\Study");
        imageReader.SetFileName(dicomFileNames[255]);
        var image = imageReader.Execute();
        var fileWriter = new ImageFileWriter();
        fileWriter.SetFileName("slice.png");
        fileWriter.Execute(image);

Получение буфера изображения и его использование для создания BitMap страдает той же проблемой. Чтение серии DICOM (моя конечная цель) вместо одного файла и использование трехмерного тома и извлечение фрагмента таким образом также имеет ту же проблему.

Что мне не хватает?

РЕДАКТИРОВАТЬ: Использование PixelIDValueEnum.sitkUInt16 значительно улучшает вывод ImageFileWriter, хотя контрастность отключена и теряет некоторые детали. Я все еще не могу преобразовать буфер в BitMap и сохранить его как PNG, этот код все еще создает поврежденные данные:

        var size = image.GetSize();
        var length = (int)(size[0] * size[1]) * 2;
        var buffer = image.GetBufferAsUInt16();

        var rgbValues = new byte[length];

        Marshal.Copy(buffer, rgbValues, 0, length);

        var newBitmap = new Bitmap((int)image.GetWidth(), (int)image.GetHeight(), (int)image.GetWidth(), PixelFormat.Format16bppArgb1555, buffer);
        newBitmap.Save(@"C:\test.png", ImageFormat.Png);

Я пробовал каждое значение PixelFormat.16bpp* безуспешно, некоторые данные должны быть потеряны, потому что вывод ImageFileWriter более чем на 50% больше, чем при сохранении растрового изображения.

Вот плохой BitMap:

enter image description here

1 Ответ

1 голос
/ 01 июля 2019

Большинство медицинских изображений имеют глубину 16 бит (short или unsigned short), а не 8 бит (sitkUInt8).Попробуйте несколько других форматов пикселей.Если это не поможет, прикрепите извлеченный фрагмент PNG - это позволит получить больше / лучший совет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...