ITK用Hessian3DToVesselnessMeasureImageFilter分割出问题
代码如下:
先是用ITK读进去一些dicom的图片,然后用Hessian3DToVesselnessMeasureImageFilter分割出血管来,程序本身没有太大的问题。
但是,本来我是想读进去100张图片的,但是,每次只能读43张左右,也就是说,从301开始,到343,这样的话,代码可以运行,结果也还好,但是,如果是从301到344的话,那么就会报错,报错如下:
而且每次都是红色的那段报错,求大侠帮帮忙!
#include "itkImage.h"
#include "itkImageSeriesReader.h"
#include "itkImageFileWriter.h"
#include "itkNumericSeriesFileNames.h"
#include "itkGDCMImageIO.h"
#include <Windows.h>
#include "itkShiftScaleImageFilter.h"
#include "itkHessianRecursiveGaussianImageFilter.h"
#include "itkHessian3DToVesselnessMeasureImageFilter.h"
void main()
{
typedef unsigned short PixelType ;
const unsigned int Dimension = 3;
typedef itk::Image<PixelType , Dimension> ImageType ;
typedef itk::ImageSeriesReader<ImageType> ReaderType ;
//there still some parameters can be set
typedef itk::NumericSeriesFileNames NameGeneratorType ;
NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
nameGenerator->SetSeriesFormat("C:\\Users\\zhq\\Desktop\\data\\SNAP_CR\\E403434298\\E403434298S1901I%3d.dcm");
nameGenerator->SetStartIndex(301);
nameGenerator->SetEndIndex(343);
nameGenerator->SetIncrementIndex(1);
ReaderType::Pointer reader = ReaderType::New();
reader->SetImageIO(itk::GDCMImageIO::New());
reader->SetFileNames(nameGenerator->GetFileNames());
reader->Update();
std::cout<<"reader updata"<<std::endl;
typedef itk::Image<double,3> doubleImageType ;
typedef itk::ShiftScaleImageFilter<ImageType,doubleImageType> ShiftFilter ;
ShiftFilter::Pointer filter = ShiftFilter::New();
filter->SetInput(reader->GetOutput());
filter->Update();
std::cout<<"filter updata"<<std::endl ;
typedef itk::HessianRecursiveGaussianImageFilter<doubleImageType> HessianFilterType;
HessianFilterType::Pointer hessianFilter = HessianFilterType::New();
hessianFilter->SetInput(filter->GetOutput());
hessianFilter->Update();
std::cout<<"hessian Filter"<<std::endl ;
//if read 45 files , there is a error
typedef itk::Hessian3DToVesselnessMeasureImageFilter<float> VesselMeasureFilterType ;
VesselMeasureFilterType::Pointer vesselFilter = VesselMeasureFilterType::New();
vesselFilter->SetInput(hessianFilter->GetOutput());
vesselFilter->Update();
std::cout<<"vesselFilter update"<<std::endl;
typedef itk::ImageFileWriter< itk::Image<float,3> > WriterType ;
WriterType::Pointer writer = WriterType::New();
writer->SetInput(vesselFilter->GetOutput());
writer->SetFileName("C:\\Users\\zhq\\Desktop\\mydata.vtk");
writer->Update();
std::cout<<"writer updata"<<std::endl ;
system("pause");
}