У меня есть два вида данных DICOM, первый работает с моим существующим кодом (на котором я его построил), но я не могу импортировать второй.
Первый стиль имеет папку нижнего уровня со всеми фрагментами от одного сканирования в этой папке (в упорядоченных файлах ".dcm"). Я просто указываю vtk на каталог, используя этот код:
vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetDirectoryName(dicomDirectory.c_str());
reader->Update();
vtkSmartPointer<vtkImageData> sliceData = reader->GetOutput();
double tempIntensity = sliceData->GetScalarComponentAsDouble(x, y, z, 0);
Это не прямой источник (я проверяю размеры и настраиваю повторение и тому подобное). Но короче говоря, это работает ... Я вытащил с помощью этого метода несколько разных томов dicom. (и проверили и обработали получившиеся объемные облака)
Однако это зависит от того, как VTK интерпретирует каталог. Здесь говорится: что есть некоторые подробности о на что способен VT управление (подробное описание, предупреждение) с точки зрения данных DICOM. (Я не уверен, что мои текущие данные нарушают эту спецификацию)
Второй стиль DICOM имеет структуру каталогов, в которой нижний уровень папок называется A-Z, и каждый из них содержит 25 файлов (без суффикса) с именами (в каждой папке) Z01-Z25. Я могу открывать файлы по отдельности, используя:
reader->SetFileName(tempFile.c_str());
Вместо указания каталога. Если я прочитал все 25 в одной из нижних папок, это смесь разных упорядоченных фрагментов из разных сканирований. Я был готов настроить функцию для просмотра всех папок и файлов в каталоге, чтобы найти и собрать все фрагменты, связанные с одним сканированием, но до сих пор мне не удалось найти / надлежащим образом реализовать функцию в vtkDICOMImageReader, чтобы:
A: определить, в каком уникальном наборе серий срезов я нахожусь (метка серии)
ни
B: определить мой текущий номер среза в серии, а также общее количество серий (количество срезов / общее количество срезов в серии)
При необходимости я могу опубликовать дополнительные источники, но в основном я пытался отслеживать все параметры в «reader» и «sliceData» при загрузке фрагментов из разных серий и пока еще не получил ничего, что могло бы предоставить мне вышеуказанные данные. Я предполагаю, что либо я не обновляю должным образом между загрузками срезов, либо не смотрю на правильные параметры объекта.
Мы будем очень благодарны за любую информацию о том, что я делаю неправильно с точки зрения кода, или даже за мое плохое понимание структуры DICOM!
ps: я работаю на c ++, но почти уверен, что использование похоже на Python
vtkDICOMImageReader
, аvtkDICOMReader
) Это намного интереснее для Dicoms, проверьте это здесь: dgobbi.github.io/vtk-dicom/doc/api/directory.html - person MrPedru22   schedule 19.01.2018