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_DATA_NAIVE_MEDIAN_HH
00027 # define MLN_DATA_NAIVE_MEDIAN_HH
00028
00032
00033 # include <mln/core/concept/image.hh>
00034 # include <mln/core/alias/window2d.hh>
00035 # include <mln/data/median.hh>
00036
00037
00038 namespace mln
00039 {
00040
00041 namespace data
00042 {
00043
00044 namespace naive
00045 {
00046
00049
00061 template <typename I, typename W, typename O>
00062 void median(const Image<I>& input, const Window<W>& win,
00063 Image<O>& output);
00064
00065
00066 # ifndef MLN_INCLUDE_ONLY
00067
00068
00069 namespace impl
00070 {
00071
00072 template <typename I, typename W, typename O>
00073 inline
00074 void median(const I& input, const W& win,
00075 O& output)
00076 {
00077 mln_piter(I) p(input.domain());
00078 mln_qiter(W) q(win, p);
00079 accu::stat::median_h<mln_value(I)> med;
00080
00081 for_all(p)
00082 {
00083 med.init();
00084 for_all(q) if (input.has(q))
00085 med.take(input(q));
00086 output(p) = med.to_result();
00087 }
00088 }
00089
00090
00091 }
00092
00093
00094
00095
00096
00097 template <typename I, typename W, typename O>
00098 inline
00099 void median(const Image<I>& input, const Window<W>& win,
00100 Image<O>& output)
00101 {
00102 impl::median(exact(input), exact(win), exact(output));
00103 }
00104
00105 # endif // ! MLN_INCLUDE_ONLY
00106
00107 }
00108
00109 }
00110
00111 }
00112
00113
00114 #endif // ! MLN_DATA_NAIVE_MEDIAN_HH