31 double xfactor =
sqrt(2.0 / variance(0));
32 double yfactor =
sqrt(2.0 / variance(1));
36 if (variance(0) < 1
e-8)
37 xfactor = mean(0) = 1.0;
38 if (variance(1) < 1
e-8)
39 yfactor = mean(1) = 1.0;
42 *
T << xfactor, 0, -xfactor * mean(0),
43 0, yfactor, -yfactor * mean(1),
52 double var_norm = variance.norm();
53 double factor =
sqrt(2.0 / var_norm);
57 if (var_norm < 1
e-8) {
63 *
T << factor, 0, -factor * mean(0),
64 0, factor, -factor * mean(1),
71 Mat* transformed_points) {
72 int n = points.cols();
73 transformed_points->resize(2, n);
86 Mat* normalized_points,
94 *
H =
T2.transpose() * (*H) *
T1;
98 *
H =
T2.inverse() * (*H) *
T1;
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
void NormalizePoints(const Mat &points, Mat *normalized_points, Mat3 *T)
void EuclideanToHomogeneous(const Mat &X, Mat *H)
void PreconditionerFromPoints(const Mat &points, Mat3 *T)
Eigen::Matrix< double, 3, 3 > Mat3
void HomogeneousToEuclidean(const Mat &H, Mat *X)
void MeanAndVarianceAlongRows(const Mat &A, Vec *mean_pointer, Vec *variance_pointer)
void NormalizeIsotropicPoints(const Mat &points, Mat *normalized_points, Mat3 *T)
void ApplyTransformationToPoints(const Mat &points, const Mat3 &T, Mat *transformed_points)
Eigen::Matrix< double, 3, Eigen::Dynamic > Mat3X
void IsotropicPreconditionerFromPoints(const Mat &points, Mat3 *T)
static void Unnormalize(const Mat3 &T1, const Mat3 &T2, Mat3 *H)
static void Unnormalize(const Mat3 &T1, const Mat3 &T2, Mat3 *H)