27 #ifndef MLN_GEOM_SEEDS2TILING_HH
28 # define MLN_GEOM_SEEDS2TILING_HH
36 # include <mln/core/concept/neighborhood.hh>
37 # include <mln/core/site_set/p_queue.hh>
38 # include <mln/core/routine/duplicate.hh>
39 # include <mln/accu/stat/mean.hh>
40 # include <mln/estim/min_max.hh>
41 # include <mln/algebra/vec.hh>
62 template <
typename I,
typename N>
64 const Neighborhood<N>& nbh);
67 # ifndef MLN_INCLUDE_ONLY
77 template <
typename I,
typename N>
81 const Neighborhood<N>& nbh_)
83 mln_trace(
"geom::impl::seed2tiling");
85 mln_precondition(
exact(ima_).is_valid());
86 mln_precondition(
exact(nbh_).is_valid());
88 const I& ima =
exact(ima_);
90 const N& nbh =
exact(nbh_);
91 p_queue<mln_psite(I)> q;
95 mln_piter(I)
p(ima.domain());
96 mln_niter(N) n(nbh,
p);
98 for_all(p) if (ima(p) == 0)
99 for_all(n) if (ima(n) != 0)
108 while (! q.is_empty())
110 mln_psite(I)
p = q.front();
115 mln_niter(N) n(nbh,
p);
116 for_all(n) if (ima.has(n))
136 template <
typename I,
typename N>
138 mln_concrete(I)
seeds2tiling(const Image<I>& ima_, const Neighborhood<N>& nbh)
140 mln_trace(
"geom::seed2tiling");
142 mln_precondition(
exact(ima_).is_valid());
143 mln_precondition(
exact(nbh).is_valid());
151 # endif // ! MLN_INCLUDE_ONLY
158 #endif // ! MLN_GEOM_SEEDS2TILING_HH