Hi Brian,<br><br>Thanks. <br><br>Last question: If I always use only the &quot;global support&quot; version, that should work for any transform, correct?<br>Except of course it will be slow when using local support transforms with many parameters ...<br>
<br>Do let me know. Thanks for the help.<br><br>Roshni<br><br><br><div class="gmail_quote">On Sat, Aug 18, 2012 at 6:13 PM, brian avants <span dir="ltr">&lt;<a href="mailto:stnava@gmail.com" target="_blank">stnava@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">hi roshni<br>
<br>
short answer --- i hope to flesh out these details some time in the<br>
next few months.<br>
<br>
in the mean time, you may be right but i don&#39;t really follow your<br>
reasoning.   surely, this is my lack of looking at the code.<br>
<br>
did you read the mattes paper?  some relevant assumptions are explained there.<br>
<br>
now that you are familiar with the code, you may try out your<br>
suggestions and let us know how it goes.<br>
<br>
thanks again for looking into this ---<br>
<br>
brian<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
On Sat, Aug 18, 2012 at 5:33 PM, Roshni &lt;<a href="mailto:roshni.b@gmail.com">roshni.b@gmail.com</a>&gt; wrote:<br>
&gt; Hi Brian,<br>
&gt;<br>
&gt; Thanks for your response, but I still have some questions:<br>
&gt;<br>
&gt; Consider a local support transform with parameters \theta = [\theta1,<br>
&gt; \theta2 ... \thetaP].<br>
&gt;<br>
&gt; Then the derivative of each voxel location w.r.t. \|theta will be non zero<br>
&gt; only for a few parameters (due to the local support assumption). However, I<br>
&gt; do not understand how we can get away with &quot;m_LocalDerivativeByParzenBin&quot;<br>
&gt; being of size 4xP. (In<br>
&gt; MattesMutualInformationImageToImageMetricv4GetValueAndDerivativeThreader::BeforeThreadedExecution()<br>
&gt; lines 114-130.)<br>
&gt;<br>
&gt; Is the assumption here that each parameter \theta_p affects only 4 bins in<br>
&gt; the joint &amp; moving-image-marginal PDFs?<br>
&gt; If so, I&#39;m not sure that the assumption holds:<br>
&gt;<br>
&gt; For an arbitrary local support transform, each parameter \theta_p will<br>
&gt; affect all voxels within its region of interest (ROI). So, for instance, if<br>
&gt; the ROI for \theta_p has 2 voxels v_i and v_j, such that v_i contributes to<br>
&gt; bins [k1 k2 k3 k4] and v_j contributes to [k3 k4 k5 k6] in the<br>
&gt; moving-image-marginal PDF, then the derivatives of the joint and marginal<br>
&gt; PDFs w.r.t \theta_p will be non-zero at at-least all six bins [k1 k2 k3 ..<br>
&gt; k6].<br>
&gt;<br>
&gt; Along the same lines, I do not follow how all the results are combined in<br>
&gt; the<br>
&gt; MattesMutualInformationImageToImageMetricv4::ComputeResults() function:<br>
&gt;<br>
&gt; // Apply the pRatio and sum the per-window derivative<br>
&gt;   // contributions, in the local-support case.<br>
&gt;   if( this-&gt;m_ComputeDerivative )<br>
&gt;     {<br>
&gt;     if( this-&gt;HasLocalSupport() )<br>
&gt;       {<br>
&gt;       for( SizeValueType i = 0; i &lt; this-&gt;m_DerivativeResult-&gt;Size(); i++ )<br>
&gt;         {<br>
&gt;         for( SizeValueType bin = 0; bin &lt; 4; bin++ )<br>
&gt;           {<br>
&gt;           // Increment the m_JointPdfIndex1DArray index by bin in order to<br>
&gt; recover<br>
&gt;           // the pRatio at the moving indecies used for each portion of the<br>
&gt; derivative.<br>
&gt;           // Note: in old v3 metric ComputeDerivatives,<br>
&gt; derivativeContribution is subtracted in global case,<br>
&gt;           // but added in &quot;local&quot; (implicit) case. These operations have<br>
&gt; been switched to minimize the metric.<br>
&gt;           SizeValueType pRatioIndex = this-&gt;m_JointPdfIndex1DArray[i] + bin;<br>
&gt;           (*(this-&gt;m_DerivativeResult))[i] -=<br>
&gt; m_LocalDerivativeByParzenBin[bin][i] * this-&gt;m_PRatioArray[pRatioIndex];<br>
&gt;           }<br>
&gt;         }<br>
&gt;       }<br>
&gt;     }<br>
&gt;<br>
&gt; Here again the assumption seems to be that for the &quot;i&quot;th parameter \theta_i,<br>
&gt; only 4 bins are affected and hence only the bin-specific weighting of those<br>
&gt; bins is multiplied before adding the results.<br>
&gt;<br>
&gt; IMHO, m_PRatioArray[][] should be pre-computed and then the derivative<br>
&gt; contributions should be multiplied with the appropriate values before being<br>
&gt; added.<br>
&gt;<br>
&gt; That is,  in<br>
&gt; MattesMutualInformationImageToImageMetricv4GetValueAndDerivativeThreader::ComputePDFDerivatives()<br>
&gt; (lines 373-377)<br>
&gt;<br>
&gt; on line 375:<br>
&gt; *( localSupportDerivativeResultPtr ) +=<br>
&gt; derivativeContribution*m_PRatioArray[fixedImageParzenWindowIndex][pdfMovingIndex]<br>
&gt; ;<br>
&gt; in place of  *( localSupportDerivativeResultPtr ) += derivativeContribution;<br>
&gt;<br>
&gt; Does this make sense or am I missing something completely?<br>
&gt; Please let me know what you think.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Roshni<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Aug 18, 2012 at 12:46 PM, brian avants &lt;<a href="mailto:stnava@gmail.com">stnava@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; hi R<br>
&gt;&gt;<br>
&gt;&gt; yes, a local support transformation only needs a few of the parameters<br>
&gt;&gt; to define a transformation of a given point.    for instance,  the<br>
&gt;&gt; transformation of a point by a discrete displacement field is<br>
&gt;&gt; determined by a small local neighborhood of information.   for<br>
&gt;&gt; transformations of this type, the derivative of a specific parameter<br>
&gt;&gt; only depends upon the support or the local neighborhood that affects<br>
&gt;&gt; it.   one of the main changes in v4 is that you can use the same<br>
&gt;&gt; metros for both local and global support transformations.   the Mattes<br>
&gt;&gt; MI metric originated from this paper:<br>
&gt;&gt;<br>
&gt;&gt;  &quot;PET-CT Image Registration in the Chest Using Free-form Deformations&quot;<br>
&gt;&gt; D. Mattes, D. R. Haynor, H. Vesselle, T. Lewellen and W. Eubank IEEE<br>
&gt;&gt; Transactions in Medical Imaging. Vol.22, No.1, January 2003.<br>
&gt;&gt; pp.120-128<br>
&gt;&gt;<br>
&gt;&gt; but much has changed in the implementation since then and there is<br>
&gt;&gt; currently no technical paper that accurately describes what&#39;s being<br>
&gt;&gt; done, in particular for the local support case.   however, the basic<br>
&gt;&gt; idea is as described above:  just compute the local derivative if your<br>
&gt;&gt; transform has local support.<br>
&gt;&gt;<br>
&gt;&gt; hope this helps,<br>
&gt;&gt;<br>
&gt;&gt; brian<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Aug 17, 2012 at 8:51 PM, Roshni &lt;<a href="mailto:roshni.b@gmail.com">roshni.b@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I am trying to modify &quot;itkMattesMutualInformationMetricv4&quot; but am having<br>
&gt;&gt; &gt; trouble following the logic behind the derivative computations when a<br>
&gt;&gt; &gt; &quot;local<br>
&gt;&gt; &gt; support&quot; transformation is used.<br>
&gt;&gt; &gt; Please could someone explain the basic ideas used?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Also, do local support transforms imply dense transformations with local<br>
&gt;&gt; &gt; support basis functions, e.g. BSpline deformations?<br>
&gt;&gt; &gt; Please help!<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks much,<br>
&gt;&gt; &gt; R<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _____________________________________<br>
&gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt; &gt; <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>