$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
samples-complex1d.cc
1 // Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
2 //
3 // This file is part of Olena.
4 //
5 // Olena is free software: you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation, version 2 of the License.
8 //
9 // Olena is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Olena. If not, see <http://www.gnu.org/licenses/>.
16 //
17 // As a special exception, you may use this file as part of a free
18 // software project without restriction. Specifically, if other files
19 // instantiate templates or use macros or inline functions from this
20 // file, or you compile this file and link it with other files to produce
21 // an executable, this file does not by itself cause the resulting
22 // executable to be covered by the GNU General Public License. This
23 // exception does not however invalidate any other reasons why the
24 // executable file might be covered by the GNU General Public License.
25 
32 
33 #include <mln/io/pbm/load.hh>
34 
35 #include "apps/graph-morpho/morpho.hh"
36 
37 #include "apps/graph-morpho/convert.hh"
38 #include "apps/graph-morpho/debug.hh"
39 
40 #include "apps/data.hh"
41 
42 
43 int main()
44 {
45  using namespace mln;
46 
47  /* Binary graph-based image with vertices aligned on a discrete 2D grid.
48 
49  Of course, it would have been better, simpler and faster to use a
50  cubical 1-complex here, but they are not yet available (as of
51  2009-09-10). */
52  typedef mln::bin_1complex_image2d ima_t;
53 
54  // ------------------------ //
55  // Dilations and erosions. //
56  // ------------------------ //
57 
58  /* Create an image corresponding to the graph X of the ISMM 2009
59  paper from Jean Cousty et al. */
60  image2d<bool> x_pbm = io::pbm::load(MLN_APPS_DIR "/graph-morpho/x.pbm");
61  ima_t x = ::convert::to_complex_image(x_pbm);
62  ::debug::println_graph("x:", x);
63 
64  ::debug::println_graph("dilation_e2v(x):", dilation_e2v(x));
65  ::debug::println_graph("erosion_v2e(x):", erosion_v2e(x));
66 
67  ::debug::println_graph("erosion_e2v(x):", erosion_e2v(x));
68  ::debug::println_graph("dilation_v2e(x):", dilation_v2e(x));
69 
70  ::debug::println_graph("dilation_graph(x):", dilation_graph(x));
71  ::debug::println_graph("erosion_graph(x):", erosion_graph(x));
72 
73  ::debug::println_graph("alpha3(x):", alpha3(x));
74  ::debug::println_graph("beta3(x):", beta3(x));
75 
76  // --------- //
77  // Filters. //
78  // --------- //
79 
80  // Create an image corresponding to the graph Y.
81  image2d<bool> y_pbm = io::pbm::load(MLN_APPS_DIR "/graph-morpho/y.pbm");
82  ima_t y = ::convert::to_complex_image(y_pbm);
83  ::debug::println_graph("y:", y);
84 
85  ::debug::println_graph("opening_graph(y):", opening_graph(y));
86  ::debug::println_graph("half_opening_graph(y):", half_opening_graph(y));
87  ::debug::println_graph("beta3(alpha3(y)):", beta3(alpha3(y)));
88 
89  // Create an image corresponding to the graph Z.
90  image2d<bool> z_pbm = io::pbm::load(MLN_APPS_DIR "/graph-morpho/z.pbm");
91  ima_t z = ::convert::to_complex_image(z_pbm);
92  ::debug::println_graph("z:", z);
93 
94  ::debug::println_graph("closing_graph(z):", closing_graph(z));
95  ::debug::println_graph("half_closing_graph(z):", half_closing_graph(z));
96  ::debug::println_graph("alpha3(beta3(z)):", alpha3(beta3(z)));
97 }