DCMTK C ++: как получить пиксели данных из файлов dicom

Я использую DCMTK для проекта C ++ и хочу получить пиксели из файлов dicom.
Я использовал этот простой пример:

          DicomImage *image = new DicomImage("test.dcm");
if (image != NULL)
{
if (image->getStatus() == EIS_Normal)
{
if (image->isMonochrome())
{
image->setMinMaxWindow();
Uint8 *pixelData = (Uint8 *)(image->getOutputData(8 /* bits */));
if (pixelData != NULL)
{
/* do something useful with the pixel data */
}
}
} else
cerr << "Error: cannot load DICOM image (" <<        DicomImage::getString(image->getStatus()) << ")" << endl;
}
delete image;

в разделе «сделать что-то полезное с данными пикселей», как я могу использовать переменную pixelData для получения пикселей

1

Решение

Прежде всего: вы уже иметь данные пикселей в виде массива беззнаковых символов. Например, вы можете перенести их в 8-битное монохромное растровое изображение и отобразить их на экране. Высота и ширина, необходимые для создания растрового изображения, могут быть получены из объекта DicomImage.

Однако это зависит от того, что вы считаете «чем-то полезным», является ли метод getOutputData () по вашему выбору. Это потому, что getOutputData () фактически является своего рода методом рендеринга. Предполагается, что у вас типичное изображение CT, MR или CR, диапазон оттенков серого уже изменен до 8-битного.

Возможно, вы предпочтете извлечь пиксельные данные в полном диапазоне оттенков серого и применить свои собственные методы рендеринга и обработки. В этом случае я бы посоветовал вам использовать getInterData (), которая возвращает внутренне сохраненные данные пикселей с полным диапазоном серой шкалы. LUT Модальности был применен к промежуточным данным, так что вы получаете инкапсуляцию (класс DiPixel) массива значений, каждое из которых кодирует значение градаций серого, измеренное устройством (например, Единицы Хаунсфилда в случае CT).

DiPixel возвращает эти оттенки серого в виде пустого указателя. Чтобы правильно обрабатывать значения, вам нужно определить их представление (например, Uint8, Sint16, …).

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

2

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

Других решений пока нет …

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