Считайте изображение 3D Dicom с помощью DCMTK и конвертируйте его в OpenCV Mat - PullRequest
0 голосов
/ 09 января 2020

У меня есть трехмерное изображение dicom, которое [512,512,5] (строки, столбцы, срезы). Я хочу прочитать его с помощью DCMTK toolkit и преобразовать его в OpenCV Mat объект. Изображение представляет собой 16-битное без знака int.

Мой вопрос: Кто-нибудь знает правильный способ преобразования этого изображения в объект Mat? Как правильно прочитать все фрагменты по методу getOutputData?

1 Ответ

1 голос
/ 09 января 2020

Основываясь на комментариях @Alan Birtles, есть возможность указать кадр, который вы хотите прочитать по методу getOutputData. После прочтения каждого кадра вы просто объединяете объекты Mat в один Mat.

Я написал этот код, чтобы получить весь том:

DicomImage *image = new DicomImage(file);

// Get the information
unsigned int nRows = image->getHeight();
unsigned int nCols = image->getWidth();
unsigned int nImgs = image->getFrameCount();

vector <Mat> slices(nImgs);

// Loop for each slice
for(int k = 0; k<nImgs; k++){

    (Uint16 *) pixelData = (Uint16 *)(image->getOutputData(16 /* bits */,k /* slice */));

    slices[k] = Mat(nRows, nCols, CV_16U, pixelData).clone();

}

Mat img;

// Merge the slices in a single img
merge(slices,img);

cout << img.size() << endl;
cout << img.channels() << endl;

// Output:
// [512 x 512]
// 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...