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_BINARIZATION_BINARIZATION_HH
00027 # define MLN_BINARIZATION_BINARIZATION_HH
00028 
00034 
00035 # include <mln/core/concept/function.hh>
00036 # include <mln/data/transform.hh>
00037 
00038 
00039 namespace mln
00040 {
00041 
00042   namespace binarization
00043   {
00044 
00052     template <typename I, typename F>
00053     inline
00054     mln_ch_value(I, bool)
00055     binarization(const Image<I>& input, const Function_v2b<F>& fun);
00056 
00057 
00058 # ifndef MLN_INCLUDE_ONLY
00059 
00060     namespace impl
00061     {
00062 
00063       template <typename I, typename F>
00064       inline
00065       mln_ch_value(I, bool)
00066       binarization_(const I& input, const Function_v2b<F>& fun)
00067       {
00068         trace::entering("binarization::impl::binarization_");
00069         mln_ch_value(I, bool) output(input.domain());
00070 
00071         output = data::transform(input, fun);
00072 
00073         trace::exiting("binarization::impl::binarization_");
00074         return output;
00075       }
00076 
00077     } 
00078 
00079 
00080 
00081     
00082 
00083     template <typename I, typename F>
00084     inline
00085     mln_ch_value(I, bool)
00086     binarization(const Image<I>& input, const Function_v2b<F>& fun)
00087     {
00088       trace::entering("binarization::binarization");
00089       mln_precondition(exact(input).is_valid());
00090 
00091       mln_ch_value(I, bool) output(exact(input).domain());
00092       output = impl::binarization_(exact(input), fun);
00093 
00094       trace::exiting("binarization::binarization");
00095       return output;
00096     }
00097 
00098 # endif // ! MLN_INCLUDE_ONLY
00099 
00100   } 
00101 
00102 } 
00103 
00104 
00105 #endif // ! MLN_BINARIZATION_BINARIZATION_HH