|
Developer Documentation |
|
Centre for Vision, Speech & Signal Processing |
|
PUBLIC |
PRegisC::PRegisC(void)
PRegisC::PRegisC(VectorSetC &,VectorSetC &,VectorSetC &,RealSArray1dC &,SceModT,RigidTransC,double,int,double)
PRegisC::PRegisC(VectorSetC &,VectorSetC &,VectorSetC &,SceModT)
PRegisC::PRegisC(DListC,DListC,DListC,SceModT)
PRegisC::PRegisC(DListC,DListC,DListC,RealSArray1dC &,SceModT)
PRegisC::PRegisC(VectorSetC &,VectorSetC &,VectorSetC &,RealSArray1dC &,SceModT,double,int,double)
PRegisC::PRegisC(const PRegisC &)
PRegisC::operator=(const PRegisC &)
PRegisC::~PRegisC(void)
PRegisC::Weight(VectorSetC &,VectorSetC &,VectorSetC &,RealSArray1dC &,SceModT)
PRegisC::Transform(Vector3dC)
PRegisC::InvTransform(Vector3dC)
PRegisC::ExportTransform(void)
PRegisC::ExportRT(void)
PRegisC::ExportTranslate(void)
PRegisC::ExportRotMat(void)
PRegisC::ExportCovMat(void)
PRegisC::ExportRho2(void)
PRegisC::Print(void)
|
Comments:
This class finds the pose f that minimizes
E = 1/N \Sum [n_i.(q_i - f o b_i)]^2
As a byproduct it also computes the pose covarionce and the point
measurement covariances. If the weights are not meaningful then
the covaraince will not be meaningful.
No exact solution exists, so the approach of linearized least squares
(Extended Kalman Filter) is applied.
It uses RegisC to kickstart the process, and then iterates until convergence.
The supplied weights must be 1/rho^2, and the returned value is rho^2.
In the scene_scene case this is 0.5 E and in the scene_model case
it equals E.
Because linearized least squares methods like this use the 3 component n
representation for rotation - care should be taken when the solution is
a large rotation??
Variables:
- const double nearlyzero = 1e-10;
-
- const double nearlyzero;
-
This is used = to test for weights=0
- RigidTransC rigid_tr;
-
- VectorC transformation;
-
- MatrixC covariance;
-
- double rho2;
-
Methods:
- PRegisC()
-
Null Constructor
- PRegisC(VectorSetC & base,VectorSetC & query,VectorSetC & normals,RealSArray1dC & weights,SceModT reg_type,RigidTransC guess,double max_cov = 1e8,int max_count = 40,double cov_thresh = 0.001)
-
-------------------------------------------
All non-trivial constructors call this one!
-------------------------------------------
Constructor from point sets and weights and a guess
- max_cov is a maximum value of the covariance
- max_count is the maximum number of iterations,
if max_count is reached a warning is printed
- cov_thresh; when the change in translation < cov_thresh * sqrt(cov)
the routine terminates
-------------------------------------------------------------
All the constructors listed below get their guess from RegisC
-------------------------------------------------------------
- PRegisC(VectorSetC & base,VectorSetC & query,VectorSetC & normals,SceModT reg_type)
-
Constructor from point sets
- PRegisC(DListC<Vector3dC> base,DListC<Vector3dC> query,DListC<Vector3dC> normals,SceModT reg_type)
-
Constructor from point sets
- PRegisC(DListC<Vector3dC> base,DListC<Vector3dC> query,DListC<Vector3dC> normals,RealSArray1dC & weights,SceModT reg_type)
-
Constructor from point sets and weights
- PRegisC(VectorSetC & base,VectorSetC & query,VectorSetC & normals,RealSArray1dC & weights,SceModT reg_type,double max_cov = 1e8,int max_count = 40,double cov_thresh = 0.001)
-
Constructor from point sets and weights
- PRegisC(const PRegisC & v)
-
Copy constructor
- PRegisC & operator=(const PRegisC & v)
-
- ~PRegisC()
-
Destructor
- void Weight(VectorSetC & base,VectorSetC & query,VectorSetC & normals,RealSArray1dC & weights,SceModT reg_type)
-
estimation of sigma2
- Vector3dC Transform(Vector3dC v)
-
returns rot * v + trans
- Vector3dC InvTransform(Vector3dC v)
-
returns rot^T * (v - trans)
- VectorC ExportTransform(void)
-
returns the transformation vector with 6 elements
- RigidTransC ExportRT(void)
-
returns the rigid transformation
- Vector3dC ExportTranslate(void)
-
returns the translation
- Matrix3d3C ExportRotMat(void)
-
returns (a copy of) the rotation matrix
- MatrixC ExportCovMat(void)
-
returns (a copy of) the covariance matrix
- double ExportRho2(void)
-
returns the point measurement error parallel to the normal
- void Print(void)
-
prints the results
|
Programmer: Andrew Stoddart, Documentation by CxxDoc: Tue Mar 20 10:49:27 2001
|