27 #ifndef MLN_MORPHO_GRADIENT_HH
28 # define MLN_MORPHO_GRADIENT_HH
41 # include <mln/morpho/includes.hh>
56 template <
typename I,
typename W>
57 mln_concrete(I)
gradient(const Image<I>& input, const Window<W>&
win);
66 template <typename I, typename W>
76 template <typename I, typename W>
81 # ifndef MLN_INCLUDE_ONLY
84 template <
typename I,
typename W>
86 mln_concrete(I)
gradient(const Image<I>& input, const Window<W>& win)
88 mln_trace(
"morpho::gradient");
89 mln_precondition(
exact(input).is_valid());
90 mln_precondition(!
exact(win).is_empty());
95 mln_postcondition(
test::positive(output));
100 template <typename I, typename W>
104 mln_trace(
"morpho::gradient_internal");
105 mln_precondition(
exact(input).is_valid());
106 mln_precondition(!
exact(win).is_empty());
108 mln_concrete(I) output = morpho::
minus(input,
111 mln_postcondition(
test::positive(output));
116 template <typename I, typename W>
120 mln_trace(
"morpho::gradient_external");
121 mln_precondition(
exact(input).is_valid());
122 mln_precondition(!
exact(win).is_empty());
127 mln_postcondition(
test::positive(output));
131 # endif // ! MLN_INCLUDE_ONLY
138 #endif // ! MLN_MORPHO_GRADIENT_HH