Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
BIAS::PMatrixLinear Class Reference

This class computes a PMatrix from 2D/3D correspondences with linear methods. More...

#include <Geometry/PMatrixLinear.hh>

+ Inheritance diagram for BIAS::PMatrixLinear:
+ Collaboration diagram for BIAS::PMatrixLinear:

Public Member Functions

void AddDebugLevel (const long int lv)
 
void AddDebugLevel (const std::string &name)
 
bool Compute (const std::vector< HomgPoint3D * > &points3D, const std::vector< HomgPoint2D * > &points2D, PMatrix &P)
 computes a least squares solution P via SVD, if at least 6 2d-3d correspondences (pointers) are provided in points3D and points2D. More...
 
bool Compute (const std::vector< HomgPoint3D > &points3D, const std::vector< HomgPoint2D > &points2D, PMatrix &P)
 computes a least squares solution P via SVD, if at least 6 2d-3d correspondences are provided in points3D and points2D More...
 
bool ComputeCalibrated (const std::vector< HomgPoint3D * > &points3D, const std::vector< HomgPoint2D * > &points2D, PMatrix &Pose)
 given n>=6 2D/3D correspondences, compute approximate R and C using linear methods (thats why we need 6, not 3 correspondences !) More...
 
bool DebugLevelIsSet (const long int lv) const
 
bool DebugLevelIsSet (const std::string &name) const
 
int GetDebugLevel () const
 
std::ostream & GetDebugStream () const
 
void GetDebugStream (std::ostream &os) const
 
bool GetPEstSystemHom (Matrix< double > &A, const std::vector< HomgPoint3D * > &points3D, const std::vector< HomgPoint2D * > &points2D)
 sets up the homogeneous equation system A for pmatrix computation using the 2d/3d correspondences provided More...
 
bool GetPEstSystemInHom (Matrix< double > &A, Vector< double > &b, const std::vector< HomgPoint3D * > &points3D, const std::vector< HomgPoint2D * > &points2D)
 sets up an inhomogeneous equation system A for pmatrix computation using the 2d/3d correspondences provided More...
 
long int Name2DebugLevel (const std::string &name) const
 looks up a debuglevel in the internal map, returns 0 if not found More...
 
long int NewDebugLevel (const std::string &name)
 creates a new debuglevel More...
 
 PMatrixLinear ()
 
void PrintDebugLevel (std::ostream &os=std::cout) const
 
void RemoveDebugLevel (const long int lv)
 
void RemoveDebugLevel (const std::string &name)
 
void SetDebugLevel (const long int lv)
 
void SetDebugLevel (const std::string &name)
 
void SetDebugStream (const std::ostream &os)
 
void ShowDebugLevel (std::ostream &os=std::cout) const
 prints all internally known debuglevels More...
 

Static Public Member Functions

static long int GetGlobalDebugLevel ()
 
static void SetGlobalDebugLevel (long int lev)
 

Protected Member Functions

long ConsumeNextFreeDebuglevel_ ()
 returns the next available debuglevel More...
 

Protected Attributes

long int _liDebugLevel
 
long int _liNextDebugLevel
 new concept, debuglevel are managed here in the debug class More...
 
std::map< std::string, long int > _String2Debuglevel
 

Static Protected Attributes

static std::ostream _zDebugStream
 
static long int GlobalDebugLevel = 0
 

Detailed Description

This class computes a PMatrix from 2D/3D correspondences with linear methods.

No nonlinear constraints are enforced: If you have noisy points, you may get inexact rotations or non-metric PMatrices, although you compute in a metric framework. however, this class provides functions which can also be applied in projectively skewed space.

Author
koeser/frahm
Examples:
ExamplePMatrix.cpp.

Definition at line 50 of file PMatrixLinear.hh.

Constructor & Destructor Documentation

PMatrixLinear::PMatrixLinear ( )

Definition at line 33 of file PMatrixLinear.cpp.

Member Function Documentation

void BIAS::Debug::AddDebugLevel ( const long int  lv)
inlineinherited
void BIAS::Debug::AddDebugLevel ( const std::string &  name)
inlineinherited

Definition at line 362 of file Debug.hh.

bool PMatrixLinear::Compute ( const std::vector< HomgPoint3D * > &  points3D,
const std::vector< HomgPoint2D * > &  points2D,
PMatrix P 
)

computes a least squares solution P via SVD, if at least 6 2d-3d correspondences (pointers) are provided in points3D and points2D.

Attention
P may not exactly be decomposable due to noise in points
Parameters
points3D3D points which project to points2D
points2D2D projections of points3D, any K allowed !
Presulting (not always metric) PMatrix
Returns
false on ambiguity, true on success
Examples:
ExamplePMatrix.cpp.

Definition at line 57 of file PMatrixLinear.cpp.

References BIAS::Matrix< T >::GetRow(), BIAS::SVD::GetS(), BIAS::SVD::GetVT(), BIAS::SVD::GetZeroThreshold(), BIAS::Matrix< T >::NormalizeRows(), BIAS::SVD::RelNullspaceDim(), and BIAS::PMatrixBase::SetFromVector().

bool PMatrixLinear::Compute ( const std::vector< HomgPoint3D > &  points3D,
const std::vector< HomgPoint2D > &  points2D,
PMatrix P 
)

computes a least squares solution P via SVD, if at least 6 2d-3d correspondences are provided in points3D and points2D

Algorithm used is DLT. Fails if points3D are coplanar.

Attention
P may not exactly be decomposable due to noise in points
Parameters
points3D3D points which project to points2D
points2D2D projections of points3D, any K allowed !
Presulting (not always metric) PMatrix
Returns
false on ambiguity, true on success

Definition at line 40 of file PMatrixLinear.cpp.

bool PMatrixLinear::ComputeCalibrated ( const std::vector< HomgPoint3D * > &  points3D,
const std::vector< HomgPoint2D * > &  points2D,
PMatrix Pose 
)

given n>=6 2D/3D correspondences, compute approximate R and C using linear methods (thats why we need 6, not 3 correspondences !)

The lines of each two 3D points and their projections into the image are used to determine the rotation of P. For n points, we have n(n-1)/2 lines (quadratic in n!) and also linear equations, dont pass too many points if you are interested in performance ! After R is determined, C is computed separately using linear methods (DLT) starting from the equation Rx ~= [ I |-C] X Algorithm fails if points3D are coplanar

Attention
R is no real rotation, enforce afterwards, if you want that!
Parameters
points3D3D points which project to points2D
points2D2D projections of points3D, K=Identity required !
Poseresult R^T*[ I |-C]
Returns
true on success, false on error (ambiguity)
Author
koeser 10/2004
Examples:
ExamplePMatrix.cpp.

Definition at line 220 of file PMatrixLinear.cpp.

References BIAS::PMatrix::Compose(), BIAS::Matrix3x3< T >::GetData(), BIAS::Matrix< T >::GetDataArray(), BIAS::Matrix< T >::GetRow(), BIAS::SVD::GetS(), BIAS::Vector3< T >::GetSkewSymmetricMatrix(), BIAS::SVD::GetU(), BIAS::SVD::GetVT(), BIAS::Vector3< T >::OuterProduct(), BIAS::SVD::RelNullspaceDim(), BIAS::Vector3< T >::Set(), and BIAS::Matrix3x3< T >::SetIdentity().

long BIAS::Debug::ConsumeNextFreeDebuglevel_ ( )
inlineprotectedinherited

returns the next available debuglevel

Author
woelk 09/2006

Definition at line 521 of file Debug.hh.

bool BIAS::Debug::DebugLevelIsSet ( const long int  lv) const
inlineinherited
bool BIAS::Debug::DebugLevelIsSet ( const std::string &  name) const
inlineinherited

Definition at line 350 of file Debug.hh.

int BIAS::Debug::GetDebugLevel ( ) const
inlineinherited
std::ostream& BIAS::Debug::GetDebugStream ( ) const
inlineinherited

Definition at line 405 of file Debug.hh.

void BIAS::Debug::GetDebugStream ( std::ostream &  os) const
inlineinherited

Definition at line 414 of file Debug.hh.

static long int BIAS::Debug::GetGlobalDebugLevel ( )
inlinestaticinherited

Definition at line 431 of file Debug.hh.

bool PMatrixLinear::GetPEstSystemHom ( Matrix< double > &  A,
const std::vector< HomgPoint3D * > &  points3D,
const std::vector< HomgPoint2D * > &  points2D 
)

sets up the homogeneous equation system A for pmatrix computation using the 2d/3d correspondences provided

Author
frahm

Definition at line 116 of file PMatrixLinear.cpp.

References TNT::Matrix< T >::newsize().

bool PMatrixLinear::GetPEstSystemInHom ( Matrix< double > &  A,
Vector< double > &  b,
const std::vector< HomgPoint3D * > &  points3D,
const std::vector< HomgPoint2D * > &  points2D 
)

sets up an inhomogeneous equation system A for pmatrix computation using the 2d/3d correspondences provided

Author
frahm

Definition at line 168 of file PMatrixLinear.cpp.

References TNT::Vector< T >::newsize(), and TNT::Matrix< T >::newsize().

long int BIAS::Debug::Name2DebugLevel ( const std::string &  name) const
inlineinherited

looks up a debuglevel in the internal map, returns 0 if not found

Author
woelk 09/2006

Definition at line 454 of file Debug.hh.

long int BIAS::Debug::NewDebugLevel ( const std::string &  name)
inlineinherited
void BIAS::Debug::PrintDebugLevel ( std::ostream &  os = std::cout) const
inlineinherited

Definition at line 383 of file Debug.hh.

void BIAS::Debug::RemoveDebugLevel ( const long int  lv)
inlineinherited

Definition at line 369 of file Debug.hh.

void BIAS::Debug::RemoveDebugLevel ( const std::string &  name)
inlineinherited

Definition at line 376 of file Debug.hh.

void BIAS::Debug::SetDebugLevel ( const long int  lv)
inlineinherited
void BIAS::Debug::SetDebugLevel ( const std::string &  name)
inlineinherited

Definition at line 325 of file Debug.hh.

void BIAS::Debug::SetDebugStream ( const std::ostream &  os)
inlineinherited

Definition at line 398 of file Debug.hh.

static void BIAS::Debug::SetGlobalDebugLevel ( long int  lev)
inlinestaticinherited

Definition at line 424 of file Debug.hh.

void BIAS::Debug::ShowDebugLevel ( std::ostream &  os = std::cout) const
inlineinherited

prints all internally known debuglevels

Author
woelk 09/2006

Definition at line 496 of file Debug.hh.

Member Data Documentation

long int BIAS::Debug::_liDebugLevel
protectedinherited

Definition at line 510 of file Debug.hh.

Referenced by BIAS::Debug::operator=(), and BIAS::ImageBase::operator=().

long int BIAS::Debug::_liNextDebugLevel
protectedinherited

new concept, debuglevel are managed here in the debug class

Definition at line 516 of file Debug.hh.

Referenced by BIAS::Debug::operator=().

std::map<std::string, long int> BIAS::Debug::_String2Debuglevel
protectedinherited

Definition at line 517 of file Debug.hh.

Referenced by BIAS::Debug::operator=().

std::ostream BIAS::Debug::_zDebugStream
staticprotectedinherited

Definition at line 511 of file Debug.hh.

Referenced by BIAS::Debug::operator=().

long int BIAS::Debug::GlobalDebugLevel = 0
staticprotectedinherited

Definition at line 513 of file Debug.hh.


The documentation for this class was generated from the following files: