Milena (Olena)  User documentation 2.0a Id
 All Classes Namespaces Functions Variables Typedefs Enumerator Groups Pages
mln::registration Namespace Reference

Namespace of "point-wise" expression tools. More...

Classes

class  closest_point_basic
 Closest point functor based on map distance. More...
 
class  closest_point_with_map
 Closest point functor based on map distance. More...
 

Functions

template<typename P , typename F >
algebra::quat get_rot (const p_array< P > &P_, const vec3d_f &mu_P, const vec3d_f &mu_Yk, const F &closest_point, const algebra::quat &qR, const vec3d_f &qT)
 FIXME: work only for 3d images.
 
template<typename P , typename F >
std::pair< algebra::quat,
mln_vec(P)> 
icp (const p_array< P > &P_, const p_array< P > &X, const F &closest_point, const algebra::quat &initial_rot, const mln_vec(P)&initial_translation)
 Base version of the ICP algorithm. It is called in other variants.
 
template<typename P , typename F >
composed< translation< P::dim,
float >, rotation< P::dim,
float > > 
icp (const p_array< P > &P_, const p_array< P > &X, const F &closest_point)
 
template<typename P >
composed< translation< P::dim,
float >, rotation< P::dim,
float > > 
registration1 (const box< P > &domain, const p_array< P > &P_, const p_array< P > &X)
 Call ICP once and return the resulting transformation.
 
template<typename P >
composed< translation< P::dim,
float >, rotation< P::dim,
float > > 
registration2 (const box< P > &domain, const p_array< P > &P_, const p_array< P > &X)
 Call ICP 10 times.
 
template<typename P >
composed< translation< P::dim,
float >, rotation< P::dim,
float > > 
registration3 (const box< P > &domain, const p_array< P > &P_, const p_array< P > &X)
 Call ICP 10 times.
 

Detailed Description

Namespace of "point-wise" expression tools.

Function Documentation

template<typename P , typename F >
algebra::quat mln::registration::get_rot ( const p_array< P > &  P_,
const vec3d_f &  mu_P,
const vec3d_f &  mu_Yk,
const F &  closest_point,
const algebra::quat &  qR,
const vec3d_f &  qT 
)

FIXME: work only for 3d images.

Definition at line 527 of file icp.hh.

References mln::p_array< P >::nsites().

template<typename P , typename F >
std::pair< algebra::quat, mln_vec(P)> mln::registration::icp ( const p_array< P > &  P_,
const p_array< P > &  X,
const F &  closest_point,
const algebra::quat &  initial_rot,
const mln_vec(P)&  initial_translation 
)
inline

Base version of the ICP algorithm. It is called in other variants.

Register point in c using a function of closest points closest_point. This overload allows to specify initial transformations.

Parameters
[in]P_The cloud of points.
[in]Xthe reference surface.
[in]closest_pointThe function of closest points.
[in]initial_rotAn initial rotation.
[in]initial_translationAn initial translation.
Returns
the rigid transformation which may be use later to create a registered image.

WARNING: the function closest_point MUST take float/double vector as arguments. Otherwise the resulting transformation may be wrong due to the truncation of the vector coordinate values.

Precondition
P_ and X must not be empty.

Reference article: "A Method for Registration of 3-D Shapes", Paul J. Besl and Neil D. McKay, IEEE, 2, February 1992.

Definition at line 612 of file icp.hh.

References mln::geom::bbox(), mln::literal::black, mln::set::compute(), mln::duplicate(), mln::box< P >::enlarge(), mln::data::fill(), mln::literal::green, mln::io::ppm::save(), and mln::literal::white.

template<typename P , typename F >
composed< translation<P::dim,float>,rotation<P::dim,float> > mln::registration::icp ( const p_array< P > &  P_,
const p_array< P > &  X,
const F &  closest_point 
)

Register point in c using a function of closest points closest_point.

Parameters
[in]P_The cloud of points.
[in]Xthe reference surface.
[in]closest_pointThe function of closest points.
Returns
the rigid transformation which may be use later to create a registered image.
template<typename P >
composed< translation< P::dim, float >, rotation< P::dim, float > > mln::registration::registration1 ( const box< P > &  domain,
const p_array< P > &  P_,
const p_array< P > &  X 
)
inline

Call ICP once and return the resulting transformation.

Definition at line 325 of file registration.hh.

template<typename P >
composed< translation< P::dim, float >, rotation< P::dim, float > > mln::registration::registration2 ( const box< P > &  domain,
const p_array< P > &  P_,
const p_array< P > &  X 
)
inline

Call ICP 10 times.

Do the first call to ICP with all sites then work on a subset of which size is decreasing. For each call, a distance criterion is computed on a subset. Sites part of the subset which are too far or too close are removed. Removed sites are NOT reused later in the subset.

Definition at line 345 of file registration.hh.

template<typename P >
composed< translation< P::dim, float >, rotation< P::dim, float > > mln::registration::registration3 ( const box< P > &  domain,
const p_array< P > &  P_,
const p_array< P > &  X 
)
inline

Call ICP 10 times.

Do the first call to ICP with all sites then work on a subset. For each call, a distance criterion is computed on a subset. A new subset is computed from the whole set of points according to this distance. It will be used in the next call. Removed Sites MAY be reintegrated.

Definition at line 365 of file registration.hh.