[Insight-users] itkMattesMI: LocalSupport Transforms

Roshni roshni.b at gmail.com
Sat Aug 18 17:33:44 EDT 2012


Hi Brian,

Thanks for your response, but I still have some questions:

Consider a local support transform with parameters \theta = [\theta1,
\theta2 ... \thetaP].

Then the derivative of each voxel location w.r.t. \|theta will be non zero
only for a few parameters (due to the local support assumption). However, I
do not understand how we can get away with "m_LocalDerivativeByParzenBin"
being of size 4xP. (In
MattesMutualInformationImageToImageMetricv4GetValueAndDerivativeThreader::BeforeThreadedExecution()
lines 114-130.)

Is the assumption here that each parameter \theta_p affects only 4 bins in
the joint & moving-image-marginal PDFs?
If so, I'm not sure that the assumption holds:

For an arbitrary local support transform, each parameter \theta_p will
affect all voxels within its region of interest (ROI). So, for instance, if
the ROI for \theta_p has 2 voxels v_i and v_j, such that v_i contributes to
bins [k1 k2 k3 k4] and v_j contributes to [k3 k4 k5 k6] in the
moving-image-marginal PDF, then the derivatives of the joint and marginal
PDFs w.r.t \theta_p will be non-zero at at-least all six bins [k1 k2 k3 ..
k6].

Along the same lines, I do not follow how all the results are combined in
the
MattesMutualInformationImageToImageMetricv4::ComputeResults() function:

// Apply the pRatio and sum the per-window derivative
  // contributions, in the local-support case.
  if( this->m_ComputeDerivative )
    {
    if( this->HasLocalSupport() )
      {
      for( SizeValueType i = 0; i < this->m_DerivativeResult->Size(); i++ )
        {
        for( SizeValueType bin = 0; bin < 4; bin++ )
          {
          // Increment the m_JointPdfIndex1DArray index by bin in order to
recover
          // the pRatio at the moving indecies used for each portion of the
derivative.
          // Note: in old v3 metric ComputeDerivatives,
derivativeContribution is subtracted in global case,
          // but added in "local" (implicit) case. These operations have
been switched to minimize the metric.
          SizeValueType pRatioIndex = this->m_JointPdfIndex1DArray[i] + bin;
          (*(this->m_DerivativeResult))[i] -=
m_LocalDerivativeByParzenBin[bin][i] * this->m_PRatioArray[pRatioIndex];
          }
        }
      }
    }

Here again the assumption seems to be that for the "i"th parameter
\theta_i, only 4 bins are affected and hence only the bin-specific
weighting of those bins is multiplied before adding the results.

IMHO, m_PRatioArray[][] should be pre-computed and then the derivative
contributions should be multiplied with the appropriate values before being
added.

That is,  in
MattesMutualInformationImageToImageMetricv4GetValueAndDerivativeThreader::ComputePDFDerivatives()
(lines 373-377)

on line 375:
*( localSupportDerivativeResultPtr ) +=
derivativeContribution*m_PRatioArray[fixedImageParzenWindowIndex][pdfMovingIndex]
;
in place of  *( localSupportDerivativeResultPtr ) += derivativeContribution;

Does this make sense or am I missing something completely?
Please let me know what you think.

Thanks,
Roshni


On Sat, Aug 18, 2012 at 12:46 PM, brian avants <stnava at gmail.com> wrote:

> hi R
>
> yes, a local support transformation only needs a few of the parameters
> to define a transformation of a given point.    for instance,  the
> transformation of a point by a discrete displacement field is
> determined by a small local neighborhood of information.   for
> transformations of this type, the derivative of a specific parameter
> only depends upon the support or the local neighborhood that affects
> it.   one of the main changes in v4 is that you can use the same
> metros for both local and global support transformations.   the Mattes
> MI metric originated from this paper:
>
>  "PET-CT Image Registration in the Chest Using Free-form Deformations"
> D. Mattes, D. R. Haynor, H. Vesselle, T. Lewellen and W. Eubank IEEE
> Transactions in Medical Imaging. Vol.22, No.1, January 2003.
> pp.120-128
>
> but much has changed in the implementation since then and there is
> currently no technical paper that accurately describes what's being
> done, in particular for the local support case.   however, the basic
> idea is as described above:  just compute the local derivative if your
> transform has local support.
>
> hope this helps,
>
> brian
>
>
>
>
> On Fri, Aug 17, 2012 at 8:51 PM, Roshni <roshni.b at gmail.com> wrote:
> > Hi,
> >
> > I am trying to modify "itkMattesMutualInformationMetricv4" but am having
> > trouble following the logic behind the derivative computations when a
> "local
> > support" transformation is used.
> > Please could someone explain the basic ideas used?
> >
> > Also, do local support transforms imply dense transformations with local
> > support basis functions, e.g. BSpline deformations?
> > Please help!
> >
> > Thanks much,
> > R
> >
> >
> > _____________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Kitware offers ITK Training Courses, for more information visit:
> > http://www.kitware.com/products/protraining.php
> >
> > Please keep messages on-topic and check the ITK FAQ at:
> > http://www.itk.org/Wiki/ITK_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.itk.org/mailman/listinfo/insight-users
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20120818/e2a0fefa/attachment.htm>


More information about the Insight-users mailing list