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

  PUBLIC
BaseRegisHC::BaseRegisHC(void)
BaseRegisHC::SetExpectedRT(const RigidTransC &)
BaseRegisHC::SetMaxIter(const int &)
BaseRegisHC::SetPrediction(const EnumPrediction &)
BaseRegisHC::SetRMSThresh(const double &)
BaseRegisHC::SetRegWay(const EnumRegWay &)
BaseRegisHC::SetRegType(const SceModT &)
BaseRegisHC::SetMSECalculation(const EnumMseCalculation &)
BaseRegisHC::SetBoundaryCheck(const EnumBoundary &)
BaseRegisHC::SetNormalCheck(const EnumAngle &)
BaseRegisHC::SetDistanceCheck(const EnumSigmaCheck &)
BaseRegisHC::SetHistory(const int &)
BaseRegisHC::SaveHistory2Com(const char *,const char *)
BaseRegisHC::PerformRegistration(RigidTransC)
RCHandleC::IsValid(void) const
RCHandleC::IsValidObject(void) const
RCHandleC::operator=(const RCHandleC &)
RCHandleC::operator==(const RCHandleC &) const
RCHandleC::operator!=(const RCHandleC &) const
RCHandleC::Hash(void) const
RCHandleC::IsConst(void) const
RCHandleC::IsNotConst(void) const
RCHandleC::SetConst(void) const
RCHandleC::Invalidate(void)
RCHandleC::Body(void)
RCHandleC::Body(void) const
BaseRegisHC
 
BaseRegisHC is a Handle to the Abstract Base Class, BaseRegisC, which is reference counted.
 
include "amma/BaseRegisHC.hh"
User Level:Default
Library:POLREGIS
Example: cri.cc
Section: 3D Surface.Registration
In Scope:std

Comments:
BaseRegisHC is a Handle to the Abstract Base Class, BaseRegisC, which is reference counted.

The Class provides the core operations for doing point set registration.

To accelerate the time expensive process of iteration, the user may select prediction (based on Besl & McKay 92), which demands less iterations.

There are further quality improving features that can be switched on and off. These are Surface Normal Check, Boundary Check and Distance Check.

The user also has the facility of choosing the method to be used to calculate the Mean Square Error.

When using the trace mode, printouts are given on each iteration step. Some of the fields are only relevant when using the prediction. Hence there fields will be blank, indicated by ------.

 #i       - iteration number
 #pts     - number of random points on moveable surface
 #w       - number of weights minus the sum of weights
 RMS      - RMS value
 % 1st    - Comparison of the current & very 1st RMS value in %
 |Trans|  - Translation occured from previous translation
 %Tn-1    - Comparison of the last & current total translation value in %
 %Texp    - Comparison of the expected & current total translation in %
 Rotation - Current Rotation in degrees
 %Rn-1    - Comparison of the last & current total rotation in %
 %Rexp    - Comparison of the expected and current rotation in %
 NCA      - Indicates whether weights were affected by the Normal Angle Check
 BCA      - Indicates whether weights were affected by the Boundary Check
 DCA      - Indicates whether weights were affected by the Distance Check
 Thek_1   - Angle in 7D space between previous last two registration vectors
 Thetak   - Angle in 7D space between last two registration vectors
 PRP      - Prediction is Possible (Good Alignment Between last two
            registration vectors)
 CDP      - Can Do Prediction (Parabola, Line Based or Max Allowable Update)
 PUO      - Permanent Prediction Update Occured (YES/NO)
 MSEk     - Value of MSE before attempted prediction update
 MSEp     - Value of MSE after (temporary/permanent) prediction update
 

All vector sets that are passed to the constructors must have the same number of entries i=1...N.

There are various options provided by the constructor and member functions, which affect results obtained, except the trace option.

Trace

0 : No information is displayed.
1 : All information is displayed; the amount of detail displayed depends whether the Basic ICP or Accelerated ICP is being used.

Check Boundary

keepBoundaryPoints : Do not modify weight values of boundary points.
discardBoundaryPoints : Boundary point weight values are modified accordingly to the distance and standard deviation.

Check Normals

noAngleCheck : No normal angle check is performed.
doAngleCheck : A normal angle check is performed and each point's weight is weight is modified appropriately.

Distance Check

noDistanceCheck : Do not perform distance check.
doDistanceCheck : Perform distance check and modify each point's weight appropriately.

MSE Calculation

standardMse : Use the standard MSE calculation method.
madEstimator : Use the Median Absolute Deviation Estimator Method. More detailed information is contained in "BaseRegis.hh".

Parent Classes: Derived Classes: Methods:
BaseRegisHC(void)
Null Constructor
Note that this is for allowing you to declare the Base Class first, and then later use one of the Derived Classes.

You should not try to directly use this Class!


void SetExpectedRT(const RigidTransC & exp = RigidTransC())
Sets the expected Final translation & rotation.
expIN: Expected final Translation and Rotation

This is so that it can be compared with the actual translation and rotation at the end of the print out. It also allows errors to be computed.


void SetMaxIter(const int & iteration = 70)
Maximum number of iterations before terminating the registration.
iterationIN: Maximum number of iterations


void SetPrediction(const EnumPrediction & prediction = noPrediction)
Whether to use prediction or basic ICP.
predictionIN: noPrediction = No Prediction
prediction = Perform Prediction


void SetRMSThresh(const double & ratioThres = 0.99)
Set threshold for RMS error.
ratioThresIN: ratio threshold

Termination occurs when 2 successive ratios exceed ratioThres. See IterationBreak() for details.


void SetRegWay(const EnumRegWay & regWay = regis)
Chooses the function which will calculate the transform to move the moveable onto the new nearest neighbours on the fixed surface.
regWayIN: regis = Regis
pRegis = PRegis

THE DEFAULT IS THE ONLY OPTION CURRENTLY USED !!!!


void SetRegType(const SceModT & regType = scene_scene)
Defines the registration type.
regTypeIN: scene_scene = scene_scene
model_scene = model_scene

THE DEFAULT IS THE ONLY OPTION CURRENTLY USED !!!!


void SetMSECalculation(const EnumMseCalculation & mseCalc = standardMse)
Sets the calculation type for the MSE.
mseCalcIN: standardMse = Standard MSE
madEstimator = Uses the MAD Estimator


void SetBoundaryCheck(const EnumBoundary & bound = discardBoundaryPoints)
Whether to modify weights of NN pairs that are on the boundary of fixed.
boundIN: keepBoundaryPoints = Don't modify weight values
discardBoundaryPoints = Modify weight values accordingly


void SetNormalCheck(const EnumAngle & normal = noAngleCheck)
Whether to modify weights of NN pairs that have significantly different normal values.
normalIN: noAngleCheck = Don't do normal angle check
doAngleCheck = Do normal angle check


void SetDistanceCheck(const EnumSigmaCheck & sigma = noDistanceCheck)
Whether to modify weights of NN pairs that have significantly greater distances between them & the moving object, compared to the rest overall.
sigmaIN: noDistanceCheck = Don't do distance check
doDistanceCheck = Do distance check


void SetHistory(const int & hst = 0)
Used to set whether a history of RTs (RigidTransforms) are kept.
hstIN: 0 = Do not keep history of RTs
1 = Keep a history of each RT obtained
after each iteration

Note: Call this function before PerformRegistration().


void SaveHistory2Com(const char * comfname,const char * movfname)
Uses the history information and creates a .com file.
comfnameIN: Filename for .com file
movfnameIN: Filename of the moveable file

Note: Call this function after you have called PerformRegistration().


RigidTransC PerformRegistration(RigidTransC guess)
Execute registration with initial guess, return desired RT.
guessIN: Initial guess


#include "amma/RCHandle.hh"
BooleanT IsValid() const
Check its a valid handle.

BooleanT IsValidObject() const
Check its a valid handle, and that the object is pointed to is also valid.

RCHandleC<BaseRegisC> & operator=(const RCHandleC<BaseRegisC> & oth)
Assignment.

BooleanT operator==(const RCHandleC<BaseRegisC> & oth) const
Comparison operator.

BooleanT operator!=(const RCHandleC<BaseRegisC> & oth) const
Comparison operator.

UIntT Hash() const
Hash function.x

BooleanT IsConst() const
Is object constant ?

BooleanT IsNotConst() const
Is object not constant ?

void SetConst(void) const
Lock the object.
This is const as a convience though it actual modified the object, often object you wish to ensure are constant already have const set. protected:

void Invalidate()
Turn this into an invalid handle.

BaseRegisC & Body()
Direct access to body.

const BaseRegisC & Body() const
Constant access to body.


Programmer: Simon Cunnington , Documentation by CxxDoc: Tue Mar 20 10:48:08 2001