53 inline DiffusionTensor3D<TOutput>
operator()(
const DiffusionTensor3D<TInput>& tensorA)
56 Matrix<double, 3, 3> B;
57 Matrix<double, 3, 3> A;
58 Matrix<double, 3, 3> transpose;
59 Matrix<double, 3, 3> H;
60 Matrix<double, 3, 3> mat;
62 transpose = A.GetTranspose();
63 B = (A + transpose) / 2;
64 transpose = B.GetTranspose();
70 tensorDouble.ComputeEigenAnalysis(eigenValues, eigenVectors);
71 for (
int i = 0; i < 3; i++)
73 mat[i][i] = sqrt(eigenValues[i]);
75 eigenVectors = eigenVectors.GetTranspose();
76 H = eigenVectors * mat * eigenVectors.GetInverse();
79 tensorDouble.ComputeEigenAnalysis(eigenValues, eigenVectors);
82 for (
int i = 0; i < 3; i++)
86 eigenVectors = eigenVectors.GetTranspose();
89 DiffusionTensor3D<TOutput> tensor;
90 for (
int i = 0; i < 6; i++)
92 tensor[i] = (TOutput)tensorDouble[i];