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_APPROX_MEDIAN_HH
00027 # define MLN_DATA_APPROX_MEDIAN_HH
00028
00032
00033 # include <mln/data/median.hh>
00034 # include <mln/win/rectangle2d.hh>
00035 # include <mln/win/disk2d.hh>
00036 # include <mln/win/octagon2d.hh>
00037 # include <mln/win/hline2d.hh>
00038 # include <mln/win/vline2d.hh>
00039 # include <mln/win/diag2d.hh>
00040 # include <mln/win/backdiag2d.hh>
00041
00042 #include <time.h>
00043
00044
00045 namespace mln
00046 {
00047
00048 namespace data
00049 {
00050
00051 namespace approx
00052 {
00053
00065 template <typename I>
00066 mln_concrete(I)
00067 median(const Image<I>& input, const win::rectangle2d& win);
00068
00069
00081 template <typename I>
00082 mln_concrete(I)
00083 median(const Image<I>& input, const win::disk2d& win);
00084
00085
00097 template <typename I>
00098 mln_concrete(I)
00099 median(const Image<I>& input, const win::octagon2d& win);
00100
00101
00102
00103 # ifndef MLN_INCLUDE_ONLY
00104
00105
00106
00107
00108
00109 template <typename I>
00110 inline
00111 mln_concrete(I)
00112 median(const Image<I>& input, const win::rectangle2d& win)
00113 {
00114 trace::entering("data::approx::median");
00115
00116 mln_concrete(I) output;
00117
00118 win::hline2d win1(win.width());
00119 output = data::median(input, win1);
00120
00121 win::vline2d win2(win.height());
00122 output = data::median(output, win2);
00123
00124 trace::exiting("data::approx::median");
00125 return output;
00126 }
00127
00128
00129 template <typename I>
00130 inline
00131 mln_concrete(I)
00132 median(const Image<I>& input, const win::disk2d& win)
00133 {
00134 trace::entering("data::approx::median");
00135
00136 const unsigned len = win.diameter() / 3 + 1;
00137 mln_concrete(I) output;
00138
00139 win::diag2d win1(len);
00140 output = data::median(input, win1);
00141
00142 win::backdiag2d win2(len);
00143 output = data::median(output, win2);
00144
00145 win::hline2d win3(len);
00146 output = data::median(input, win3);
00147
00148 win::vline2d win4(len);
00149 output = data::median(output, win4);
00150
00151 trace::exiting("data::approx::median");
00152 return output;
00153 }
00154
00155
00156 template <typename I>
00157 inline
00158 mln_concrete(I)
00159 median(const Image<I>& input, const win::octagon2d& win)
00160 {
00161 return median(input, win::disk2d(win.length()));
00162 }
00163
00164 # endif // ! MLN_INCLUDE_ONLY
00165
00166 }
00167
00168 }
00169
00170 }
00171
00172
00173 #endif // ! MLN_DATA_APPROX_MEDIAN_HH