27 #ifndef MLN_MORPHO_LINE_GRADIENT_HH
28 # define MLN_MORPHO_LINE_GRADIENT_HH
34 # include <functional>
39 # include <mln/math/abs.hh>
41 # include <mln/core/image/image2d.hh>
42 # include <mln/core/image/edge_image.hh>
43 # include <mln/core/alias/window2d.hh>
45 # include <mln/util/graph.hh>
46 # include <mln/util/site_pair.hh>
66 edge_image<util::site_pair<point2d>, V, util::graph>
70 # ifndef MLN_INCLUDE_ONLY
73 edge_image<util::site_pair<point2d>, V, util::graph>
76 mln_trace(
"morpho::line_gradient");
83 image2d<unsigned> vpsite(ima.
domain());
84 fun::i2v::array<point2d> fv2p(ima.
domain().nsites());
85 fun::i2v::array<V> vertex_values(ima.
domain().nsites());
87 mln_fwd_piter(image2d<V>)
p(ima.domain());
91 unsigned id = g.v_nmax() - 1;
99 next_c4_win.insert(0, 1).insert(1, 0);
100 typedef fun::i2v::array<V> edge_values_t;
101 typedef fun::i2v::array< util::site_pair<point2d> > edge_sites_t;
102 edge_values_t edge_values;
103 edge_sites_t edge_sites;
104 mln_fwd_qiter_(window2d) q(next_c4_win, p);
107 if (ima.domain().has(q))
109 g.add_edge(vpsite(p), vpsite(q));
111 edge_values.append(
math::abs(ima(p) - ima(q)));
112 edge_sites.append(util::site_pair<point2d>(p, q));
115 edge_image<util::site_pair<point2d>, V, util::graph>
116 lg_ima(g, edge_sites, edge_values);
121 # endif // ! MLN_INCLUDE_ONLY
128 #endif // ! MLN_MORPHO_LINE_GRADIENT_HH