[Insight-users] 3D affinetransform

Luis Ibanez luis.ibanez at kitware.com
Wed Apr 11 12:44:13 EDT 2007


Hi Antoine:


This:

      "...and did not know what to put in origin,
            so I did set it to 0.0 0.0 0.0"


explains everything.

You cannot simply choose an arbitrary origin for the
resampling grid. The coordinates of that origin are
relevant for the resampling process.

The resampling operation is done in Physical Space
coordinates.

The original image locations is specified by its
origin. From that location you are translating it
to a new origin:

        inputOrigin + translation

Now, imagine the grid of the image that you want
to get as output of the resampling process. If
you arbitrarily decide to place your output grid
in an origin of 0.0,0.0,0.0 location, then this
grid may not overlap at all with the grid of the
translated input image.


Please read the ITK Software Guide.


     http://www.itk.org/ItkSoftwareGuide.pdf

The details of the image resampling process are
explained in Section 6.9.4 "Resample Image Filter"
in pdf-pages: 254-284.

Pay particular attention to figures

   6.43 : pdf-page 260
   6.44 : pdf-page 262
   6.45 : pdf-page 262
   6.46 : pdf-page 263


The key to this process is to map all the images
to a common coordinate system in physical space.



    Regards,


       Luis



---------------------------
Antoine Leimgruber wrote:
> Hello,
> 
> I am using DicomSeriesReadImageWrite2.cxx to read a dicom series.
> Everything goes well with DicomSeriesReadImageWrite2.cxx and my dicom files.
> I am trying to modify ResampleImageFilter3.cxx from a 2D (which works well) to a 3D affinetransform.
> If I insert my 3D version of a translation in DicomSeriesReadImageWrite2.cxx before the writer->Update, then all the pixels of the output image have the value set in SetDefaultPixelValue, even if I set the translation to 0.0 0.0 0.0
> I have checked that spacing and size were right and did not know what to put in origin, so I did set it to 0.0 0.0 0.0
> 
> Here is the code of the translation that I inserted in DicomSeriesReadImageWrite2.cxx 
> 
> Thank you for your help
> 
> Antoine
> 
> 	typedef itk::ResampleImageFilter<ImageType,OutputImageType> FilterType;
> 	FilterType::Pointer filter = FilterType::New();
> 
> 	typedef itk::AffineTransform< double, Dimension >  TransformType;
> 	TransformType::Pointer transform = TransformType::New();
> 
> 	typedef itk::NearestNeighborInterpolateImageFunction< ImageType, double >  InterpolatorType;
> 	InterpolatorType::Pointer interpolator = InterpolatorType::New();
> 	filter->SetInterpolator( interpolator );
> 	
> 	filter->SetDefaultPixelValue( 100 );
> 	
> 	double spacing[ Dimension ];
> 	spacing[0] = 0.3125;//0.6;//0.4283; // pixel spacing in millimeters along X
> 	spacing[1] = 0.3125;//0.6;//0.5350; // pixel spacing in millimeters along Y
> 	spacing[2] = 1.0;//0.6;//0.5350; // pixel spacing in millimeters along Z
> 	filter->SetOutputSpacing( spacing );
> 
> 	double origin[ Dimension ];
> 	origin[0] = 0.0;  // X space coordinate of origin
> 	origin[1] = 0.0;  // Y space coordinate of origin
> 	origin[2] = 0.0;  // Z space coordinate of origin
> 	filter->SetOutputOrigin( origin );
> 
> 	ImageType::SizeType   size;
> 	size[0] = 128;  // number of pixels along X
> 	size[1] = 128;  // number of pixels along Y
> 	size[2] = 20;   // number of pixels along Z
> 	filter->SetSize( size );
> 
> 	filter->SetInput( reader->GetOutput() );
> 	writer->SetInput( filter->GetOutput() );
> 	
> 	TransformType::OutputVectorType translation0;
> 	std::cout << "Please enter X translation translation in millimeters: ";
> 	std::cin >>translation0[0];  // X translation in millimeters
> 	std::cout << "Please enter Y translation translation in millimeters: ";
> 	std::cin >> translation0[1];  // Y translation in millimeters
> 	std::cout << "Please enter Z translation translation in millimeters: ";
> 	std::cin >> translation0[2];  // Z translation in millimeters
> 	transform->Translate( translation0, true);
> 	
> 	filter->SetTransform( transform );	
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 


More information about the Insight-users mailing list