[ITK-users] Simple Resampling delivers empty image

Michael_A deratwu at hotmail.de
Wed Nov 5 05:40:14 EST 2014


Hello people,

i could need your help regarding resampling. I seem to forget something
small, but important, yet just cant find it...

I have 2 NIFTI Images. One has been written by an ITK resampler, the other
was written by the Softeware "VINCI".
I want to do a squared difference of the images (via ITK filter) yet they
are not in the same direction!
One has:
1 0 0
0 1 0
0 0 1

the other has:
-1 0 0
0 -1 0
0 0 1

so i want to resample the image of the one into the others direction. I flip
it via the FLIP-Filter and then
resample it. But the resampled Image is completely empty! Why?
My code is:

int main(int argc, char **argv)
{
  static const unsigned int    ImageDimension = 3;
  typedef  signed short    PixelType;

  typedef itk::Image< PixelType, ImageDimension >  ImageType;
  //
  //   Read the Fixed and Moving images.
  // 
  typedef itk::ImageFileReader< ImageType  > FixedImageReaderType;
  typedef itk::ImageFileReader< ImageType > MovingImageReaderType;

  FixedImageReaderType::Pointer  fixedImageReader  =
FixedImageReaderType::New();
  MovingImageReaderType::Pointer movingImageReader =
MovingImageReaderType::New();

  fixedImageReader->SetFileName(  argv[1] );
  movingImageReader->SetFileName( argv[2] );

  typedef itk::ImageRegistrationMethod< 
                                    ImageType, 
                                    ImageType >    RegistrationType;
  typedef itk::VersorRigid3DTransform< double > RigidTransformType;
  typedef itk:: LinearInterpolateImageFunction< 
                                    ImageType,
                                    double          >    InterpolatorType;				    
  typedef itk::ResampleImageFilter< ImageType, ImageType >   
ResampleFilterType;
  typedef itk::ImageFileWriter< ImageType >  WriterType;
  WriterType::Pointer writer = WriterType::New(); 

  writer->SetFileName( argv[3]);

  InterpolatorType::Pointer   interpolator  = InterpolatorType::New();
  RigidTransformType::Pointer transform = RigidTransformType::New();
  ResampleFilterType::Pointer resample = ResampleFilterType::New();
  
   typedef itk::FlipImageFilter< ImageType > FilterType;
   FilterType::Pointer filter = FilterType::New();

   typedef FilterType::FlipAxesArrayType FlipAxesArrayType;
   FlipAxesArrayType flipArray;

   flipArray[0] = atoi( argv[4] );

   flipArray[1] = atoi( argv[5] );
   
   flipArray[2] = atoi( argv[6] );

   filter->SetFlipAxes( flipArray );
   filter->SetInput(movingImage);
   filter->Update();
   
  resample->SetTransform( transform );
  resample->SetInterpolator(interpolator);
  resample->SetInput( filter->GetOutput() );
  resample->SetSize(   
fixedImageReader->GetOutput()->GetLargestPossibleRegion().GetSize() );
  resample->SetOutputOrigin(  fixedImageReader->GetOutput()->GetOrigin() );
  resample->SetOutputSpacing( fixedImageReader->GetOutput()->GetSpacing() );
  resample->SetOutputDirection(
fixedImageReader->GetOutput()->GetDirection() );
  resample->SetDefaultPixelValue( 0 );

      try
      {
      resample->Update();
      }
    catch( itk::ExceptionObject & err ) 
      { 
      std::cerr << "ExceptionObject caught !" << std::endl; 
      std::cerr << err << std::endl; 
      return EXIT_FAILURE;
      } 
  
  writer->SetInput(resample->GetOutput());

    std::cout << "Writing Resampled Image..." << std::endl;
    try
      {
      writer->Update();
      }
    catch( itk::ExceptionObject & err ) 
      { 
      std::cerr << "ExceptionObject caught !" << std::endl; 
      std::cerr << err << std::endl; 
      return EXIT_FAILURE;
      } 
      
 return EXIT_SUCCESS;
}


Headers are all included of course. Can somebody help me with this?
Thanks in advance,
Michael




--
View this message in context: http://itk-users.7.n7.nabble.com/Simple-Resampling-delivers-empty-image-tp34867.html
Sent from the ITK - Users mailing list archive at Nabble.com.


More information about the Insight-users mailing list