[Insight-developers] SymmetricSecondRankTensor does incorrect matrix PreMultiply and PostMultiply

Kris Zygmunt krismz at sci.utah.edu
Tue May 29 09:43:34 EDT 2012


The fix for this bug is to return a Matrix instead of a  
SymmetricSecondRankTensor, but if you have some math like:

A = g*T*g' where T is a tensor and you know that the result A is a  
tensor, it would be nice to have a way to convert the Matrix that is  
produced by T.PreMultiply(g).PostMultiply(g.GetTranspose()) into a  
Tensor.  A copy constructor or assignment operator may not be ideal as  
they could lead to unintended consequences from accidentally  
converting from a Matrix to a Tensor, but perhaps there could be a  
method with a name like InitFromMatrix so that one could write:

DiffusionTensor3D newT;
newT.InitFromMatrix(A);

I can add this new method under the same gerrit patch  http://review.source.kitware.com/5943 
  .  Is there any preference for the name?  Any reason this shouldn't  
be done?
-Kris


> Hello,
>     While working on some code that does math with DiffusionTensor3D
> pixels, I found that DiffusionTensor3D's parent class
> SymmetricSecondRankTensor returns a SymmetricSecondRankTensor from
> both the PreMultiply(MatrixType m) and the PostMultiply(MatrixType
> m).  This code is in effect saying that a symmetric tensor multiplied
> by any matrix results in a symmetric tensor which is not true!  The
> code needs to be changed to return a Matrix instead of a
> SymmetricSecondRankTensor.  Anyone who is using these PreMultiply and
> PostMultiply methods currently is having important information from
> the lower half of the matrix thrown away and getting incorrect
> computations as a result.
>
> I have added a patch that fixes this bug at http://review.source.kitware.com/5943
>
> -Kris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-developers/attachments/20120529/f7efd7e0/attachment.htm>


More information about the Insight-developers mailing list