26 #ifndef MLN_WORLD_INTER_PIXEL_DIM2_MAKE_EDGE_IMAGE_HH
27 # define MLN_WORLD_INTER_PIXEL_DIM2_MAKE_EDGE_IMAGE_HH
33 # include <mln/core/image/dmorph/extension_ima.hh>
34 # include <mln/core/image/dmorph/image_if.hh>
36 # include <mln/core/routine/extend.hh>
38 # include <mln/world/inter_pixel/neighb2d.hh>
39 # include <mln/world/inter_pixel/dim2/is_edge.hh>
40 # include <mln/data/fill.hh>
54 template <
typename I,
typename F>
56 make_edge_image(const Image<I>& input_, const Function_vv2v<F>& f_)
58 trace::entering(
"world::inter_pixel::dim2::make_edge_image");
60 const I& input = exact(input_);
61 const F& f = exact(f_);
62 mln_precondition(input.is_valid());
64 typedef image_if<const image2d<value::int_u<8u> >,
65 world::inter_pixel::dim2::is_edge> edges_t;
66 edges_t edges = input | is_edge();
67 typedef extension_ima<const edges_t,const I> edges_ext_t;
68 edges_ext_t edges_ext =
extend(edges, input);
70 mln_piter(edges_ext_t) p(edges_ext.domain());
71 dbl_neighb2d nbh = e2v();
72 mln_niter(dbl_neighb2d) n(nbh, p);
75 mln_concrete(I) output;
77 data::fill(output, literal::zero);
87 output(p) = f(vs[0], vs[1]);
90 trace::exiting(
"world::inter_pixel::dim2::make_edge_image");
102 #endif // ! MLN_WORLD_INTER_PIXEL_DIM2_MAKE_EDGE_IMAGE_HH