Developer Documentation
Centre for Vision, Speech & Signal Processing
USER IN NAMESPACE AMMA TREE ROOT AMMA SEARCH AMMA HOME
 

  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)
PRegisC
 
Finds the pose.
 
include "amma/PRegis.hh"
User Level:Default
Library:Regis
Example: testcom.cc
Section: 3D Surface.Registration
In Scope:std

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