33 #include <mln/core/image/complex_image.hh>
34 #include <mln/core/image/complex_neighborhoods.hh>
36 #include <mln/core/image/dmorph/image_if.hh>
37 #include <mln/core/image/dmorph/sub_image.hh>
38 #include <mln/core/image/dmorph/mutable_extension_ima.hh>
39 #include <mln/core/routine/mutable_extend.hh>
40 #include <mln/data/paste.hh>
42 #include <mln/topo/is_n_face.hh>
43 #include <mln/topo/is_simple_pair.hh>
44 #include <mln/topo/detach_pair.hh>
45 #include <mln/topo/skeleton/breadth_first_thinning.hh>
47 #include <mln/io/vtk/load.hh>
48 #include <mln/io/vtk/save.hh>
52 main(
int argc,
char* argv[])
56 std::cerr <<
"usage: " << argv[0] <<
" input.vtk output.vtk"
61 std::string input_filename = argv[1];
62 std::string output_filename = argv[2];
71 static const unsigned D = ima_t::dim;
73 typedef mln_geom_(ima_t) G;
76 mln::io::vtk::
load(ima, input_filename);
87 typedef mln::topo::is_n_face<mln_psite_(ima_t), D> is_a_triangle_t;
88 is_a_triangle_t is_a_triangle;
90 typedef mln::image_if<ima_t, is_a_triangle_t> triangle_only_ima_t;
93 typedef mln::mutable_extension_ima<triangle_only_ima_t, ima_t>
102 typedef mln::complex_lower_neighborhood<D, G> lower_adj_nbh_t;
103 lower_adj_nbh_t lower_adj_nbh;
106 typedef mln::complex_higher_neighborhood<D, G> higher_adj_nbh_t;
107 higher_adj_nbh_t higher_adj_nbh;
109 typedef mln::topo::is_simple_pair< triangle_ima_t,
112 is_simple_triangle_t;
113 is_simple_triangle_t is_simple_triangle(lower_adj_nbh, higher_adj_nbh);
120 typedef mln::topo::detach_pair< triangle_ima_t,
122 higher_adj_nbh_t > detach_t;
123 detach_t detach(lower_adj_nbh, higher_adj_nbh);
130 typedef mln::complex_lower_dim_connected_n_face_neighborhood<D, G> nbh_t;
134 mln::initialize(skel, ima);
136 (mln::topo::skeleton::breadth_first_thinning
137 (mln::mutable_extend((ima | is_a_triangle).rw(), ima),
152 mln::io::vtk::
save(skel, output_filename);