《itk实用demo》-升采样 256---512

版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/rabbitbride/article/details/82422837

升采样 256—512

//函数化    升采样 重置大小
void resize(ImageType::Pointer input,ImageType::Pointer src,ImageType::Pointer* dst)
{
 std::cout <<"----升采样----"<< std::endl;
 typedef itk::ResampleImageFilter<ImageType, ImageType> ResampleImageFilterType;
 ResampleImageFilterType::Pointer resample = ResampleImageFilterType::New();
 resample->SetInput(input);

 typedef itk::AffineTransform<double,3> TransformType;
 TransformType::Pointer transform = TransformType::New();
 resample->SetTransform(transform);

 typedef itk::NearestNeighborInterpolateImageFunction<ImageType,double> InterpolatorType;
 InterpolatorType::Pointer interpolator = InterpolatorType::New();
 resample->SetInterpolator(interpolator);

 resample->SetDefaultPixelValue(0);
 resample->SetSize(src->GetLargestPossibleRegion().GetSize());
 resample->SetOutputSpacing(src->GetSpacing());
 resample->SetOutputOrigin(src->GetOrigin());

 ImageType::DirectionType direction;
 direction.SetIdentity();
 resample->SetOutputDirection(direction);
     try
    {    
       resample->UpdateLargestPossibleRegion();
    }
        catch( itk::ExceptionObject & exp )
    {
      cerr << "Exception caught !" << std::endl;
      cerr << exp << std::endl;
    }
       *dst = resample->GetOutput();
} 
//用法
  ImageType::Pointer dst = ImageType::New();
  resize(castFilter->GetOutput(),original->GetOutput(),&dst); 

  int dims_v[3];
  dims_v[0] = (int)( dst->GetLargestPossibleRegion().GetSize()[0]);
  dims_v[1] = (int)( dst->GetLargestPossibleRegion().GetSize()[1]);
  dims_v[2] = (int)( dst->GetLargestPossibleRegion().GetSize()[2]);
--------------------------------------------------------------------------------

//---------------------------------------------------------------------------------------------
  std::cout <<"----升采样----"<< std::endl;
  typedef itk::ResampleImageFilter<ImageType, ImageType> ResampleImageFilterType;
  ResampleImageFilterType::Pointer resample = ResampleImageFilterType::New();
  resample->SetInput(original_aortic->GetOutput());

  typedef itk::AffineTransform<double,3> TransformType;
  TransformType::Pointer transform = TransformType::New();
  resample->SetTransform(transform);

  typedef itk::NearestNeighborInterpolateImageFunction<ImageType,double> InterpolatorType;
  InterpolatorType::Pointer interpolator = InterpolatorType::New();
  resample->SetInterpolator(interpolator);

  resample->SetDefaultPixelValue(0);

  ImageType::SizeType size;
  size = original_heart->GetOutput()->GetLargestPossibleRegion().GetSize();
  ImageType::SizeType outputSize2;
  outputSize2[0] = size[0];
  outputSize2[1] = size[1];
  outputSize2[2] = size[2];
  resample->SetSize(outputSize2);

  double outputSpacing[3];
  outputSpacing[0] = original_heart->GetOutput()->GetSpacing()[0];
  outputSpacing[1] = original_heart->GetOutput()->GetSpacing()[1];    
  outputSpacing[2] = original_heart->GetOutput()->GetSpacing()[2];
  resample->SetOutputSpacing(outputSpacing);

  double origin[3];
  origin[0] = original_heart->GetOutput()->GetOrigin()[0];
  origin[1] = original_heart->GetOutput()->GetOrigin()[1];
  origin[2] = original_heart->GetOutput()->GetOrigin()[2];
  resample->SetOutputOrigin(origin);

  ImageType::DirectionType direction;
  direction.SetIdentity();
  resample->SetOutputDirection(direction);

猜你喜欢

转载自blog.csdn.net/rabbitbride/article/details/82422837