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_GRAPH_LABELING_HH
00027 # define MLN_GRAPH_LABELING_HH
00028 
00032 
00033 
00034 # include <mln/core/concept/image.hh>
00035 # include <mln/core/concept/neighborhood.hh>
00036 # include <mln/labeling/blobs.hh>
00037 # include <mln/metal/bexpr.hh>
00038 # include <mln/metal/is_a.hh>
00039 
00040 
00041 namespace mln
00042 {
00043 
00044   namespace graph
00045   {
00046 
00047 
00059     
00060     template <typename I, typename N, typename L>
00061     mln_ch_value(I,L)
00062     labeling(const Image<I>& graph_image_,
00063              const Neighborhood<N>& nbh_, L& nlabels);
00064 
00065 
00066 
00067 # ifndef MLN_INCLUDE_ONLY
00068 
00069 
00070     template <typename I, typename N, typename L>
00071     mln_ch_value(I,L)
00072     labeling(const Image<I>& graph_image_,
00073              const Neighborhood<N>& nbh_, L& nlabels)
00074     {
00075       trace::entering("graph::labeling");
00076 
00077       const I& graph_image = exact(graph_image_);
00078       const N& nbh = exact(nbh_);
00079 
00080       mln_precondition(graph_image.is_valid());
00081       mln_precondition(nbh.is_valid());
00082       
00083       
00084 
00085       mln_ch_value(I,bool) tmp;
00086       initialize(tmp, graph_image);
00087       data::fill(tmp, true);
00088 
00089       mln_ch_value(I,L) output = mln::labeling::blobs(tmp, nbh, nlabels);
00090 
00091       trace::exiting("graph::labeling");
00092       return output;
00093     }
00094 
00095 
00096 # endif // ! MLN_INCLUDE_ONLY
00097 
00098 
00099   } 
00100 
00101 } 
00102 
00103 
00104 #endif // ! MLN_GRAPH_LABELING_HH