1 #ifndef __NUMERIC_PLANEFITTING_HPP__ 2 #define __NUMERIC_PLANEFITTING_HPP__ 5 #include <Eigen/Cholesky> 6 #include <Eigen/Eigenvalues> 19 template<
class Scalar>
23 typedef typename Eigen::Matrix<Scalar,3,1>
Vector3;
24 typedef typename Eigen::Matrix<Scalar,3,3>
Matrix3;
29 x(0), y(0), z(0), xx(0), yy(0), xy(0), xz(0), yz(0), zz(0), n(0) {}
69 x = y = z = xx = yy = xy = xz = yz = zz = n = 0;
86 void update(
const Vector3& p, Scalar weight = 1.0 )
93 Eigen::LDLT<Matrix3> ldlt;
103 sum.
xx, sum.
xy, sum.
x,
104 sum.
xy, sum.
yy, sum.
y,
110 coeffs = ldlt.solve( b );
111 res = sum.
zz - b.dot(coeffs);
182 Eigen::SelfAdjointEigenSolver<Matrix3> eig;
185 typedef Eigen::Hyperplane<Scalar, 3>
Plane;
189 Vector3 mu(sum.
x, sum.
y, sum.
z);
190 moments << sum.
xx, sum.
xy, sum.
xz,
195 moments -= mu * mu.transpose() * (1.0/sum.
n);
198 eig.computeDirect(moments, Eigen::ComputeEigenvectors);
199 offset = -eig.eigenvectors().col(0).dot(mu);
204 return eig.eigenvectors().col(0);
225 return eig.eigenvalues()[0];
Definition: PlaneFitting.hpp:180
Plane getPlane() const
Definition: PlaneFitting.hpp:215
Matrix3 getCovariance() const
calculate the covariance matrix
Definition: PlaneFitting.hpp:171
void scale(Scalar scale)
scale the statistics Note that this will not have influence on the solution, but will only change the...
Definition: PlaneFitting.hpp:50
Scalar zz
Definition: PlaneFitting.hpp:26
Vector3 getNormal() const
Definition: PlaneFitting.hpp:202
Scalar y
Definition: PlaneFitting.hpp:26
Eigen::Matrix< Scalar, 3, 1 > Vector3
Definition: PlaneFitting.hpp:23
Scalar getResiduals() const
Definition: PlaneFitting.hpp:119
Vector3 getNormal() const
Definition: PlaneFitting.hpp:234
Scalar x
Definition: PlaneFitting.hpp:26
Scalar yy
Definition: PlaneFitting.hpp:26
Eigen::Matrix< Scalar, 3, 3 > Matrix3
Definition: PlaneFitting.hpp:24
Scalar xy
Definition: PlaneFitting.hpp:26
Scalar z
Definition: PlaneFitting.hpp:26
Scalar xz
Definition: PlaneFitting.hpp:26
PlaneFitting()
Definition: PlaneFitting.hpp:28
Eigen::Hyperplane< Scalar, 3 > Plane
Definition: PlaneFitting.hpp:185
const Vector3 & getCoeffs() const
Definition: PlaneFitting.hpp:114
Scalar getResiduals() const
Definition: PlaneFitting.hpp:223
Definition: PlaneFitting.hpp:91
Definition: PlaneFitting.hpp:20
void update(const Vector3 &p, Scalar weight=1.0)
Definition: PlaneFitting.hpp:86
Result(const PlaneFitting< Scalar > &sum)
Definition: PlaneFitting.hpp:98
Matrix3 getCovariance() const
Definition: PlaneFitting.hpp:124
Vector3 getCoeffs() const
Get the coefficients of the fitted plane.
Definition: PlaneFitting.hpp:157
Scalar n
Definition: PlaneFitting.hpp:26
Result solve() const
Solve the regression and return a result object.
Definition: PlaneFitting.hpp:140
Scalar getOffset() const
Definition: PlaneFitting.hpp:207
ResultNormal(const PlaneFitting< Scalar > &sum)
Definition: PlaneFitting.hpp:186
PlaneFitting(const Vector3 &p, Scalar weight=1.0)
Definition: PlaneFitting.hpp:31
void update(const PlaneFitting &other)
Definition: PlaneFitting.hpp:72
Scalar yz
Definition: PlaneFitting.hpp:26
void clear()
clears all previous input to the update method
Definition: PlaneFitting.hpp:67
ResultNormal solveNormal() const
Definition: PlaneFitting.hpp:230
Scalar xx
Definition: PlaneFitting.hpp:26