Classes | Functions

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] X the reference surface.
[in] closest_point The function of closest points.
[in] initial_rot An initial rotation.
[in] initial_translation An 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] X the reference surface.
[in] closest_point The 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.