38 #include <mln/core/image/complex_image.hh>
39 #include <mln/core/image/complex_neighborhoods.hh>
41 #include <mln/morpho/closing/area.hh>
42 #include <mln/morpho/watershed/flooding.hh>
44 #include <mln/literal/white.hh>
46 #include <mln/io/off/load.hh>
47 #include <mln/io/off/save.hh>
51 int main(
int argc,
char* argv[])
55 std::cerr <<
"usage: " << argv[0] <<
" input.off lambda output.off"
60 std::string input_filename = argv[1];
61 unsigned lambda = atoi(argv[2]);
62 std::string output_filename = argv[3];
71 static const unsigned D = float_input_t::dim;
73 typedef mln_geom_(float_input_t) G;
75 float_input_t float_input;
76 mln::io::off::
load(float_input, input_filename);
84 typedef mln::unsigned_2complex_image3df ima_t;
85 ima_t input(float_input.domain());
86 mln_piter_(ima_t) p(input.domain());
88 input(p) = 1000 * float_input(p);
91 mln::p_n_faces_fwd_piter<D, G> e(input.domain(), 1);
92 typedef mln::complex_higher_neighborhood<D, G> adj_polygons_nbh_t;
93 adj_polygons_nbh_t adj_polygons_nbh;
94 mln_niter_(adj_polygons_nbh_t) adj_p(adj_polygons_nbh, e);
107 mln_invariant(n <= 2);
118 adj_edges_nbh_t adj_edges_nbh;
135 typedef unsigned wst_val_t;
140 std::cout <<
"nbasins = " << nbasins << std::endl;
146 wshed(adj_p) = wshed(e);
152 mln::rgb8_2complex_image3df output(wshed.domain());
153 mln::
data::
fill(output, mln::literal::white);
157 std::vector<mln::
value::rgb8> basin_color (nbasins + 1);
158 for (
unsigned i = 0; i <= nbasins; ++i)
159 basin_color[i] = mln::
value::rgb8(random() % 256,
162 mln_piter_(ima_t) f(wshed.domain());
164 output(f) = basin_color[wshed(f)];
166 mln::io::off::
save(output, output_filename);