<html>
  <head>

  </head>
  <body style="font-style: normal; margin-right: 4px; font-weight: normal; line-height: normal; margin-top: 4px; font-size: 16pt; font-variant: normal; margin-left: 4px; margin-bottom: 1px; font-family: Times New Roman">
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">Hello ITK experts&#44;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">I am using the DeformableRegistration16 example as the basis for a program to register mammo images. &nbsp;In that example there are two observers set up&#44; one for the multi-resolution filter&#44; and one for the demons registration filter. &nbsp;The observers for the demons filter and multi-res filters are both looking for the IterationEvent&#44; so I expect the demons observer to fire at the end of every iteration &#40;currently set to 40 per level&#41;&#44; and the multi-res observer to see the changes in resolution level &#40;4 levels&#41;. &nbsp;I would like to look at the RMS difference at the end of each iteration &#40;mostly for educational purposes&#41; but what I see is that the event does not fire for the demons filter as expected. &nbsp;Instead&#44; it seems to fire only once for each resolution level &#40;i.e. both observers execute the same number of times while the registration is running&#41;.</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">What&#39;s really confusing&#44; is that every once in a while&#44; the demons observer seems to function as I would expect&#44; so I see for example 40 Iteration Events for a given resolution level of the multi res filter. &nbsp;Could this be a bug&#63; &nbsp;Can anyone shed light on how to get this to function properly&#63; &nbsp;The registration itself seems to work fine&#44; though I&#39;m not sure this is the best algorithm to try to register digital mammos with. &nbsp;I am able to get a warped image and the displacement map output back to Matlab&#44; which I am using for my front end interface&#44; and &nbsp;the results are actually not too bad looking&#44; at least to the eye.</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">Thanks for any light that may be shed on this issue.</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">Kent</font>    </p>
<br>      <br>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">In case someone would like to see the code&#44; this is pretty much verbatim from the example:</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// &nbsp;The following section of code implements a Command observer</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// &nbsp;that will monitor the evolution of the registration process.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// &nbsp;This observer has a layer of intelligence&#44; for deciding what</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// &nbsp;MaximumRMS convergence criteria to use at every resolution level.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">//</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">class CommandIterationUpdate : public itk::Command</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">public:</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef &nbsp;CommandIterationUpdate &nbsp;&nbsp;Self&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef &nbsp;itk::Command &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Superclass&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef &nbsp;itk::SmartPointer&lt;Self&gt; &nbsp;Pointer&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;itkNewMacro&#40; Self &#41;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">protected:</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;CommandIterationUpdate&#40;&#41;&#32;&#123;&#125;&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;// define ITK short-hand types</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef short &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PixelType&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef float &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternalPixelType&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef itk::Image&lt; PixelType&#44; 2 &gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageType&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef itk::Image&lt; InternalPixelType&#44; 2 &gt; &nbsp;&nbsp;InternalImageType&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef itk::Vector&lt; float&#44; 2 &gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VectorPixelType&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef itk::Image&lt; VectorPixelType&#44; 2 &gt; &nbsp;&nbsp;&nbsp;&nbsp;DisplacementFieldType&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef itk::DemonsRegistrationFilter&lt; InternalImageType&#44;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;InternalImageType&#44; DisplacementFieldType&gt; &nbsp;RegistrationFilterType&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">public:</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;void Execute&#40;const itk::Object &#42;&#44; const itk::EventObject &amp; &#41;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; &quot;Warning: The const Execute method shouldn&#39;t be called&quot; &lt;&lt; std::endl&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#125;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;void Execute&#40;itk::Object &#42;caller&#44; const itk::EventObject &amp; event&#41;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegistrationFilterType &#42; filter &#61;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dynamic_cast&lt; &nbsp;RegistrationFilterType &#42; &gt;&#40; caller &#41;&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&#40; &#33;&#40;itk::IterationEvent&#40;&#41;.CheckEvent&#40; &amp;event &#41;&#41; &#41;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&#40;filter&#41;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filter-&gt;SetMaximumRMSError&#40;MaxRmsE&#91;RmsCounter&#93;&#41;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; filter-&gt;GetMetric&#40;&#41; &lt;&lt; &nbsp;&quot; &nbsp;RMS Change: &quot; &lt;&lt; filter-&gt;GetRMSChange&#40;&#41; &lt;&lt; std::endl&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; &quot;Level Tolerance&#61; &nbsp;&quot;&lt;&lt;filter-&gt;GetMaximumRMSError &#40;&#41;&lt;&lt;std::endl&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#125;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&#125;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&#125;&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// The following command observer reports the progress of the registration</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// inside a given resolution level.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">//</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">class CommandResolutionLevelUpdate : public itk::Command</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">public:</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef &nbsp;CommandResolutionLevelUpdate &nbsp;&nbsp;Self&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef &nbsp;itk::Command &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Superclass&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;typedef &nbsp;itk::SmartPointer&lt;Self&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;itkNewMacro&#40; Self &#41;&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">protected:</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;CommandResolutionLevelUpdate&#40;&#41;&#32;&#123;&#125;&#59;</font>    </p>
<br>      
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">public:</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;void Execute&#40;itk::Object &#42;caller&#44; const itk::EventObject &amp; event&#41;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;Execute&#40; &#40;const itk::Object &#42;&#41;caller&#44; event&#41;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#125;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;void Execute&#40;const itk::Object &#42;&#44; const itk::EventObject &amp; &#41;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#123;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; &quot;----------------------------------&quot; &lt;&lt; std::endl&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;RmsCounter &#61; RmsCounter &#43; 1&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;std::cout &lt;&lt; &quot;----------------------------------&quot; &lt;&lt; std::endl&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&#125;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&#125;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">//</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;// Create the Command observer and register it with the demons registration filter.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;//</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;CommandIterationUpdate::Pointer observer &#61; CommandIterationUpdate::New&#40;&#41;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;filter-&gt;AddObserver&#40; itk::IterationEvent&#40;&#41;&#44; observer &#41;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">// Create the Command observer and register it with the multi-res registration filter.</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;//</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;CommandResolutionLevelUpdate::Pointer levelobserver &#61; CommandResolutionLevelUpdate::New&#40;&#41;&#59;</font>    </p>
    <p style="margin-top: 0; margin-bottom: 0">
      <font size="5" face="Times New Roman">&nbsp;&nbsp;multires-&gt;AddObserver&#40; itk::IterationEvent&#40;&#41;&#44; levelobserver &#41;&#59;</font>
    </p>
  </body>
</html>