00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_MAKE_P_EDGES_WITH_MASS_CENTERS_HH
00027 # define MLN_MAKE_P_EDGES_WITH_MASS_CENTERS_HH
00028
00036
00037
00038 # include <mln/core/concept/image.hh>
00039 # include <mln/core/concept/graph.hh>
00040 # include <mln/core/site_set/p_edges.hh>
00041
00042 # include <mln/labeling/compute.hh>
00043
00044 # include <mln/accu/center.hh>
00045
00046 # include <mln/fun/i2v/array.hh>
00047
00048 # include <mln/util/site_pair.hh>
00049
00050
00051 namespace mln
00052 {
00053
00054 namespace make
00055 {
00056
00067
00068 template <typename W, typename G>
00069 inline
00070 p_edges<G, fun::i2v::array<util::site_pair<mln_site(W)> > >
00071 p_edges_with_mass_centers(const Image<W>& wst_,
00072 const Graph<G>& g_);
00073
00074
00075 # ifndef MLN_INCLUDE_ONLY
00076
00077
00078 template <typename W, typename G>
00079 inline
00080 p_edges<G, fun::i2v::array<util::site_pair<mln_site(W)> > >
00081 p_edges_with_mass_centers(const Image<W>& wst_,
00082 const Graph<G>& g_)
00083 {
00084 trace::entering("make::p_edges_with_mass_centers");
00085
00086 const W& wst = exact(wst_);
00087 const G& g = exact(g_);
00088 mln_precondition(wst.is_valid());
00089 mln_precondition(g.is_valid());
00090
00091 typedef mln_site(W) P;
00092
00093
00094 mln_value(W) nbasins = g.v_nmax() - 1;
00095 util::array<mln_vec(P)>
00096 mass_centers = labeling::compute(accu::center<P>(), wst, nbasins);
00097
00098 typedef fun::i2v::array< util::site_pair<P> > edge_sites_t;
00099 edge_sites_t edge_sites(g.e_nmax());
00100
00101 mln_edge_iter(G) e(g);
00102 for_all(e)
00103 edge_sites(e.id()) = util::site_pair<P>(mass_centers[e.v1()],
00104 mass_centers[e.v2()]);
00105
00106 p_edges<G, edge_sites_t> pe(g, edge_sites);
00107
00108 trace::exiting("make::p_edges_with_mass_centers");
00109 return pe;
00110 }
00111
00112 # endif // ! MLN_INCLUDE_ONLY
00113
00114 }
00115
00116 }
00117
00118 #endif // ! MLN_MAKE_P_EDGES_WITH_MASS_CENTERS_HH