58 SelfAdjointEigenSolver<Matrix<float, 7, 7>> solver(D);
59 auto eigenValues = solver.eigenvalues();
62 float minValue = eigenValues[0];
65 for (
int i = 0; i < eigenValues.rows(); i++)
67 if (minValue > eigenValues[i])
69 minValue = eigenValues[i];
73 Eigen::Matrix<float, 7, 1> vec = solver.eigenvectors().col(minIdx);
76 float det = vec[0] * vec[1] * vec[2];
84 Vector3f offset{vec[3] / vec[0] / 2, vec[4] / vec[1] / 2,
86 Vector3f gain = (vec.block(0, 0, 3, 1) / cbrt(det)).cwiseSqrt();
88 return {gain, -offset};