27 #ifndef SCRIBO_BINARIZATION_GLOBAL_THRESHOLD_AUTO_HH
28 # define SCRIBO_BINARIZATION_GLOBAL_THRESHOLD_AUTO_HH
36 # include <mln/core/image/image1d.hh>
37 # include <mln/core/alias/neighb1d.hh>
39 # include <mln/core/image/image2d.hh>
40 # include <mln/core/alias/neighb2d.hh>
42 # include <mln/core/routine/duplicate.hh>
43 # include <mln/core/image/dmorph/image_if.hh>
44 # include <mln/pw/all.hh>
46 # include <mln/histo/compute.hh>
47 # include <mln/debug/histo.hh>
48 # include <mln/convert/from_to.hh>
50 # include <mln/morpho/elementary/gradient_external.hh>
51 # include <mln/morpho/closing/height.hh>
52 # include <mln/morpho/closing/volume.hh>
53 # include <mln/morpho/watershed/flooding.hh>
55 # include <mln/linear/gaussian_1d.hh>
56 # include <mln/labeling/regional_minima.hh>
57 # include <mln/labeling/compute.hh>
58 # include <mln/value/label_8.hh>
59 # include <mln/accu/center.hh>
85 # ifndef MLN_INCLUDE_ONLY
92 mln_trace(
"scribo::binarization::global_threshold_auto");
94 const I& input =
exact(input_);
95 mln_precondition(input.is_valid());
97 const float sigma = 5;
99 typedef mln_value(I) V;
105 g = morpho::closing::
height(g, c4(), 5);
108 mln_ch_value(I,
unsigned) w = morpho::watershed::
flooding(g, c4(), nbasins);
120 convert::from_to(h, h_);
126 std::cerr <<
"This method has not worked properly!" << std::endl;
130 std::ofstream
file(
"tmp_hs.txt");
131 mln_piter(
box1d) p(h_.domain());
133 file << p.ind() << ' ' << hs_(p) << std::endl;
139 accu::center<
point1d, point1d> a;
148 for (
unsigned i = 0; i <= n; ++i)
149 v.push_back(c[i].ind());
150 std::sort(v.begin(), v.end());
151 threshold = v[n.prev()];
155 output =
duplicate((pw::
value(input) < pw::cst(threshold)) | input.domain());
160 # endif // !MLN_INCLUDE_ONLY
167 #endif // ! SCRIBO_BINARIZATION_GLOBAL_THRESHOLD_AUTO_HH