27 #ifndef SCRIBO_BINARIZATION_WOLF_HH
28 # define SCRIBO_BINARIZATION_WOLF_HH
34 # include <mln/core/concept/image.hh>
35 # include <scribo/binarization/internal/wolf_functor.hh>
36 # include <scribo/binarization/internal/local_threshold_core.hh>
37 # include <scribo/binarization/internal/global_max_stddev_functor.hh>
38 # include <scribo/util/integral_sum_sum2_global_min_functor.hh>
65 wolf(const
Image<I>& input,
unsigned window_size,
double K);
82 wolf(const
Image<I>& input,
unsigned window_size);
95 # ifndef MLN_INCLUDE_ONLY
101 wolf(const
Image<I>& input,
unsigned window_size,
double K)
103 mln_trace(
"scribo::binarization::wolf");
105 mln_precondition(
exact(input).is_valid());
107 int integral_size_ratio = internal::wolf_functor<I>::step;
113 sub_domains = scribo::util::compute_sub_domains(input, 1, integral_size_ratio);
120 integral = scribo::util::init_integral_image(input, integral_size_ratio, fi,
121 sub_domains[2].first(),
122 sub_domains[2].second());
124 window_size /= integral_size_ratio;
132 internal::global_max_stddev<I> f_max_stddev;
133 scribo::canvas::integral_browsing(integral, 1, window_size,
134 window_size, integral_size_ratio, f_max_stddev);
137 internal::wolf_functor<I>
138 f(input, K, fi.global_min(), f_max_stddev.max_stddev);
139 scribo::canvas::integral_browsing(integral, 1, window_size,
140 window_size, integral_size_ratio, f);
146 template <
typename I>
148 wolf(const
Image<I>& input,
unsigned window_size)
150 return wolf(input, window_size, SCRIBO_DEFAULT_WOLF_K);
154 template <
typename I>
158 return wolf(input, 11);
162 # endif // ! MLN_INCLUDE_ONLY
170 #endif // ! SCRIBO_BINARIZATION_WOLF_HH