【问题标题】:ITK imageSeriesReader can not read dicom seriesITK imageSeriesReader 无法读取 dicom 系列
【发布时间】: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


【解决方案1】:

尝试使用“const unsigned int Dimension = 3;”而是“const unsigned int Dimension = 2;”

它对我有用。

【讨论】:

    【解决方案2】:

    我得到了完全相同的错误。 但是我的图像具有所有相同的尺寸,如果我一张一张地阅读它们,我没有错误......仅使用itk.ImageSeriesReader 似乎会删除每个文件的最后一个尺寸......

    有效:

    import itk, numpy
    slices = sorted(filenames)
        for idx, file in enumerate(slices):
            volume.append(itk.GetArrayFromImage(itk.imread(file)))
    return numpy.asarray(volume)
    

    没有:

    import itk, numpy
    slices = sorted(filenames)
    reader = itk.ImageSeriesReader.New(FileNames=slices)
    volume = reader.GetOutput()
    

    并提供错误:

    itk::ERROR: ImageSeriesReader(0x14e81e2d0): Size mismatch! The size of  ./A23780DIATD/A23780DIATD_rec/A23780DIATD__rec0029.bmp is [864, 824] and does not match the required size [864, 1] from file ./A23780DIATD/A23780DIATD_rec/A23780DIATD__rec0029.bmp
    

    (对不起,这是python代码)

    【讨论】:

      【解决方案3】:

      您应该尝试使用reader-&gt;UpdateLargestPossibleRegion(); 而不是reader-&gt;Update();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多