27 #ifndef MLN_MORPHO_THINNING_HH
28 # define MLN_MORPHO_THINNING_HH
34 # include <mln/morpho/hit_or_miss.hh>
35 # include <mln/morpho/thickening.hh>
37 #include <mln/io/pgm/save.hh>
53 template <
typename I,
typename Wfg,
typename Wbg>
56 const Window<Wfg>& win_fg, const Window<Wbg>& win_bg);
59 # ifndef MLN_INCLUDE_ONLY
64 template <
typename I,
typename Wfg,
typename Wbg>
67 thinning_tests(
const Image<I>& input_,
68 const Window<Wfg>& win_fg_,
69 const Window<Wbg>& win_bg_)
71 const I& input =
exact(input_);
72 const Wfg& win_fg =
exact(win_fg_);
73 const Wbg& win_bg =
exact(win_bg_);
76 mln_precondition(input.is_valid());
77 mln_precondition(win_fg.is_centered());
78 mln_precondition(! win_bg.is_empty());
79 mln_precondition((win_fg && win_bg).is_empty());
90 template <
typename I,
typename Wfg,
typename Wbg>
94 const Window<Wfg>& win_fg, const Window<Wbg>& win_bg)
96 mln_trace(
"morpho::thinning");
99 internal::thinning_tests(input, win_fg, win_bg);
101 mln_concrete(I) output = morpho::
minus( input,
105 win_bg, win_fg ) ) == output);
109 # endif // ! MLN_INCLUDE_ONLY
116 #endif // ! MLN_MORPHO_THINNING_HH