[Insight-developers] Can someone clarify fractionalAnisotropy
for me ?
Karthik Krishnan
Karthik.Krishnan at kitware.com
Sat Jul 9 19:20:51 EDT 2005
Hi
To re-iterate what was just said. I am talking about the difference between
lines 172-187 vs 189-214. in
http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Common/itkDiffusionTensor3D.txx?annotate=1.6&root=Insight
Thanks
Regards
Karthik
Karthik Krishnan wrote:
> Hi,
>
> Coming back to a thread between Torsten and Simon Warfield a while ago.
> I am having some difficulty with the assumptions where the two
> equations are equivalent.
>
> The definition of FA = sqrt(1.5 * ( \sum_i ( lambda_i - lambda_mean
> )^2 ) / \sum_i ( lambda_i^2 ) )
> as in
> http://splweb.bwh.harvard.edu:8000/pages/papers/martha/DTI_Tech354.pdf
> [lambda = eig(A)].
>
> will be equivalent to FA = sqrt(1.5*sum(sum(N.*N))/sum((sum(D.*D))))
> where N = D - ((1/3)*trace(D)*eye(3,3))
> equation (28) in
> http://lmi.bwh.harvard.edu/papers/pdfs/2002/westinMEDIA02.pdf
>
> only if the eigenvalues of the tensor D are positive.
>
> I have a filter that reconstructs the tensor image from Diffusion
> weighted images and the FA computations on it
> are done using the second equation simply because its much faster
> (avoids the computational expense of the eigen value computation.)
>
> The reconstructed tensor coefficients do not necessarily have positive
> eigen values. I do understand that the sign of the eigen values is
> merely a convention and can be reversed by reversing the sign of the
> eigen vectors. Nevertheless, the equivalence of the two equations
> requires it.
>
> The results are then inconsistent.
> Am I missing something here ? I would appreciate any help.
>
> Thanks
> Regards
> Karthik
>
>
>
>
>> / Torsten Rohlfing wrote:
>
> />/
> />>/
> />>/ Simon Warfield wrote:
> />>/
> />>>>/ The code (purged of numerical safeguards etc) that I don't get
> is />>>>/ this:
> />>>>/
> />>>>/ const RealValueType anisotropy = 3.0 * isp - trace * trace;
> />>>>/ const RealValueType relativeAnisotropySquared =
> />>>>/ static_cast< RealValueType >( anisotropy / ( sqrt( 3.0 )
> * />>>>/ trace ) );
> />>>>/ const RealValueType relativeAnisotropy =
> />>>>/ static_cast< RealValueType >( sqrt( />>>>/
> relativeAnisotropySquared ) );
> />>>>/
> />>>>/ where "isp" is the inner scalar product and "trace" is the
> tensor />>>>/ trace, both as returned by the respective class member
> functions.
> />>>>/
> />>>>/ My problem is with the definition of "anisotropy" above. I
> assume />>>>/ that this is supposed to be the inner product of the
> anisotropic />>>>/ part of the tensor, that is, the inner product of
> (tensor - (trace />>>>/ / 3) * identity). This is a double sum over
> the squares of />>>>/ differences between elements of the original
> tensor and the />>>>/ corresponding elements of (trace/3) times the
> identity tensor.
> />>>/
> />>>/
> />>>/
> />>>/
> />>>/ Check out Equation 27 here:
> />>>/
> http://splweb.bwh.harvard.edu:8000/pages/papers/westin/media2002/Westin_Diffusion_MedAI_2002.pdf
> />>>/
> />>>/ and the definition of the norm at the top of the column.
> />>>/
> />>/ Simon:
> />>/
> />>/ Thank you, but that's exactly my problem - how do you get from
> Eq. 27 />>/ in the Westin paper to the implementation in ITK? The
> Westin equation />>/ is basically the same (except for the sqrt(2)
> factor) to Eq. 14 in />>/ the 1996 JMR(B) paper by Basser and
> Pierpaoli, and their Eq. 10 is />>/ the tensor norm as described in
> the Westin paper. But how do you get />>/ from the numerator in the
> second line of Westin's Eq. 27 to />>/ "3*isp-trace*trace" (or
> isp+1/3*trace*trace, which is basically the />>/ same)?
> />/
> />/
> />/ I think we are allowed to consider the tensor after reorientation
> to />/ the principal axes such that Dij = 0 for i != j. Then trace(D)
> = D11 />/ + D22 + D33.
> />/ The Frobenius norm of
> />/ D - 1/3trace(D)I
> />/ is then the square root of
> />/ \sum_ij (D_ij - k)^2
> />/ for k = 1/3 trace(D) on the diagonal and zero elsewhere
> />/
> />/ Expanding this, we have
> />/ (D_11 - k)^2 + (D_22 - k)^2 + (D_33 - k)^2 + \sum_i != j D_ij^2
> />/ and this last term is 0.
> />/
> />/ Expanding the first three terms, I get:
> />/ D_11^2 + D_22^2 + D_33^2 + 3k^2 - 2k(D11 + D22 + D33)
> />/ = isp + 3k^2 - 2k.3k
> />/ for isp = D_11^2 + D_22^3 + D_33^2
> />/ = isp - 3k^2
> />/ = isp - 3.1/3 trace. 1/3 trace
> />/ = isp - 1/3 trace * trace
> />/
> />/ This is 1/3rd of what ITK is calling 'anisotropy'. I didn't
> actually />/ check the code for what isp is being computed as.
> />/ Does it make sense ?
> />/
> />/
> />>/
> />>/ I assume that the sum of the squared elements is broken up, that
> is, />>/ the differences that make up each element are separated as
> (a-b)^2 -> />>/ (a^2-2ab+b^2), and so sum_i sum_j (a-b)^2 becomes
> sum_ij a^2 - />>/ 2sum_ij ab + sum_ij b^2.
> />>/
> />>/ Then with a_ij==D and b_ij==1/3 trace(D)I, that would give
> />>/
> />>/ sum_ij D_ij^2 - 2/3 trace(D) sum_ij I_ij + (1/3 trace(D))^2
> sum_ij I_ij
> />>/
> />>/ and with the first term the norm of D and I the identity tensor
> we />>/ would have
> />>/
> />>/ |D| - 2 trace(D) + 1/3 trace(D)^2
> />>/
> />>/ So where is the middle part going in ITK?
> />>/
> />>/ Sorry if I am suffering from a mental block here.
> />>/
> />>/ Again, thanks for your help!
> />>/ Torsten
> />>/
> />/
> />/
> /
>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers
>
More information about the Insight-developers
mailing list