c++ - 未使用 ITK 正确读取 DICOM 图像系列

标签 c++ dicom vtk medical itk

我想读取一系列 DICOM 图像,并使用 ITK 将它们转换为 3D 图像。我遵循文档中的示例:“Examples/IO/DicomSeriesReadImageWrite2.cxx”。但我仍然遇到问题,我解决了一些,但我想听听任何提示!

问题出在下划线的代码行上,代码就在下面,而且不是那么长。它编译,变量 ‘seriesItr’ 的值为 = "1.2.392.200036.9116.2.6.1.48.1214834239.1284941923.42443543.0512512"。但是变量‘seriesEnd’是一个空指针!我究竟做错了什么?感谢您的提前帮助!

// Reading a 2D DICOM Series and Writing a Volume 
  ReaderType::Pointer reader = ReaderType::New();

  ImageIOType::Pointer dicomIO = ImageIOType::New();
  reader->SetImageIO( dicomIO );
  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
  nameGenerator->SetUseSeriesDetails( true ); 

  std::string folder;
  folder = "C:\\Documents and Settings\\GTTS\\Mis documentos\\Visual Studio 2008\\Projects\\Reg_mono3D\\Reg_mono3D\\DICOM_SERIES\\T\\";
  nameGenerator->SetDirectory(folder);

  const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();
  SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();
  ***SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();***
  while( seriesItr != seriesEnd )
  {
        std::cout << seriesItr->c_str() << std::endl;
        seriesItr++;
  }

  std::string seriesIdentifier;
  seriesIdentifier = seriesUID.begin()->c_str();
  FileNamesContainer fileNames;
  fileNames = nameGenerator->GetFileNames( seriesIdentifier );

  reader->SetFileNames( fileNames );

  try
  {
        reader->Update();
  }
  catch (itk::ExceptionObject &ex)
  {
        cout << ex << std::endl;
  }

最佳答案

图像是否可能不 100% 合规?许多工具包的容错能力都不是很好,而且似乎 90% 的供应商都没有 100% 合规。我会尝试通过 DCMtk 工具 dcmconv 运行图像来“转换”文件。我在引号中使用 Convert 是因为我经常使用与当前完全相同的设置来运行文件,因为 dcmconv 将以 100% 兼容的方式导出拷贝。

有关 dcmconv 的信息可以在这里找到:http://support.dcmtk.org/docs/dcmconv.html

关于c++ - 未使用 ITK 正确读取 DICOM 图像系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8310924/

相关文章:

C++删除数组中的最后一个符号

c++ - 如何在不使用命名空间 std 的情况下从文件中读取

matlab - 在不修改字典的情况下在matlab中写入Private Dicom数据

python - 使用vtk将3D切片转换为2D图像

c++ - 如何将 vtkImageData 转换为 cv::Mat?

c++ - 访问 map 元素

java - 创建 Dicom 图像

image-processing - dcm2pnm、dcmj2pnm和dcml2pnm之间的区别

python - 更改边界框的大小

c++ - 为什么以下 C++ 代码中存在内存泄漏?