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_MORPHO_ELEMENTARY_EROSION_HH
00027 # define MLN_MORPHO_ELEMENTARY_EROSION_HH
00028
00030
00031 # include <mln/morpho/elementary/like_ero_fun.hh>
00032 # include <mln/morpho/elementary/like_ero_set.hh>
00033
00034
00035 namespace mln
00036 {
00037
00038 namespace morpho
00039 {
00040
00041 namespace elementary
00042 {
00043
00044
00045 template <typename I, typename N>
00046 mln_concrete(I)
00047 erosion(const Image<I>& input, const Neighborhood<N>& nbh);
00048
00049
00050 # ifndef MLN_INCLUDE_ONLY
00051
00052 namespace internal
00053 {
00054
00055
00056
00057 template <typename I, typename N>
00058 mln_concrete(I)
00059 erosion_dispatch(trait::image::kind::any,
00060 const Image<I>& input, const Neighborhood<N>& nbh)
00061 {
00062 return like_ero_fun(accu::meta::stat::min(), f_accu(), input, nbh);
00063 }
00064
00065 template <typename I, typename N>
00066 mln_concrete(I)
00067 erosion_dispatch(trait::image::kind::logic,
00068 const Image<I>& input, const Neighborhood<N>& nbh)
00069 {
00070 bool val[] =
00071 {
00072 1,
00073 1,
00074 1,
00075 0,
00076 0,
00077 };
00078 return like_ero_set(val, input, nbh);
00079 }
00080
00081 template <typename I, typename N>
00082 mln_concrete(I)
00083 erosion_dispatch(const Image<I>& input, const Neighborhood<N>& nbh)
00084 {
00085 return erosion_dispatch(mln_trait_image_kind(I)(),
00086 input, nbh);
00087 }
00088
00089 }
00090
00091
00092
00093
00094 template <typename I, typename N>
00095 mln_concrete(I)
00096 erosion(const Image<I>& input, const Neighborhood<N>& nbh)
00097 {
00098 trace::entering("morpho::elementary::erosion");
00099
00100 mln_precondition(exact(input).is_valid());
00101 mln_precondition(exact(nbh).is_valid());
00102
00103 mln_concrete(I) output = internal::erosion_dispatch(input, nbh);
00104
00105 mln_postcondition(output <= input);
00106 trace::exiting("morpho::elementary::erosion");
00107 return output;
00108 }
00109
00110 # endif // ! MLN_INCLUDE_ONLY
00111
00112 }
00113
00114 }
00115
00116 }
00117
00118
00119 #endif // ! MLN_MORPHO_ELEMENTARY_EROSION_HH