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> | |
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, 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> | |
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. |
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 | |||
) | [inline] |
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 | |||
) | [inline] |
Register point in c
using a function of closest points closest_point
.
[in] | P_ | The cloud of points. |
[in] | X | the reference surface. |
[in] | closest_point | The function of closest points. |
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.
[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. |
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.
P_
and X
must not be empty.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.
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.
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.
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.