[Insight-users] Re: Jacobian determinant image of the deformation field

Luis Ibanez luis.ibanez at kitware.com
Wed Jul 11 15:23:11 EDT 2007


Hi Mathieu,


Adding a flag is also a good option, and it is
relatively straight forward.

However, it leave us still with the documentation
and file-name-confusing issue.


One advantage of having the base class is that
we can use it for creating pixelwise filters
that depend on neighborhoods of Vector fields.
A type of filters for which presumably we could
find many variants.


Adding a flag is a very tempting quick-and-dirty
solution...



     Any Votes ?




   Luis



--------------------------
Mathieu De Craene wrote:
> On Wed, 2007-07-11 at 12:07 -0400, Luis Ibanez wrote:
> 
>>Hi Mathieu, Tom,
>>
>>Thanks a lot for pointing out this problem.
>>
>>We are trying to figure out what is the best way to fix this issue.
>>
>>
>>
>>There seems to be three issues here:
>>
>>
>>1) Mismatch documentation between the filter
>>    and its actual computation
>>
>>2) Whether the filter is intended for
>>
>>    Deformation field versus Transformation
>>
>>    Deformation field will have zeros for an identity transformation
>>    while the Transformation will have an identity matrix.
>>
>>3) Misnaming of the filter.
>>
>>
>>---
>>
>>About (1), we should just remove the comment about adding 1.0
>>to the output, since it is not really equivalent to adding
>>the Identity matrix to the Jacobian before computing the
>>determinant.
>>
>> From Tom comment, it seems that the filter name is actually
>>correct, so (3) may not be an issue.
>>
>>The filter is indeed intended for a Deformation field and
>>not for a transformation. This seems to be clear in the
>>documentation.
>>
>>
>>However, an additional filter is needed where an Identity
>>matrix is added to the Jacobian before computing the
>>determinant.
>>
>>We could factorize the common code of both filters, and
>>only have to overload the method:
>>
>>
>>        EvaluateAtNeighborhood()
>>
>>
>>So, here are the proposed action items:
>>
>>
>>1) Create a base class X with the current code of the
>>    DeformationFieldJacobianDeterminantFilter.
>>
>>2) Add a class WarpJacobianDeterminantFilter that derives
>>    from X, and overload  EvaluateAtNeighborhood().
>>
>>3) Make DeformationFieldJacobianDeterminantFilter derive
>>    from X too and overload EvaluateAtNeighborhood().
>>
>>4) Remove the comment about adding 1.0 from the documentation
>>    of the DeformationFieldJacobianDeterminantFilter.
>>
>>
>>If that make sense we can log this as a feature request/bug fix
>>in the phpBugTracker.
>>
>>
> 
> 
> 
> 
> Hi Luis.
> 
> 
> This plan is really rigorous but adds a lot of classes to the toolkit.
> What about the dirty solution of having a flag called
> 
>         m_ComputeTransformationJacobian
> 
> 
> that when set to "on" would add 1. on the diagonal of the jacobian
> matrix and when set to "off" (value by default), would not affect the
> behavior of the class.
> 
> 
> 
> Math
> 
> 
>>   Please let us know what you think,
>>
>>
>>
>>      Thanks
>>
>>
>>
>>          Luis
>>
>>
>>----------------------
>>Tom Vercauteren wrote:
>>
>>>Hi Mathieu,
>>>
>>>Just my two cents about it. I do agree with you that the current
>>>implementation is not computing a really meaningful quantity. However,
>>>the current name is misleading. Without adding an Id matrix, it
>>>actually computes the Jacobian of the deformation field, but what we
>>>usually need is the Jacobian of the spatial transformation... In my
>>>code, I have added an itk::WarpJacobianDeterminantFilter to make
>>>things a bit clearer.
>>>
>>>Best,
>>>Tom
>>>
>>>On 9/6/07, Mathieu De Craene <decraene at tele.ucl.ac.be> wrote:
>>>
>>>Hi ITK folks,
>>>
>>>
>>>I found this email on the mailing list
>>>
>>>       
>>>http://public.kitware.com/pipermail/insight-users/2006-August/019246.html
>>>
>>>and I think these two users are right.
>>>
>>>I was wondering if we shouldn't add the following line at line 250 of
>>>itkDeformationFieldJacobianDeterminantFilter.h to correct the problem
>>>
>>>       if (i == j) J[i][j] += 1.;
>>>
>>>
>>>so that we effectively compute
>>>
>>>
>>>       det[ dT/dx ] = det[ I + du/dx ]
>>>
>>>
>>>
>>>Thanks for any comment,
>>>
>>>
>>>
>>>Mathieu
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>>
>>
> 
> 


More information about the Insight-users mailing list