27 #ifndef MLN_MORPHO_ALGEBRAIC_FILTER_HH
28 # define MLN_MORPHO_ALGEBRAIC_FILTER_HH
35 # include <mln/core/concept/image.hh>
36 # include <mln/core/concept/neighborhood.hh>
37 # include <mln/core/concept/accumulator.hh>
39 # include <mln/trait/accumulators.hh>
41 # include <mln/data/sort_psites.hh>
42 # include <mln/data/sort_offsets.hh>
44 # include <mln/canvas/morpho/attribute_filter.hh>
52 template <
typename I,
typename N,
typename A>
54 algebraic_filter(const Image<I>& input,
55 const Neighborhood<N>& nbh,
56 const Accumulator<A>& a,
57 const typename A::result& lambda,
61 # ifndef MLN_INCLUDE_ONLY
63 template <
typename I,
typename N,
typename A>
65 algebraic_filter(const Image<I>& input,
66 const Neighborhood<N>& nbh,
67 const Accumulator<A>& a,
68 const typename A::result& lambda,
71 trace::entering(
"morpho::opening::algebraic_filter");
73 mln_precondition(exact(input).is_valid());
75 mlc_or(mlc_equal(mln_trait_accumulator_when_pix(A),
76 trait::accumulator::when_pix::use_none),
77 mlc_equal(mln_trait_accumulator_when_pix(A),
78 trait::accumulator::when_pix::use_p))::check();
80 mln_concrete(I) output;
81 output = canvas::morpho::internal::attribute_filter_dispatch(input,
87 trace::exiting("morpho::opening::algebraic_filter");
92 # endif // ! MLN_INCLUDE_ONLY
98 #endif // ! MLN_MORPHO_ALGEBRAIC_FILTER_HH