<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div id="yiv818105912"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit; -x-system-font: none;" valign="top">Hello everybody, <br><br>I was wondering if anyone could help me with a 2D
multi-modality registration. I have four images obtained from SEM and I
need to register the three moving images with one fixed image. I have
three transform parameters. The images are taken from different angles,
therefore they behave as if they were taken from different imaging
modalities. Since I'm new to itk, I was trying to learn the basics of
registration by running the example on image registration that uses
mutual information metric and gradientdescent optimizer. However, the
example uses tranlation transform and since I have shearing in my image
I need to use affine transform. Therefore, I changed the code and tried
to use affine transform instead of translation transform. Now the code
doesnt work and I do not know what I'm doing wrong here. Could you
please give me some comments on this. Here is the code: <br>
<br>#include "itkImageRegistrationMethod.h"<br>#include "itkTranslationTransform.h"<br>#include "<div class="ii gt"> itkMutualInformationImageToIma geMetric.h"<br>#include " itkLinearInterpolateImageFunct ion.h"<br>
#include "itkGradientDescentOptimizer.. h"<br>#include "itkImage.h"<br>#include "itkNormalizeImageFilter.h"<br>#include " itkDiscreteGaussianImageFilter .h"<br>#include "itkImageFileReader..h"<br>
#include "itkImageFileWriter.h"<br>#include "itkResampleImageFilter.h"<br>#include "itkCastImageFilter.h"<br>#include "itkCheckerBoardImageFilter.h"<br>#include "itkTIFFImageIO.h"<br>
#include " itkCenteredTransformInitialize r.h"<br>#include "itkAffineTransform.h"<br><br><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&nbsp; itk::SmartPointer&lt;Self&gt;&nbsp; Pointer;<br>&nbsp; itkNewMacro( Self );<br>protected:<br>&nbsp; CommandIterationUpdate() {};<br>public:<br>&nbsp; typedef&nbsp;&nbsp; itk::GradientDescentOptimizer&nbsp; &nbsp;&nbsp;&nbsp; OptimizerType;<br>
&nbsp; typedef&nbsp;&nbsp; const OptimizerType&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OptimizerPointer;<br><br>&nbsp; void Execute(itk::Object *caller, const itk::EventObject &amp; event)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Execute( (const itk::Object *)caller, event);<br>&nbsp;&nbsp;&nbsp; }<br><br>
&nbsp; void Execute(const itk::Object * object, const itk::EventObject &amp; event)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OptimizerPointer optimizer = <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dynamic_cast&lt; OptimizerPointer &gt;( object );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( ! itk::IterationEvent(). CheckEvent( &amp;event ) )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&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>
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; // Print the angle for the trace plot<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vnl_matrix&lt;double&gt; p(2, 2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p[0][0] = (double) optimizer-&gt;GetCurrentPosition( )[0];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p[0][1] = (double) optimizer-&gt;GetCurrentPosition( )[1];<br>
&nbsp;&nbsp;&nbsp</td></tr></table><br>