59 inline DiffusionTensor3D<TOutput> operator()
60 (
const DiffusionTensor3D<TInput> & tensorA )
62 DiffusionTensor3DExtended<double> tensorDouble( tensorA );
63 Matrix<double, 3, 3> B;
64 Matrix<double, 3, 3> A;
65 Matrix<double, 3, 3> transpose;
66 Matrix<double, 3, 3> H;
67 Matrix<double, 3, 3> mat;
68 A = tensorDouble.GetTensor2Matrix();
69 transpose = A.GetTranspose();
70 B = (A + transpose) / 2;
71 transpose = B.GetTranspose();
73 tensorDouble.SetTensorFromMatrix(H);
77 tensorDouble.ComputeEigenAnalysis( eigenValues, eigenVectors );
78 for(
int i = 0; i < 3; i++ )
80 mat[i][i] = sqrt(eigenValues[i]);
82 eigenVectors = eigenVectors.GetTranspose();
83 H = eigenVectors * mat * eigenVectors.GetInverse();
85 tensorDouble.SetTensorFromMatrix( mat );
86 tensorDouble.ComputeEigenAnalysis( eigenValues, eigenVectors );
89 for(
int i = 0; i < 3; i++ )
93 eigenVectors = eigenVectors.GetTranspose();
94 tensorDouble.SetTensorFromMatrix<
double>( eigenVectors * mat * eigenVectors.GetInverse() );
96 DiffusionTensor3D<TOutput> tensor;
97 for(
int i = 0; i < 6; i++ )
99 tensor[i] = ( TOutput ) tensorDouble[i];