<DIV>Hi all,</DIV>
<DIV>I try to combine registration example: ImageRegistration2 and 9 to perform an CenteredAffine+MutualInfo registration.</DIV>
<DIV>The code bellow compile well, but when I try with: BrainT1SliceBorder20.png and BrainProtonDensitySliceR10X13Y17S12.png I have the following error:</DIV>
<DIV>&nbsp;</DIV>
<DIV>---------------</DIV>
<DIV>Initial Transform Parameters<BR>[1, 0, 0, 1, -1.00276e+008, -4.25387e+008, 4.90708e+007, 3.85172e+008]<BR>ExceptionObject caught !</DIV>
<DIV>itk::ExceptionObject (00FCFD30)<BR>Location: "Unknown"<BR>File: D:\InsightToolkit-1.8.1\Code\Algorithms\itkMutualInformationImageToImageMetric.txx<BR>Line: 155<BR>Description: itk::ERROR: MutualInformationImageToImageMetric(012F4780): All the sampled point mapped to outside of the moving image</DIV>
<DIV>-----------------</DIV>
<DIV>&nbsp;</DIV>
<DIV>-&gt;The Typedef is set to float since Images are unsigned chart is it the problem ? </DIV>
<DIV>If I change the initialisation of the CenteredTransformInitializer as:</DIV>
<DIV>&nbsp;initializer-&gt;SetFixedImage(&nbsp; fixedImageReader-&gt;GetOutput() );<BR>&nbsp; initializer-&gt;SetMovingImage( movingImageReader-&gt;GetOutput() );</DIV>
<DIV>There is no error, but the after 9 iterations it stop with a wrong image results....</DIV>
<DIV>&nbsp;</DIV>
<DIV>Is it just a problem of initial typeddef for my fixed and moved image ?</DIV>
<DIV>&nbsp;</DIV>
<DIV>thanks,</DIV>
<DIV>&nbsp;</DIV>
<DIV>lagaffe</DIV>
<DIV>&nbsp;</DIV>
<DIV>---------------------------------------------------------------------------------------------------------------------</DIV>
<DIV>/*<BR>* Code from ImageRegistration2 and ImageRegistration9 <BR>*/</DIV>
<DIV>#include "itkImageRegistrationMethod.h"<BR>//#include "itkMeanSquaresImageToImageMetric.h"<BR>#include "itkMutualInformationImageToImageMetric.h"<BR>#include "itkNormalizeImageFilter.h"<BR>#include "itkDiscreteGaussianImageFilter.h"</DIV>
<DIV>#include "itkLinearInterpolateImageFunction.h"<BR>#include "itkRegularStepGradientDescentOptimizer.h"<BR>#include "itkImage.h"</DIV>
<DIV><BR>#include "itkCenteredTransformInitializer.h"<BR>#include "itkCenteredAffineTransform.h"<BR>#include "itkImageFileReader.h"<BR>#include "itkImageFileWriter.h"</DIV>
<DIV>#include "itkResampleImageFilter.h"<BR>#include "itkCastImageFilter.h"<BR>#include "itkSquaredDifferenceImageFilter.h"<BR>#include "itkCommand.h"<BR>class CommandIterationUpdate : public itk::Command <BR>{<BR>public:<BR>&nbsp; typedef&nbsp; CommandIterationUpdate&nbsp;&nbsp; Self;<BR>&nbsp; typedef&nbsp; itk::Command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Superclass;<BR>&nbsp; typedef itk::SmartPointer&lt;Self&gt;&nbsp; Pointer;<BR>&nbsp; itkNewMacro( Self );<BR>protected:<BR>&nbsp; CommandIterationUpdate() {};<BR>public:<BR>&nbsp; typedef itk::RegularStepGradientDescentOptimizer&nbsp;&nbsp;&nbsp;&nbsp; OptimizerType;<BR>&nbsp; typedef&nbsp;&nbsp; const OptimizerType&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp; OptimizerPointer;</DIV>
<DIV>&nbsp; void Execute(itk::Object *caller, const itk::EventObject &amp; event)<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; Execute( (const itk::Object *)caller, event);<BR>&nbsp; }</DIV>
<DIV>&nbsp; void Execute(const itk::Object * object, const itk::EventObject &amp; event)<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; OptimizerPointer optimizer = <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dynamic_cast&lt; OptimizerPointer &gt;( object );<BR>&nbsp;&nbsp;&nbsp; if( typeid( event ) != typeid( itk::IterationEvent ) )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; optimizer-&gt;GetCurrentIteration() &lt;&lt; "&nbsp;&nbsp; ";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; optimizer-&gt;GetValue() &lt;&lt; "&nbsp;&nbsp; ";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; optimizer-&gt;GetCurrentPosition() &lt;&lt; std::endl;<BR>&nbsp; }<BR>};</DIV>
<DIV><BR>int main( int argc, char *argv[] )<BR>{<BR>&nbsp; if( argc &lt; 4 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Missing Parameters " &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "Usage: " &lt;&lt; argv[0];<BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "&nbsp;&nbsp; fixedImageFile&nbsp; movingImageFile " &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "&nbsp;&nbsp; outputImagefile&nbsp; [differenceOutputfile] [differenceBeforeRegistration] " &lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "&nbsp;&nbsp; [stepLength] [maxNumberOfIterations] "&lt;&lt; std::endl;<BR>&nbsp;&nbsp;&nbsp; return 1;<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp; const&nbsp;&nbsp;&nbsp; unsigned int&nbsp;&nbsp;&nbsp; Dimension = 2;<BR>&nbsp; typedef&nbsp; float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PixelType;</DIV>
<DIV>&nbsp; typedef&nbsp;&nbsp; float&nbsp;&nbsp;&nbsp;&nbsp; InternalPixelType;<BR>&nbsp; typedef itk::Image&lt; InternalPixelType, Dimension &gt; InternalImageType;</DIV>
<DIV>&nbsp; typedef itk::Image&lt; PixelType, Dimension &gt;&nbsp; FixedImageType;<BR>&nbsp; typedef itk::Image&lt; PixelType, Dimension &gt;&nbsp; MovingImageType;<BR>&nbsp; <BR>&nbsp; typedef itk::CenteredAffineTransform&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dimension&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; TransformType;<BR>&nbsp; typedef itk::RegularStepGradientDescentOptimizer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OptimizerType;<BR>&nbsp; /*<BR>&nbsp; typedef itk::MeanSquaresImageToImageMetric&lt;
 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingImageType &gt;&nbsp;&nbsp;&nbsp; MetricType;<BR>&nbsp; */<BR>&nbsp;typedef itk::MutualInformationImageToImageMetric&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType,
 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType &gt;&nbsp;&nbsp;&nbsp; MetricType;<BR>&nbsp; typedef itk:: LinearInterpolateImageFunction&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingImageType,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp; InterpolatorType;<BR>&nbsp; typedef itk::ImageRegistrationMethod&lt;
 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingImageType &gt;&nbsp;&nbsp;&nbsp; RegistrationType;</DIV>
<DIV>&nbsp; MetricType::Pointer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metric&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = MetricType::New();<BR>&nbsp; OptimizerType::Pointer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; optimizer&nbsp;&nbsp;&nbsp;&nbsp; = OptimizerType::New();<BR>&nbsp; InterpolatorType::Pointer&nbsp;&nbsp; interpolator&nbsp; = InterpolatorType::New();<BR>&nbsp; RegistrationType::Pointer&nbsp;&nbsp; registration&nbsp; = RegistrationType::New();<BR>&nbsp; TransformType::Pointer&nbsp; transform = TransformType::New();</DIV>
<DIV><BR>&nbsp; registration-&gt;SetMetric(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; metric&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<BR>&nbsp; registration-&gt;SetOptimizer(&nbsp;&nbsp;&nbsp;&nbsp; optimizer&nbsp;&nbsp;&nbsp;&nbsp; );<BR>&nbsp; registration-&gt;SetInterpolator(&nbsp; interpolator&nbsp; );<BR>&nbsp; registration-&gt;SetTransform( transform );</DIV>
<DIV>&nbsp; metric-&gt;SetFixedImageStandardDeviation(&nbsp; 0.4 );<BR>&nbsp; metric-&gt;SetMovingImageStandardDeviation( 0.4 );<BR>&nbsp; metric-&gt;SetNumberOfSpatialSamples( 50 );</DIV>
<DIV>&nbsp; typedef itk::ImageFileReader&lt; FixedImageType&nbsp; &gt; FixedImageReaderType;<BR>&nbsp; typedef itk::ImageFileReader&lt; MovingImageType &gt; MovingImageReaderType;<BR>&nbsp; FixedImageReaderType::Pointer&nbsp; fixedImageReader&nbsp; = FixedImageReaderType::New();<BR>&nbsp; MovingImageReaderType::Pointer movingImageReader = MovingImageReaderType::New();<BR>&nbsp; fixedImageReader-&gt;SetFileName(&nbsp; argv[1] );<BR>&nbsp; movingImageReader-&gt;SetFileName( argv[2] );</DIV>
<DIV>typedef itk::NormalizeImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; FixedNormalizeFilterType;</DIV>
<DIV>&nbsp; typedef itk::NormalizeImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; MovingNormalizeFilterType;</DIV>
<DIV>&nbsp; FixedNormalizeFilterType::Pointer fixedNormalizer = <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedNormalizeFilterType::New();</DIV>
<DIV>&nbsp; MovingNormalizeFilterType::Pointer movingNormalizer =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingNormalizeFilterType::New();<BR>&nbsp;<BR>&nbsp; typedef itk::DiscreteGaussianImageFilter&lt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternalImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 InternalImageType<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; GaussianFilterType;<BR>&nbsp; <BR>&nbsp; GaussianFilterType::Pointer fixedSmoother&nbsp; = GaussianFilterType::New();<BR>&nbsp; GaussianFilterType::Pointer movingSmoother = GaussianFilterType::New();</DIV>
<DIV>&nbsp; fixedSmoother-&gt;SetVariance( 2.0 );<BR>&nbsp; movingSmoother-&gt;SetVariance( 2.0 );<BR>&nbsp;<BR>&nbsp; fixedNormalizer-&gt;SetInput(&nbsp; fixedImageReader-&gt;GetOutput() );<BR>&nbsp; movingNormalizer-&gt;SetInput( movingImageReader-&gt;GetOutput() );</DIV>
<DIV>&nbsp; fixedSmoother-&gt;SetInput( fixedNormalizer-&gt;GetOutput() );<BR>&nbsp; movingSmoother-&gt;SetInput( movingNormalizer-&gt;GetOutput() );</DIV>
<DIV>&nbsp; registration-&gt;SetFixedImage(&nbsp;&nbsp;&nbsp; fixedSmoother-&gt;GetOutput()&nbsp;&nbsp;&nbsp; );<BR>&nbsp; registration-&gt;SetMovingImage(&nbsp;&nbsp; movingSmoother-&gt;GetOutput()&nbsp;&nbsp; );<BR>&nbsp; <BR>&nbsp; fixedNormalizer-&gt;Update();<BR>&nbsp; registration-&gt;SetFixedImageRegion( <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fixedNormalizer-&gt;GetOutput()-&gt;GetBufferedRegion() );</DIV>
<DIV><BR>&nbsp; typedef itk::CenteredTransformInitializer&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TransformType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingImageType &gt;&nbsp; TransformInitializerType;<BR>&nbsp; TransformInitializerType::Pointer initializer = TransformInitializerType::New();<BR>&nbsp; initializer-&gt;SetTransform(&nbsp;&nbsp; transform );<BR>&nbsp; /*<BR>&nbsp;
 initializer-&gt;SetFixedImage(&nbsp; fixedImageReader-&gt;GetOutput() );<BR>&nbsp; initializer-&gt;SetMovingImage( movingImageReader-&gt;GetOutput() );<BR>*/<BR>&nbsp;<BR>&nbsp; initializer-&gt;SetFixedImage(&nbsp; fixedSmoother-&gt;GetOutput() );<BR>&nbsp; initializer-&gt;SetMovingImage( movingSmoother-&gt;GetOutput() );</DIV>
<DIV>&nbsp; initializer-&gt;MomentsOn();<BR>&nbsp; initializer-&gt;InitializeTransform();<BR>&nbsp; std::cout &lt;&lt; "Initial Transform Parameters " &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; transform-&gt;GetParameters() &lt;&lt; std::endl;<BR>&nbsp; <BR>// -----------------------<BR>&nbsp; registration-&gt;SetInitialTransformParameters( <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transform-&gt;GetParameters() );</DIV>
<DIV><BR>&nbsp; double translationScale = 1.0 / 1000.0;<BR>&nbsp; if( argc &gt; 8 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; translationScale = atof( argv[8] );<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;typedef OptimizerType::ScalesType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OptimizerScalesType;<BR>&nbsp; OptimizerScalesType optimizerScales( transform-&gt;GetNumberOfParameters() );</DIV>
<DIV>&nbsp; optimizerScales[0] =&nbsp; 1.0;<BR>&nbsp; optimizerScales[1] =&nbsp; 1.0;<BR>&nbsp; optimizerScales[2] =&nbsp; 1.0;<BR>&nbsp; optimizerScales[3] =&nbsp; 1.0;<BR>&nbsp; optimizerScales[4] =&nbsp; translationScale;<BR>&nbsp; optimizerScales[5] =&nbsp; translationScale;<BR>&nbsp; optimizerScales[6] =&nbsp; translationScale;<BR>&nbsp; optimizerScales[7] =&nbsp; translationScale;</DIV>
<DIV>&nbsp; optimizer-&gt;SetScales( optimizerScales );<BR>&nbsp; double steplength = 0.1;</DIV>
<DIV>&nbsp; if( argc &gt; 6 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; steplength = atof( argv[6] );<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV><BR>&nbsp; unsigned int maxNumberOfIterations = 300;</DIV>
<DIV>&nbsp; if( argc &gt; 7 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; maxNumberOfIterations = atoi( argv[7] );<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp; optimizer-&gt;SetMaximumStepLength( steplength ); <BR>&nbsp; optimizer-&gt;SetMinimumStepLength( 0.001 );<BR>&nbsp; optimizer-&gt;SetNumberOfIterations( maxNumberOfIterations );<BR>&nbsp; optimizer-&gt;MinimizeOn();<BR>&nbsp; CommandIterationUpdate::Pointer observer = CommandIterationUpdate::New();<BR>&nbsp; optimizer-&gt;AddObserver( itk::IterationEvent(), observer );<BR>try <BR>&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp; registration-&gt;StartRegistration(); <BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp; catch( itk::ExceptionObject &amp; err ) <BR>&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; "ExceptionObject caught !" &lt;&lt; std::endl; <BR>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; err &lt;&lt; std::endl; <BR>&nbsp;&nbsp;&nbsp; return -1;<BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp; OptimizerType::ParametersType finalParameters = <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 registration-&gt;GetLastTransformParameters();</DIV>
<DIV>&nbsp; const double finalRotationCenterX = finalParameters[4];<BR>&nbsp; const double finalRotationCenterY = finalParameters[5];<BR>&nbsp; const double finalTranslationX&nbsp;&nbsp;&nbsp; = finalParameters[6];<BR>&nbsp; const double finalTranslationY&nbsp;&nbsp;&nbsp; = finalParameters[7];</DIV>
<DIV>&nbsp; const unsigned int numberOfIterations = optimizer-&gt;GetCurrentIteration();<BR>&nbsp; const double bestValue = optimizer-&gt;GetValue();<BR>&nbsp; // Software Guide : EndCodeSnippet</DIV>
<DIV><BR>&nbsp; // Print out results<BR>&nbsp; //<BR>&nbsp; std::cout &lt;&lt; "Result = " &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; " Center X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = " &lt;&lt; finalRotationCenterX&nbsp; &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; " Center Y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = " &lt;&lt; finalRotationCenterY&nbsp; &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; " Translation X = " &lt;&lt; finalTranslationX&nbsp; &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; " Translation Y = " &lt;&lt; finalTranslationY&nbsp; &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; " Iterations&nbsp;&nbsp;&nbsp; = " &lt;&lt; numberOfIterations &lt;&lt; std::endl;<BR>&nbsp; std::cout &lt;&lt; " Metric value&nbsp; = " &lt;&lt; bestValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; std::endl;<BR>&nbsp; typedef itk::ResampleImageFilter&lt;
 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MovingImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType &gt;&nbsp;&nbsp;&nbsp; ResampleFilterType;</DIV>
<DIV>&nbsp; TransformType::Pointer finalTransform = TransformType::New();</DIV>
<DIV>&nbsp; finalTransform-&gt;SetParameters( finalParameters );</DIV>
<DIV>&nbsp; ResampleFilterType::Pointer resample = ResampleFilterType::New();</DIV>
<DIV>&nbsp; resample-&gt;SetTransform( finalTransform );<BR>&nbsp; resample-&gt;SetInput( movingImageReader-&gt;GetOutput() );</DIV>
<DIV>&nbsp; FixedImageType::Pointer fixedImage = fixedImageReader-&gt;GetOutput();</DIV>
<DIV>&nbsp; resample-&gt;SetSize(&nbsp;&nbsp;&nbsp; fixedImage-&gt;GetLargestPossibleRegion().GetSize() );<BR>&nbsp; resample-&gt;SetOutputOrigin(&nbsp; fixedImage-&gt;GetOrigin() );<BR>&nbsp; resample-&gt;SetOutputSpacing( fixedImage-&gt;GetSpacing() );<BR>&nbsp; resample-&gt;SetDefaultPixelValue( 100 );<BR>&nbsp; <BR>&nbsp; typedef&nbsp; unsigned char&nbsp; OutputPixelType;</DIV>
<DIV>&nbsp; typedef itk::Image&lt; OutputPixelType, Dimension &gt; OutputImageType;<BR>&nbsp; <BR>&nbsp; typedef itk::CastImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputImageType &gt; CastFilterType;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; typedef itk::ImageFileWriter&lt; OutputImageType &gt;&nbsp; WriterType;</DIV>
<DIV><BR>&nbsp; WriterType::Pointer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writer =&nbsp; WriterType::New();<BR>&nbsp; CastFilterType::Pointer&nbsp; caster =&nbsp; CastFilterType::New();</DIV>
<DIV><BR>&nbsp; writer-&gt;SetFileName( argv[3] );</DIV>
<DIV><BR>&nbsp; caster-&gt;SetInput( resample-&gt;GetOutput() );<BR>&nbsp; writer-&gt;SetInput( caster-&gt;GetOutput()&nbsp;&nbsp; );<BR>&nbsp; writer-&gt;Update();</DIV>
<DIV><BR>&nbsp; typedef itk::SquaredDifferenceImageFilter&lt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FixedImageType, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputImageType &gt; DifferenceFilterType;</DIV>
<DIV>&nbsp; DifferenceFilterType::Pointer difference = DifferenceFilterType::New();</DIV>
<DIV>&nbsp; WriterType::Pointer writer2 = WriterType::New();<BR>&nbsp; writer2-&gt;SetInput( difference-&gt;GetOutput() );&nbsp; <BR>&nbsp; </DIV>
<DIV>&nbsp; if( argc &gt; 4 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; difference-&gt;SetInput1( fixedImageReader-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; difference-&gt;SetInput2( resample-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; writer2-&gt;SetFileName( argv[4] );<BR>&nbsp;&nbsp;&nbsp; writer2-&gt;Update();<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV><BR>&nbsp; if( argc &gt; 5 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; writer2-&gt;SetFileName( argv[5] );<BR>&nbsp;&nbsp;&nbsp; difference-&gt;SetInput1( fixedImageReader-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; difference-&gt;SetInput2( movingImageReader-&gt;GetOutput() );<BR>&nbsp;&nbsp;&nbsp; writer2-&gt;Update();<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV><BR>&nbsp; return 0;<BR>}</DIV>
<DIV>&nbsp;</DIV><p>
                <hr size=1>
Créez gratuitement votre Yahoo! Mail avec <font color="red"><b>100 Mo de stockage !</b></font>
<br><a href="http://fr.rd.yahoo.com/mail/taglines/*http://fr.rd.yahoo.com/evt=25917/*http://fr.rd.yahoo.com/mail/mail_taglines_100/default/*http://fr.benefits.yahoo.com/">Créez votre Yahoo! Mail</a><br><br>
<font color="red"><b>Le nouveau Yahoo! Messenger est arrivé !</b></font> Découvrez toutes les nouveautés pour dialoguer instantanément avec vos amis.
<a href="http://fr.rd.yahoo.com/mail/taglines/*http://fr.rd.yahoo.com/evt=26111/*http://fr.rd.yahoo.com/messenger/mail_taglines/default/*http://fr.messenger.yahoo.com">Téléchargez GRATUITEMENT ici !</a>