34 #include <mln/core/image/image2d.hh>
35 #include <mln/core/alias/neighb2d.hh>
36 #include <mln/core/alias/window2d.hh>
37 #include <mln/core/image/dmorph/image_if.hh>
38 #include <mln/core/var.hh>
40 #include <mln/accu/center.hh>
41 #include <mln/accu/stat/mean.hh>
43 #include <mln/io/ppm/save.hh>
44 #include <mln/io/ppm/load.hh>
45 #include <mln/io/pgm/load.hh>
46 #include <mln/io/pgm/save.hh>
48 #include <mln/value/rgb8.hh>
49 #include <mln/value/int_u8.hh>
50 #include <mln/value/label_16.hh>
52 #include <mln/data/transform.hh>
54 #include <mln/labeling/wrap.hh>
55 #include <mln/labeling/mean_values.hh>
57 #include <mln/convert/to_fun.hh>
59 #include <mln/morpho/gradient.hh>
60 #include <mln/morpho/closing/area.hh>
61 #include <mln/morpho/watershed/flooding.hh>
62 #include <mln/morpho/elementary/dilation.hh>
64 #include <mln/make/vertex_image.hh>
65 #include <mln/make/edge_image.hh>
66 #include <mln/make/region_adjacency_graph.hh>
68 #include <mln/math/diff_abs.hh>
70 #include <mln/debug/draw_graph.hh>
71 #include <mln/debug/filename.hh>
72 #include <mln/data/transform.hh>
73 #include <mln/fun/v2v/rgb_to_int_u.hh>
79 struct dist : Function_vv2v< dist >
82 typedef value::int_u8 result;
84 result operator()(
const value::rgb8& c1,
const value::rgb8&
c2)
const
103 template <
typename I,
typename V>
104 struct edge_to_color : Function_v2v< edge_to_color<I,V> >
108 edge_to_color(
const I& ima)
114 operator()(
const unsigned& e)
const
116 return convert::to<V>(ima_(e));
124 template <
typename I,
typename V,
typename E>
126 image2d<mln_value(I)>
128 const V& ima_v,
const E& ima_e,
137 edge_to_color<E, mln_value(I)>(ima_e));
142 mln_piter(V)
p(ima_v.domain());
156 int main(
int argc,
char *argv[])
163 if (argc != 3 && argc != 4)
165 std::cout <<
"Usage: " << argv[0] <<
" <input.*> <output_prefix>"
166 <<
" [closing_area_value (default:25)]" << std::endl;
181 unsigned area_value = 25;
183 area_value = atoi(argv[3]);
199 io::ppm::save(labeling::mean_values(input_ppm, wshed, nbasins),