Difference between revisions of "2013 Summer Project Week:Investigate Potential Tensor Computation Improvement via Positive Semi-Definite (PSD) Tensor Estimation"
Line 6: | Line 6: | ||
</gallery> | </gallery> | ||
− | == | + | ==Key Investigators== |
− | + | * BWH: Raul San Jose, Carl-Fredrik Westin, Demian Wassermann | |
− | + | * UNC: Marc Niethammer | |
− | + | * UIowa:Hans Johnson, Joy Matsui | |
− | |||
− | |||
− | == | + | ==Background== |
− | + | Tensor estimation in Slicer4 is done by vtkTeemEstimateDiffusionTensor. In the inner loop of this class, the tensor fitting is actually computed by _tenEstimate1TensorSingle (teem/src/ten/estimate.c). The solution that teem takes to deal with negative eigenvalues is to add an isotropic part corresponding to the smallest eigenvalue if the eigenvalue is negative and the flag negEvalShift is On. This flag is part of the tenContext structure that controls the estimation options and, in turn, can be set in the vtk class by means of ShiftNegativeEigenvalues. By default, ShiftNegativeEigenvalues is Off in the constructor. | |
− | + | ||
+ | Long story short, teems shifts the value of the eigenvalues so the most negative eigenvalue becomes zero that it is not what it is exactly done in the PSD constrained paper. I've (Raul) been digging through the old slicer2 repository but I did not find that implementation. I'm sure that we played with it but it never made it to any of the CSV branches !!! (old stuff, as you can see). I recalled that we used to do the correction when computing the scalar quantities rather than at tensor estimation. But, surprise, surprise, I found the code in Slicer4. It is funny how you forget things that you have done. I believe this code has traveled through the time machine of Slicer2, to Slicer3 and now to Slicer4. | ||
− | + | If you check vtkDiffusionTensorMathematics you will find the magic in FixNegativeEigenvaluesMethod | |
− | + | [https://github.com/Slicer/Slicer/blob/master/Libs/vtkTeem/vtkDiffusionTensorMathematics.cxx#L922] | |
− | + | However, if you go to the ExecuteData, this method is commented in favor of applying the same approach that teem applies. I'm sure that this was, at the time, an unconscious decision to be consistent. | |
− | |||
+ | I have to say that this might be a good time to revisit this issue and add some consistency across the code about where to apply this kind of tricks. The PSD trick is only valid under the least-square solution, so it would be the most sense to apply it as an option in vtkTeemEstimationDiffusionTensor when the LS method is selected. I don't know if this can be generalized to the WLS but my experience is that WLS deals with many of this negative eigenvalues oddities when it weights down the noise DWIs. | ||
+ | <div style="margin: 20px;"> | ||
+ | <div style="width: 27%; float: left; padding-right: 3%;"> | ||
+ | <h3>Objective</h3> | ||
+ | '''TODO''' | ||
</div> | </div> | ||
Line 34: | Line 37: | ||
<h3>Approach, Plan</h3> | <h3>Approach, Plan</h3> | ||
− | + | '''TODO''' | |
− | |||
− | |||
</div> | </div> | ||
Line 43: | Line 44: | ||
<h3>Progress</h3> | <h3>Progress</h3> | ||
− | |||
+ | '''TODO''' | ||
</div> | </div> | ||
Line 58: | Line 59: | ||
##Extension -- commandline | ##Extension -- commandline | ||
##Extension -- loadable | ##Extension -- loadable | ||
− | #Other (Please specify) | + | #Other (Please specify) YES, algorithm enhancement |
==References== | ==References== | ||
− | * | + | * [http://lmi.bwh.harvard.edu/papers/pdfs/2006/niethammerEMBS06.pdf On Diffusion Tensor Estimation] |
− | |||
− | |||
− |
Revision as of 21:19, 24 May 2013
Home < 2013 Summer Project Week:Investigate Potential Tensor Computation Improvement via Positive Semi-Definite (PSD) Tensor EstimationKey Investigators
- BWH: Raul San Jose, Carl-Fredrik Westin, Demian Wassermann
- UNC: Marc Niethammer
- UIowa:Hans Johnson, Joy Matsui
Background
Tensor estimation in Slicer4 is done by vtkTeemEstimateDiffusionTensor. In the inner loop of this class, the tensor fitting is actually computed by _tenEstimate1TensorSingle (teem/src/ten/estimate.c). The solution that teem takes to deal with negative eigenvalues is to add an isotropic part corresponding to the smallest eigenvalue if the eigenvalue is negative and the flag negEvalShift is On. This flag is part of the tenContext structure that controls the estimation options and, in turn, can be set in the vtk class by means of ShiftNegativeEigenvalues. By default, ShiftNegativeEigenvalues is Off in the constructor.
Long story short, teems shifts the value of the eigenvalues so the most negative eigenvalue becomes zero that it is not what it is exactly done in the PSD constrained paper. I've (Raul) been digging through the old slicer2 repository but I did not find that implementation. I'm sure that we played with it but it never made it to any of the CSV branches !!! (old stuff, as you can see). I recalled that we used to do the correction when computing the scalar quantities rather than at tensor estimation. But, surprise, surprise, I found the code in Slicer4. It is funny how you forget things that you have done. I believe this code has traveled through the time machine of Slicer2, to Slicer3 and now to Slicer4.
If you check vtkDiffusionTensorMathematics you will find the magic in FixNegativeEigenvaluesMethod [1]
However, if you go to the ExecuteData, this method is commented in favor of applying the same approach that teem applies. I'm sure that this was, at the time, an unconscious decision to be consistent.
I have to say that this might be a good time to revisit this issue and add some consistency across the code about where to apply this kind of tricks. The PSD trick is only valid under the least-square solution, so it would be the most sense to apply it as an option in vtkTeemEstimationDiffusionTensor when the LS method is selected. I don't know if this can be generalized to the WLS but my experience is that WLS deals with many of this negative eigenvalues oddities when it weights down the noise DWIs.
Objective
TODO
Approach, Plan
TODO
Progress
TODO
Delivery Mechanism
This work will be delivered to the NA-MIC Kit as a (please select the appropriate options by noting YES against them below)
- ITK Module
- Slicer Module
- Built-in
- Extension -- commandline
- Extension -- loadable
- Other (Please specify) YES, algorithm enhancement