17 if (u.rows() != 4 || u.cols() != 4 || !u.allFinite())
21 for (
int a = 0; a < 2; ++a)
22 for (
int b = 0; b < 2; ++b)
23 for (
int c = 0; c < 2; ++c)
24 for (
int d = 0; d < 2; ++d)
25 r(2 * a + c, 2 * b + d) = u(2 * a + b, 2 * c + d);
26 const Eigen::Vector4d s = Eigen::JacobiSVD<Eigen::Matrix4cd>(r).singularValues();
27 const double s2 = s.squaredNorm(), s4 = s.array().pow(4).sum();
28 return s4 > 0. ? std::clamp(s2 * s2 / s4, 1., 4.) : 4.;