Как сохранить серию DICOM raw с помощью VTK

Я пытаюсь прочитать и сохранить в необработанном виде серии DICOM. Во время выполнения программа вылетает и выдается следующая ошибка:

DICOMParser не может разобрать.

Вот мой код:

int main(int argc, char* argv[])
{
// Verify input arguments
std::string folder = "C:/dicom decompress/GM_23/2801/0";

//std::string folder = "C:\\VTK\\vtkdata-5.8.0\\Data\\DicomTestImages";

// Read all the DICOM files in the specified directory.
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();
reader->SetDirectoryName(folder.c_str());
reader->Update();
vtkSmartPointer<vtkImageWriter> writer =  vtkSmartPointer<vtkImageWriter>::New();

writer->SetInputConnection(reader->GetOutputPort());
//  writer->SetFilePrefix(folder.c_str());
writer->SetFilePattern("3d.raw");
writer->Write();
writer->Update();

return EXIT_SUCCESS;
}

1

Решение

Возможно, ваше приложение найдет файл, который не является DICOM, в этом каталоге (учтите, что ваш каталог может также содержать скрытые файлы, например «.DS_Store», если вы работаете на Mac.

Лучший способ, которым я могу придумать, — обработать исключение, касающееся разбора файла.
Глядя на класс vtkDicomImageReader, есть метод, называемый CanReadFile, и кажется, что это обработчик этой ошибки через этот фрагмент:

  bool canRead = this->Parser->IsDICOMFile();
if (canRead)
{
return 1;
}
else
{
vtkErrorMacro("DICOMParser couldn't parse : " << fname);
return 0;
}

Метод защищен, но вы можете получить этот класс и обработать исключение так, как вам удобно.

В качестве дополнительного примечания учтите, что вы также можете избежать появления окна предупреждений VTK, используя

vtkImageData :: GlobalWarningDisplayOff ();

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

Позвольте мне знать, если это помогает.

1

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

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

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