26 #ifndef MLN_MORPHO_LEVELING_FILTER_HH
27 # define MLN_MORPHO_LEVELING_FILTER_HH
33 # include <mln/core/concept/image.hh>
34 # include <mln/core/concept/neighborhood.hh>
35 # include <mln/core/concept/accumulator.hh>
37 # include <mln/trait/accumulators.hh>
39 # include <mln/data/sort_psites.hh>
40 # include <mln/data/sort_offsets.hh>
42 # include <mln/canvas/morpho/attribute_filter.hh>
52 template <
typename I,
typename N,
typename A>
54 leveling_filter(const Image<I>& input,
55 const Neighborhood<N>& nbh,
56 const Accumulator<A>& a,
57 const typename A::result& lambda,
62 # ifndef MLN_INCLUDE_ONLY
65 template <
typename I,
typename N,
typename A>
67 leveling_filter(const Image<I>& input,
68 const Neighborhood<N>& nbh,
69 const Accumulator<A>& a,
70 const typename A::result& lambda,
73 trace::entering(
"morpho::leveling_filter");
75 mln_precondition(exact(input).is_valid());
77 mlc_or(mlc_equal(mln_trait_accumulator_when_pix(A),
78 trait::accumulator::when_pix::use_pix),
79 mlc_equal(mln_trait_accumulator_when_pix(A),
80 trait::accumulator::when_pix::use_v))::check();
82 mln_concrete(I) output;
83 output = canvas::morpho::attribute_filter(input, nbh, a, lambda, increasing);
85 trace::exiting("morpho::leveling_filter");
91 # endif // ! MLN_INCLUDE_ONLY
98 #endif // ! MLN_MORPHO_LEVELING_FILTER_HH