31 #include <mln/core/image/image2d.hh>
32 #include <mln/core/alias/neighb2d.hh>
34 #include <mln/labeling/blobs.hh>
35 #include <mln/io/pgm/load.hh>
36 #include <mln/io/pgm/save.hh>
37 #include <mln/data/stretch.hh>
38 #include <mln/debug/println.hh>
39 #include <mln/draw/line.hh>
40 #include <mln/pw/all.hh>
41 #include <mln/binarization/threshold.hh>
43 #include <mln/value/int_u8.hh>
44 #include <mln/value/label_8.hh>
45 #include <mln/core/alias/point2d.hh>
47 #include <mln/core/site_set/p_faces.hh>
48 #include <mln/core/image/complex_image.hh>
49 #include <mln/core/alias/complex_geometry.hh>
50 #include <mln/core/alias/complex_image.hh>
53 #include <mln/core/image/complex_neighborhoods.hh>
54 #include <mln/core/image/complex_neighborhood_piter.hh>
55 #include <mln/core/image/complex_windows.hh>
57 #include <mln/data/fill.hh>
58 #include <mln/morpho/gradient.hh>
59 #include <mln/labeling/colorize.hh>
62 #include "influence_zones.hh"
83 std::cout <<
"n seeds = " << nlabels << std::endl;
101 std::vector< std::vector<bool> > adj(nlabels + 1);
102 for (
unsigned l = 1; l <= nlabels; ++l)
103 adj[l].
resize(nlabels + 1,
false);
110 if (iz.has(r) && iz(
p) != iz(r))
113 adj[iz(
p)][iz(r)] =
true;
115 adj[iz(r)][iz(
p)] =
true;
117 if (iz.has(b) && iz(
p) != iz(b))
120 adj[iz(
p)][iz(b)] =
true;
122 adj[iz(b)][iz(
p)] =
true;
130 const unsigned D = 1;
145 std::vector<vertex> v;
151 geom.add_location(p);
152 v.push_back(c.add_face());
156 std::cout <<
"v size = " << v.size() << std::endl;
161 for (
unsigned l = 1; l <= nlabels; ++l)
162 for (
unsigned ll = l + 1; ll <= nlabels; ++ll)
164 e.push_back( c.add_face(-v[l-1] + v[ll-1]) );
167 std::cout <<
"e size = " << e.size() << std::endl;
192 output(v) = input(v.to_site().front());
204 template <
unsigned D, typename G, typename V>
212 template <
unsigned D,
typename G,
typename V>
220 int main(
int argc,
char* argv[])
224 std::cerr <<
"usage: " << argv[0] <<
" seeds.pgm lambda output.neato"
228 std::string input_filename = argv[1];
229 unsigned lambda = atoi(argv[2]);
230 std::string output_filename = argv[3];
237 typedef int_u8_graph_image2d input;
239 typedef mln_ch_value_(input, label) output;
243 image2d<int_u8> seeds = io::pgm::
load<int_u8>(input_filename);
245 typedef int_u8_graph_image2d ima_t;
246 ima_t ima = make_complex_image(seeds);
260 output s = chain(g, make_elt_nbh(g), lambda, nbasins);