31 #include <mln/core/image/image2d.hh>
32 #include <mln/core/alias/neighb2d.hh>
34 #include <mln/labeling/blobs.hh>
35 #include <mln/io/pbm/load.hh>
36 #include <mln/io/pgm/save.hh>
37 #include <mln/io/ppm/save.hh>
38 #include <mln/debug/println.hh>
39 #include <mln/draw/line.hh>
41 #include <mln/value/int_u8.hh>
42 #include <mln/core/alias/point2d.hh>
44 #include <mln/core/site_set/p_faces.hh>
45 #include <mln/core/image/complex_image.hh>
46 #include <mln/core/alias/complex_image.hh>
48 #include <mln/core/image/complex_neighborhoods.hh>
49 #include <mln/core/image/complex_neighborhood_piter.hh>
51 #include <mln/data/fill.hh>
52 #include <mln/norm/l2.hh>
54 #include <mln/labeling/colorize.hh>
56 #include "influence_zones.hh"
79 std::cout <<
"n seeds = " << nlabels << std::endl;
106 std::vector< std::vector<bool> > adj(nlabels + 1);
107 for (
unsigned l = 1; l <= nlabels; ++l)
108 adj[l].
resize(nlabels + 1,
false);
115 if (iz.has(r) && iz(
p) != iz(r))
118 adj[iz(
p)][iz(r)] =
true;
120 adj[iz(r)][iz(
p)] =
true;
122 if (iz.has(b) && iz(
p) != iz(b))
125 adj[iz(
p)][iz(b)] =
true;
127 adj[iz(b)][iz(
p)] =
true;
133 const unsigned D = 1;
148 std::vector<vertex> v;
154 geom.add_location(p);
155 v.push_back(c.add_face());
158 std::cout <<
"v size = " << v.size() << std::endl;
163 for (
unsigned l = 1; l <= nlabels; ++l)
164 for (
unsigned ll = l + 1; ll <= nlabels; ++ll)
167 e.push_back(c.add_face(-v[l-1] + v[ll-1]));
169 std::cout <<
"e size = " << e.size() << std::endl;
187 dist_ima_t dist_ima(pc);
208 mln_niter_(v_nbh_t) v(v_nbh, e);
212 point2d p1 = v.to_site().front();
214 point2d p2 = v.to_site().front();
216 mln_invariant(!v.is_valid());
219 dist_max.take(dist_ima(e));
226 std::cout <<
"distance max = " << dist_max << std::endl;
237 main(
int argc,
char* argv[])
241 std::cerr <<
"usage: " << argv[0] <<
" input.pbm lambda output.ppm"
245 std::string input_filename = argv[1];
246 unsigned lambda = atoi(argv[2]);
247 std::string output_filename = argv[3];
261 const unsigned D = 1;
262 typedef mln_geom_(ima_t) G;
265 ima_t ima = make_complex_image(seeds);
273 typedef
unsigned wst_val_t;
279 wst_ima_t wst_ima = chain(ima, nbh, lambda, nbasins);
283 image2d<int_u8> canvas_wst(seeds.domain());
291 mln_niter_(v_nbh_t) v(v_nbh, e);
296 point2d p1 = v.to_site().front();
298 point2d p2 = v.to_site().front();
300 mln_invariant(!v.is_valid());