ITK用Hessian3DToVesselnessMeasureImageFilter分割出问题

yingzijuntuan 2013-08-02 10:15:54
代码如下:
先是用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");
}
...全文
746 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
molhui 2015-06-05
  • 打赏
  • 举报
回复
算法很耗费内存,可能是100幅图像需要的内存太大,你机器不够用了
小猪小莫 2014-12-21
  • 打赏
  • 举报
回复
亲,请问下这个程序是你自己写的还是ITK自带的啊?我怎么没在ITK的例子里找到呢?
yingzijuntuan 2013-08-04
  • 打赏
  • 举报
回复
求大侠看看呀。。。。自己再顶,别沉呀。。。。
yingzijuntuan 2013-08-04
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
[quote=引用 3 楼 yingzijuntuan 的回复:] 求大侠看看呀。。。。自己再顶,别沉呀。。。。
不会这个,帮顶,等大神[/quote] thanks,等大神吧。。。。。 大神呀,不要潜水了
max_min_ 2013-08-04
  • 打赏
  • 举报
回复
引用 3 楼 yingzijuntuan 的回复:
求大侠看看呀。。。。自己再顶,别沉呀。。。。
不会这个,帮顶,等大神
yingzijuntuan 2013-08-03
  • 打赏
  • 举报
回复
自己顶一个,别沉呀!!!!
yingzijuntuan 2013-08-02
  • 打赏
  • 举报
回复
nameGenerator->SetStartIndex(301); nameGenerator->SetEndIndex(343);就是这里,读数据,不能读100张 报错的地方如下: typedef itk::Hessian3DToVesselnessMeasureImageFilter<float> VesselMeasureFilterType ; VesselMeasureFilterType::Pointer vesselFilter = VesselMeasureFilterType::New(); vesselFilter->SetInput(hessianFilter->GetOutput()); vesselFilter->Update(); std::cout<<"vesselFilter update"<<std::endl;

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧