26 #ifndef MLN_MORPHO_LINE_GRADIENT_HH
27 # define MLN_MORPHO_LINE_GRADIENT_HH
33 # include <functional>
38 # include <mln/math/abs.hh>
40 # include <mln/core/image/image2d.hh>
41 # include <mln/core/image/edge_image.hh>
42 # include <mln/core/alias/window2d.hh>
44 # include <mln/util/graph.hh>
45 # include <mln/util/site_pair.hh>
62 edge_image<util::site_pair<point2d>, V, util::graph>
66 # ifndef MLN_INCLUDE_ONLY
69 edge_image<util::site_pair<point2d>, V, util::graph>
72 trace::entering(
"morpho::line_gradient");
73 mln_precondition(ima.is_valid());
80 fun::i2v::array<point2d> fv2p(ima.
domain().nsites());
81 fun::i2v::array<V> vertex_values(ima.
domain().nsites());
87 unsigned id = g.v_nmax() - 1;
95 next_c4_win.
insert(0, 1).insert(1, 0);
96 typedef fun::i2v::array<V> edge_values_t;
97 typedef fun::i2v::array< util::site_pair<point2d> > edge_sites_t;
98 edge_values_t edge_values;
99 edge_sites_t edge_sites;
100 mln_fwd_qiter_(
window2d) q(next_c4_win, p);
105 g.add_edge(vpsite(p), vpsite(q));
107 edge_values.append(
math::abs(ima(p) - ima(q)));
112 lg_ima(g, edge_sites, edge_values);
114 trace::exiting(
"morpho::line_gradient");
118 # endif // ! MLN_INCLUDE_ONLY
125 #endif // ! MLN_MORPHO_LINE_GRADIENT_HH