27 #include <mln/core/image/image2d.hh>
28 #include <mln/value/int_u8.hh>
29 #include <mln/io/magick/load.hh>
30 #include <mln/io/pbm/save.hh>
31 #include <mln/data/transform.hh>
32 #include <mln/fun/v2v/rgb_to_luma.hh>
33 #include <mln/data/paste.hh>
34 #include <mln/pw/all.hh>
35 #include <mln/core/image/dmorph/sub_image.hh>
36 #include <mln/core/image/dmorph/image_if.hh>
37 #include <mln/data/convert.hh>
38 #include <mln/labeling/foreground.hh>
39 #include <mln/literal/colors.hh>
41 #include <scribo/binarization/sauvola_ms.hh>
42 #include <scribo/debug/option_parser.hh>
43 #include <scribo/debug/logger.hh>
47 {
"input.*",
"An image." },
48 {
"output.pbm",
"A binary image." },
65 {
"debug-prefix",
"Enable debug image outputs. Prefix image name with that "
66 "given prefix.",
"<prefix>", 0, 1, 0 },
67 {
"all-k",
"Sauvola's formulae parameter",
"<value>", 0, 1,
"0.34" },
69 {
"k2",
"Sauvola's formulae parameter",
"<value>", 0, 1, 0 },
70 {
"k3",
"Sauvola's formulae parameter",
"<value>", 0, 1, 0 },
71 {
"k4",
"Sauvola's formulae parameter",
"<value>", 0, 1, 0 },
73 {
"s",
"First subsampling ratio. Possible values: 2 or 3.",
"ratio",
74 scribo::debug::check_sauvola_first_subsampling, 1,
"3" },
75 {
"verbose",
"Enable verbose mode (mute, time, low, medium, full)",
76 "<mode>", scribo::debug::check_verbose_mode, 1,
"mute" },
77 {
"win-size",
"Window size at scale 1",
"<size>", 0, 1,
"101" },
85 struct scale_to_color :
public Function_v2v<scale_to_color>
87 typedef value::rgb8 result;
89 value::rgb8 operator()(
const value::int_u8& v)
const
113 int main(
int argc,
char *argv[])
116 using namespace scribo;
120 if (!options.parse(argc, argv))
124 if (options.is_set(
"debug-prefix"))
134 unsigned w_1 = atoi(options.opt_value(
"win-size").c_str());
136 unsigned s = atoi(options.opt_value(
"s").c_str());
140 double k = atof(options.opt_value(
"all-k").c_str());
141 binarization::internal::k2 = k;
142 binarization::internal::k3 = k;
143 binarization::internal::k4 = k;
146 if (options.is_set(
"k2"))
147 binarization::internal::k2 = atof(options.opt_value(
"k2").c_str());
148 if (options.is_set(
"k3"))
149 binarization::internal::k3 = atof(options.opt_value(
"k3").c_str());
150 if (options.is_set(
"k4"))
151 binarization::internal::k4 = atof(options.opt_value(
"k4").c_str());
154 <<
" - k2=" << binarization::internal::k2
155 <<
" - k3=" << binarization::internal::k3
156 <<
" - k4=" << binarization::internal::k4
159 scribo::binarization::internal::scale_image_output =
"scale_image.pgm";
160 scribo::binarization::internal::threshold_image_output =
"threshold_image.pbm";
161 scribo::binarization::internal::full_threshold_image_output =
"full_threshold_image.pbm";
162 scribo::binarization::internal::scale_iz_image_output =
"scale_iz.pgm";
163 scribo::binarization::internal::scale_proba_output =
"scale_proba.dump";
164 const char *scale_bin_output =
"scale_bin.ppm";
183 # ifdef SCRIBO_LOCAL_THRESHOLD_DEBUG
191 scale_bin.
at_(i,j) = binarization::internal::debug_e_2.at_(i/s, j/s);
193 scale_bin.
at_(i,j) = 0;
200 unsigned max = 15000;
202 for (
unsigned j = 0; j <
max; ++j)
205 for (
unsigned i = 0; i < 3; ++i)
207 if (binarization::internal::area_histo[i].
find(j) != binarization::internal::area_histo[i].end())
208 ostr <<
" " << binarization::internal::area_histo[i][j];
218 # endif // ! SCRIBO_LOCAL_THRESHOLD_DEBUG