Milena (Olena)  User documentation 2.0a Id
 All Classes Namespaces Functions Variables Typedefs Enumerator Groups Pages
unsharp.cc
1 #include <mln/data/convert.hh>
2 #include <mln/morpho/elementary/laplacian.hh>
3 #include <mln/linear/gaussian.hh>
4 #include <mln/io/pgm/all.hh>
5 #include <mln/value/int_u8.hh>
6 #include <mln/arith/minus.hh>
7 #include <mln/morpho/contrast.hh>
8 #include <mln/core/alias/neighb2d.hh>
9 #include <mln/win/disk2d.hh>
10 
11 int main(int argc, char *argv[])
12 {
13  using namespace mln;
14 
15  if (argc != 4)
16  {
17  std::cout << argv[0] << " <in.pgm> <out.pgm> <threshold>" << std::endl;
18  return 1;
19  }
20 
21  typedef value::int_u8 V;
22  typedef image2d<V> I;
23  I input;
24  io::pgm::load(input, argv[1]);
25 
26  image2d<V> output;
27  initialize(output, input);
28 
29  neighb2d nbh;
30  static const bool vals[] = { 1, 1, 1, 1, 1,
31  1, 2, 2, 2, 1,
32  1, 2, 0, 2, 1,
33  1, 2, 2, 2, 1,
34  1, 1, 1, 1, 1 };
35  convert::from_to(vals, nbh);
36 
37 
38  image2d<int> laplace = morpho::elementary::laplacian(input, nbh);
39 
40  io::pgm::save(data::convert(V(), laplace), "debug_laplacien.pgm");
41 
42  mln_piter_(I) p(output.domain());
43  for_all(p)
44  output(p) = math::min((unsigned)input(p) + laplace(p), 255u);
45 
46  I contrast = morpho::contrast(output, win::disk2d(5));
47 
48  io::pgm::save(contrast, "debug_contrast.pgm");
49 
50 
51  // I output = duplicate(input);
52 
53  // I blur = linear::gaussian(input, 10);
54 
55  // io::pgm::save(blur, "debug_blur.pgm");
56 
57  // image2d<int> mask = input - blur;
58 
59  // io::pgm::save(data::convert(V(), mask), "debug_mask.pgm");
60 
61  // I contrast = morpho::contrast(input, win::disk2d(5));
62 
63  // io::pgm::save(contrast, "debug_contrast.pgm");
64 
65  // V threshold = atoi(argv[3]);
66 
67  // mln_piter(I) p(input.domain());
68  // for_all(p)
69  // {
70  // V diff = contrast(p) - input(p);
71  // float percent = mask(p) / 255.0 * 100.0;
72 
73  // V delta = diff * percent;
74  // if(math::abs(delta) > threshold)
75  // output(p) += delta;
76  // }
77 
78  io::pgm::save(data::convert(V(), output), argv[2]);
79 }