27 #ifndef MLN_MORPHO_EROSION_HH
28 # define MLN_MORPHO_EROSION_HH
36 # include <mln/morpho/general.hh>
37 # include <mln/morpho/includes.hh>
38 # include <mln/accu/logic/land.hh>
39 # include <mln/accu/logic/land_basic.hh>
40 # include <mln/accu/stat/min.hh>
41 # include <mln/accu/stat/min_h.hh>
54 template <
typename I,
typename W>
56 erosion(const Image<I>& input, const Window<W>&
win);
59 # ifndef MLN_INCLUDE_ONLY
65 mln_morpho_select_accu(I, logic::land_basic,
stat::min)
66 accu(const Image<I>&)
const
68 mln_morpho_select_accu(I, logic::land_basic,
stat::min) tmp;
73 mln_morpho_select_accu(I, logic::land, stat::min_h)
74 accu_incr(const Image<I>&)
const
76 mln_morpho_select_accu(I, logic::land, stat::min_h) tmp;
81 mln_value(I) neutral(const Image<I>&)
const
83 return internal::neutral<I>::supremum();
95 template <
typename I,
typename W>
97 general_on_set_centered(const erosion_op&,
98 const Image<I>& input_, const Window<W>& win_)
100 mln_trace(
"morpho::impl::general_on_set_centered__erosion");
102 typedef mln_concrete(I) O;
103 const I& input =
exact(input_);
104 const W& win =
exact(win_);
111 mln_piter(I)
p(input.domain());
112 mln_qiter(W) q(win,
p);
114 if (input(p) == true)
115 for_all(q) if (input.has(q))
116 if (input(q) == false)
126 template <
typename I,
typename W>
128 general_on_set_centered_fastest(const erosion_op&,
129 const Image<I>& input_, const Window<W>& win_)
131 mln_trace(
"morpho::impl::general_on_set_centered_fastest__erosion");
133 typedef mln_concrete(I) O;
134 const I& input =
exact(input_);
135 const W& win =
exact(win_);
142 mln_pixter(const I)
p(input);
143 mln_qixter(const I, W) q(
p, win);
144 mln_pixter(O) p_out(output);
148 if (q.val() == false)
161 template <
typename I,
typename W>
164 erosion(const Image<I>& input, const Window<W>& win)
166 mln_trace(
"morpho::erosion");
167 mln_precondition(
exact(input).is_valid());
168 mln_precondition(!
exact(win).is_empty());
170 mln_concrete(I) output =
general(erosion_op(), input, win);
172 if (
exact(win).is_centered())
173 mln_postcondition(output <= input);
178 # endif // ! MLN_INCLUDE_ONLY
185 #endif // ! MLN_MORPHO_EROSION_HH