【发布时间】:2015-05-10 16:50:05
【问题描述】:
我在使用 ITK 读取 DICOM 图像系列时遇到了一些问题。 请看从itk示例中截取的代码。
http://www.itk.org/Doxygen47/html/Examples_2IO_2DicomSeriesReadSeriesWrite_8cxx-example.html
#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkImageSeriesReader.h"
#include "itkImageSeriesWriter.h"
#include <vector>
#include "itksys/SystemTools.hxx"
int main( )
{
typedef int PixelType;
const unsigned int Dimension = 2;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImageSeriesReader< ImageType > ReaderType;
typedef itk::GDCMImageIO ImageIOType;
typedef itk::GDCMSeriesFileNames NamesGeneratorType;
ImageIOType::Pointer gdcmIO = ImageIOType::New();
NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
namesGenerator->SetInputDirectory("/home/co/imageData/DicomTestImages");
const ReaderType::FileNamesContainer & filenames = namesGenerator->GetInputFileNames();
unsigned int numberOfFilenames = filenames.size();
std::cout << numberOfFilenames << std::endl;
for(unsigned int fni = 0; fni<numberOfFilenames; fni++)
{
std::cout << "filename # " << fni << " = ";
std::cout << filenames[fni] << std::endl;
}
ReaderType::Pointer reader = ReaderType::New();
reader->SetImageIO( gdcmIO );
reader->SetFileNames( filenames );
reader->Update();
return 0;
}
程序可以正确输出dicom系列名称。
但是当执行 reader->Update() 时,它说:
terminate called after throwing an instanceof'itk::ExceptionObject'what():
/usr/local/include/ITK4.7/itkImageSeriesReader.hxx:371:
itk::ERROR: ImageSeriesReader(0x99a9af8): Size mismatch! The size of /home/co/imageData/DicomTestImages/MRI.000 is [256, 256] and does not match the required size [256, 1].
为什么要求的图片尺寸必须是[256,1]?
图片系列可以从http://www.vtk.org/Wiki/File:VTK_Examples_StandardFormats_Input_DicomTestImages.zip下载 演示程序出现错误是没有希望的。
【问题讨论】:
-
你用什么ITK版本?
-
该错误表明读取的第一个文件的大小 = [ 256,1] - 因此它期望所有切片都具有该大小。你能再检查一下文件夹吗?抱歉我现在不能尝试代码,但是你链接的数据文件有不同的文件名
标签: c++ input dicom series itk