Читайте DICOM на C ++ и конвертируйте в OpenCV

Я хотел бы читать изображения DICOM в C ++ и манипулировать ими с помощью opencv.

Мне удалось прочитать изображение dicom с помощью DCMTK, однако я не уверен, как преобразовать его в OpenCV Mat.

Вот то, что я имею до сих пор:

DicomImage DCM_image("test.dcm");
cv::Mat image(int(DCM_image.getWidth()), int(DCM_image.getHeight()), CV_8U, (uchar*)DCM_image.getOutputData(8));

что приводит к следующему:

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

Любая помощь будет принята с благодарностью.

-2

Решение

Основная проблема, которую я вижу сейчас, — это разница в диапазонах значений пикселей (глубины).

AFAIK, DICOM может иметь довольно большую глубину (16 бит), и вы пытаетесь вписаться в CV_8U, который только 8 бит. Ты можешь получить DicomImage глубина экземпляра с использованием DicomImage :: getDepth (), а затем создать cv::Mat с соответствующей глубиной для хранения данных вашего изображения.

Вам также может понадобиться нормализовать данные, чтобы максимально использовать доступный вам диапазон, чтобы на дисплее cv::imshow() будет выглядеть как ожидалось.

Так:

  • Делать DicomImage::getDepth() на вашем DCM_image
  • Создать cv::Mat с достаточной глубиной для хранения ваших данных
  • Масштаб, если необходимо
1

Другие решения

Перед вызовом DicomImage :: getOutputData () для монохромного изображения DICOM необходимо убедиться, что вы выбрали соответствующее преобразование VOI (например, Центр окна & Ширина). Это может быть сделано с помощью DicomImage :: setMinMaxWindow (), DicomImage :: setWindow () и т. Д. См. Документацию DicomImage учебный класс.

Обратите внимание, однако, что DicomImage :: getOutputData () всегда возвращает визуализированные данные пикселей, то есть не оригинальные данные пикселей, которые хранятся в наборе данных DICOM.

0

Вам нужно прочитать тип данных в DICOM-кодировке, конвертируя это в opencv-тип Mat. Документы opencv предоставляют всю информацию в заголовке Mat.

-1
По вопросам рекламы [email protected]