26 #ifndef SCRIBO_ESTIM_INTERNAL_COMPUTE_SKELETON_HH
27 # define SCRIBO_ESTIM_INTERNAL_COMPUTE_SKELETON_HH
34 # include <mln/core/image/image2d.hh>
35 # include <mln/core/alias/neighb2d.hh>
36 # include <mln/topo/skeleton/crest.hh>
37 # include <mln/topo/skeleton/is_simple_point.hh>
38 # include <mln/transform/distance_front.hh>
39 # include <mln/logical/not.hh>
40 # include <mln/make/w_window2d_int.hh>
41 # include <mln/make/dual_neighb.hh>
42 # include <mln/value/int_u8.hh>
43 # include <mln/arith/revert.hh>
44 # include <mln/morpho/skeleton_constrained.hh>
45 # include <mln/core/routine/extend.hh>
46 # include <mln/labeling/blobs.hh>
47 # include <mln/accu/stat/mean.hh>
48 # include <mln/value/rgb8.hh>
66 compute_skeleton(const
Image<I>& input);
69 # ifndef MLN_INCLUDE_ONLY
73 compute_skeleton(const
Image<I>& input_)
75 mln_trace(
"scribo::estim::internal::compute_skeleton");
77 const I& input =
exact(input_);
78 mlc_is(mln_value(I),
bool)::check();
79 mln_precondition(input.is_valid());
82 int vals[] = { 0, 9, 0, 9, 0,
91 mln_max(
value::int_u8));
93 mln_ch_value(I,
value::int_u8) dist_map = arith::revert(dist);
94 mln_concrete(I) K = topo::skeleton::crest(input, dist, c8(), psi);
99 nbh_t nbh = mln::make::dual_neighb(input, c8(),
c4());
101 mln_concrete(I) skel =
103 topo::skeleton::is_simple_point<nbh_t>(nbh),
109 # endif // ! MLN_INCLUDE_ONLY
117 #endif // ! SCRIBO_ESTIM_INTERNAL_COMPUTE_SKELETON_HH