Hello,<br><br>I successfully combined an 3D affine transform (as a result of a 3D centred affine registration &quot;ImageRegistration9revised.cxx&quot; ), and then I fed this in as a bulk affine transform to be used with a deformable transformation to register two different subject dicom mri 3d images from two different people. In both cases I used a Mattes Mutual Information metric for multi-modality registration.<br>
<br>I have my original fixed image which I am using as an atlas and my original moving image which is my brain subject. In the code I obtained the mapping of specific points in the brain ventricles from the fixed image atlas to the moving image brain subject as per the code snippet  below (<i><b>I have also attached to this email the affine and deformable registration &quot;.cxx&quot; files and affine transform &quot;.tfm&quot; file</b></i>):<br>
<br><i><b>My confusion is, that I am wondering in reference to this
&quot;mapping from a point in the fixed image to a point in the moving
image&quot;:  Is this mapped point a point in the moving image in its
original unaltered state, or is the mapped point a point in the moving image in a
state that has had the bulk affine transform applied to it, or is the
mapped point a point in the moving image in a state that has had the
bulk affine transform and deformation applied to it?</b></i><br><br>CODE SNIPPET BELOW:<br>// Generate the explicit deformation field resulting from the registration.<br>  if( argc &gt; 6 )<br>    {<br><br>    typedef itk::Vector&lt; float, ImageDimension &gt;  VectorType;<br>
    typedef itk::Image&lt; VectorType, ImageDimension &gt;  DeformationFieldType;<br><br>    DeformationFieldType::Pointer field = DeformationFieldType::New();<br>    field-&gt;SetRegions( fixedRegion );<br>    field-&gt;SetOrigin( fixedImage-&gt;GetOrigin() );<br>
    field-&gt;SetSpacing( fixedImage-&gt;GetSpacing() );<br>    field-&gt;SetDirection( fixedImage-&gt;GetDirection() );<br>    field-&gt;Allocate();<br><br>    typedef itk::ImageRegionIterator&lt; DeformationFieldType &gt; FieldIterator;<br>
    FieldIterator fi( field, fixedRegion );<br><br>    fi.GoToBegin();<br><br>    TransformType::InputPointType  fixedPoint;<br>    TransformType::OutputPointType movingPoint;<br>    DeformationFieldType::IndexType index;<br>
    <br>    VectorType displacement;<br><br>    while( ! fi.IsAtEnd() )<br>      {<br>      index = fi.GetIndex();<br>      field-&gt;TransformIndexToPhysicalPoint( index, fixedPoint );<br>      <br>      movingPoint = transform-&gt;TransformPoint( fixedPoint );<br>
<br>      displacement = movingPoint - fixedPoint;<br>      fi.Set( displacement );<br>      ++fi;<br>      }<br><br>    //added by jd<br>    TransformType::InputPointType  fixedPoint2;<br>    TransformType::OutputPointType movingPoint2;<br>
<br>    //picked a point in right ventricle in atlas (fixed subject)<br>    fixedPoint2[0] = 299.6;<br>    fixedPoint2[1] = 138.7;<br>    fixedPoint2[2] = -104.9;<br><br>    movingPoint2 = transform-&gt;TransformPoint( fixedPoint2 );<br>
<br>    std::cout &lt;&lt; &quot;fixedPoint2[0] = &quot; &lt;&lt; fixedPoint2[0] &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;fixedPoint2[1] = &quot; &lt;&lt; fixedPoint2[1] &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;fixedPoint2[2] = &quot; &lt;&lt; fixedPoint2[2] &lt;&lt; std::endl &lt;&lt; std::endl;<br>
<br>    std::cout &lt;&lt; &quot;movingPoint2[0] = &quot; &lt;&lt; movingPoint2[0] &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;movingPoint2[1] = &quot; &lt;&lt; movingPoint2[1] &lt;&lt; std::endl;<br>    std::cout &lt;&lt; &quot;movingPoint2[2] = &quot; &lt;&lt; movingPoint2[2] &lt;&lt; std::endl;<br>
<br>Thanks,<br>john<br><br>