27 #ifndef MLN_MORPHO_LEVELING_FILTER_HH
28 # define MLN_MORPHO_LEVELING_FILTER_HH
34 # include <mln/core/concept/image.hh>
35 # include <mln/core/concept/neighborhood.hh>
36 # include <mln/core/concept/accumulator.hh>
38 # include <mln/trait/accumulators.hh>
40 # include <mln/data/sort_psites.hh>
41 # include <mln/data/sort_offsets.hh>
43 # include <mln/canvas/morpho/attribute_filter.hh>
55 template <
typename I,
typename N,
typename A>
58 const Neighborhood<N>& nbh,
59 const Accumulator<A>& a,
60 const typename A::result& lambda,
65 # ifndef MLN_INCLUDE_ONLY
68 template <
typename I,
typename N,
typename A>
71 const Neighborhood<N>& nbh,
72 const Accumulator<A>& a,
73 const typename A::result& lambda,
76 mln_trace(
"morpho::leveling_filter");
78 mln_precondition(
exact(input).is_valid());
80 mlc_or(mlc_equal(mln_trait_accumulator_when_pix(A),
81 trait::accumulator::when_pix::use_pix),
82 mlc_equal(mln_trait_accumulator_when_pix(A),
83 trait::accumulator::when_pix::use_v))::check();
85 mln_concrete(I) output;
86 output = canvas::morpho::
attribute_filter(input, nbh, a, lambda, increasing);
93 # endif // ! MLN_INCLUDE_ONLY
100 #endif // ! MLN_MORPHO_LEVELING_FILTER_HH