26 #ifndef MLN_MAKE_INFLUENCE_ZONE_ADJACENCY_GRAPH_HH
27 # define MLN_MAKE_INFLUENCE_ZONE_ADJACENCY_GRAPH_HH
38 # include <mln/core/concept/image.hh>
39 # include <mln/core/concept/neighborhood.hh>
40 # include <mln/core/image/image2d.hh>
41 # include <mln/core/alias/box2d.hh>
42 # include <mln/extension/adjust_fill.hh>
43 # include <mln/util/graph.hh>
44 # include <mln/util/adjacency_matrix.hh>
61 template <
typename I,
typename N>
64 const Neighborhood<N>& nbh,
65 const mln_value(I)& nlabels);
69 # ifndef MLN_INCLUDE_ONLY
75 template <
typename I,
typename N>
77 influence_zone_adjacency_graph_tests(
const Image<I>& iz,
78 const Neighborhood<N>& nbh,
81 mln_precondition(exact(iz).is_valid());
82 mln_precondition(exact(nbh).is_valid());
104 template <
typename I,
typename N>
107 const Neighborhood<N>& nbh_,
108 const mln_value(I)& nlabels)
110 trace::entering(
"make::impl::generic::influence_zone_adjacency_graph");
112 internal::influence_zone_adjacency_graph_tests(iz_, nbh_, nlabels);
113 const I& iz = exact(iz_);
114 const N& nbh = exact(nbh_);
116 util::adjacency_matrix<> adj(nlabels.next());
119 typedef mln_value(I) L;
120 mln_piter(I) p(iz.domain());
121 mln_niter(N) n(nbh, p);
127 if (iz.domain().has(n))
130 if (iz(n) != iz((p)))
138 g.add_vertices(nlabels.next());
139 for (
unsigned i = 0; i < nlabels.next(); ++i)
140 for (
unsigned j = 0; j < i; ++j)
141 if (adj.are_adjacent(i, j))
144 trace::exiting(
"make::impl::generic::influence_zone_adjacency_graph");
157 template <
typename I,
typename N>
159 influence_zone_adjacency_graph_dispatch(
const Image<I>& iz,
160 const Neighborhood<N>& nbh,
161 const mln_value(I)& nlabels)
163 return make::impl::generic::influence_zone_adjacency_graph(iz, nbh, nlabels);
172 template <
typename I,
typename N>
177 const mln_value(I)& nlabels)
179 trace::entering(
"make::influence_zone_adjacency_graph");
181 internal::influence_zone_adjacency_graph_tests(iz, nbh, nlabels);
183 util::graph g = internal::influence_zone_adjacency_graph_dispatch(iz, nbh, nlabels);
185 trace::exiting(
"make::influence_zone_adjacency_graph");
190 # endif // ! MLN_INCLUDE_ONLY
198 #endif // ! MLN_MAKE_INFLUENCE_ZONE_ADJACENCY_GRAPH_HH