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_LINEAR_GAUSSIAN_FILTER_HH
00027 # define MLN_LINEAR_GAUSSIAN_FILTER_HH
00028
00035
00036 # include <mln/core/concept/image.hh>
00037 # include <mln/linear/gaussian/impl.hh>
00038 # include <mln/linear/gaussian/internal/coefficients.hh>
00039
00040
00041 namespace mln
00042 {
00043
00044 namespace linear
00045 {
00046
00047 namespace gaussian
00048 {
00049
00054 template <typename I>
00055 mln_concrete(I)
00056 filter(const Image<I>& input, double sigma);
00057
00058
00059 template <typename I>
00060 mln_concrete(I)
00061 filter(const Image<I>& input, double sigma, int dir);
00062
00063
00064
00065 # ifndef MLN_INCLUDE_ONLY
00066
00067
00068
00069
00079 template <typename I>
00080 inline
00081 mln_concrete(I)
00082 filter(const Image<I>& input, double sigma, int dir)
00083 {
00084 trace::entering("linear::gaussian::filter");
00085
00086 mln_precondition(exact(input).is_valid());
00087 mln_precondition(dir < I::site::dim);
00088
00089 mln_concrete(I) output;
00090 initialize(output, input);
00091
00092 internal::coefficients coef = internal::coefficients_not_derivative(sigma);
00093
00094 impl::generic_filter_common_(mln_trait_value_nature(mln_value(I))(),
00095 input, coef, sigma, output, dir);
00096
00097 trace::exiting("linear::gaussian::filter");
00098 return output;
00099 }
00100
00101
00102
00103
00109 template <typename I>
00110 inline
00111 mln_concrete(I)
00112 filter(const Image<I>& input, double sigma)
00113 {
00114 trace::entering("linear::gaussian::filter");
00115
00116 mln_precondition(exact(input).is_valid());
00117
00118 mln_concrete(I) output;
00119 initialize(output, input);
00120
00121 internal::coefficients coef = internal::coefficients_not_derivative(sigma);
00122
00123 impl::generic_filter_common_(mln_trait_value_nature(mln_value(I))(),
00124 input, coef, sigma, output);
00125
00126 trace::exiting("linear::gaussian::filter");
00127 return output;
00128 }
00129
00130
00131 # endif // ! MLN_INCLUDE_ONLY
00132
00133 }
00134
00135 }
00136
00137 }
00138
00139
00140 #endif // ! MLN_LINEAR_GAUSSIAN_FILTER_HH