mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-30 00:50:37 +08:00
Add line local parameterization.
This CL adds a local parameterization for a n-dimensional line, which is represented as an origin point and a direction. The line direction is updated in the same way as a homogeneous vector and the origin point is updated perpendicular to the line direction. Change-Id: I733f395e5cc4250abf9778c26fe0a5ae1de6b624
This commit is contained in:
@@ -262,6 +262,33 @@ class CERES_EXPORT HomogeneousVectorParameterization
|
||||
const int size_;
|
||||
};
|
||||
|
||||
// This provides a parameterization for lines, where the line is
|
||||
// over-parameterized by an origin point and a direction vector. So the
|
||||
// parameter vector size needs to be two times the ambient space dimension,
|
||||
// where the first half is interpreted as the origin point and the second half
|
||||
// as the direction.
|
||||
//
|
||||
// The plus operator for the line direction is the same as for the
|
||||
// HomogeneousVectorParameterization. The update of the origin point is
|
||||
// perpendicular to the line direction before the update.
|
||||
//
|
||||
// This local parameterization is a special case of the affine Grassmannian
|
||||
// manifold (see https://en.wikipedia.org/wiki/Affine_Grassmannian_(manifold))
|
||||
// for the case Graff_1(R^n).
|
||||
template <int AmbientSpaceDimension>
|
||||
class CERES_EXPORT LineParameterization : public LocalParameterization {
|
||||
public:
|
||||
static_assert(AmbientSpaceDimension >= 2,
|
||||
"The ambient space must be at least 2");
|
||||
|
||||
bool Plus(const double* x,
|
||||
const double* delta,
|
||||
double* x_plus_delta) const override;
|
||||
bool ComputeJacobian(const double* x, double* jacobian) const override;
|
||||
int GlobalSize() const override { return 2 * AmbientSpaceDimension; }
|
||||
int LocalSize() const override { return 2 * (AmbientSpaceDimension - 1); }
|
||||
};
|
||||
|
||||
// Construct a local parameterization by taking the Cartesian product
|
||||
// of a number of other local parameterizations. This is useful, when
|
||||
// a parameter block is the cartesian product of two or more
|
||||
@@ -328,5 +355,7 @@ class CERES_EXPORT ProductParameterization : public LocalParameterization {
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
#include "ceres/internal/line_parameterization.h"
|
||||
|
||||
#endif // CERES_PUBLIC_LOCAL_PARAMETERIZATION_H_
|
||||
|
||||
|
||||
Reference in New Issue
Block a user