36 #ifndef VIGRA_GAUSSIANS_HXX 37 #define VIGRA_GAUSSIANS_HXX 41 #include "mathutil.hxx" 42 #include "array_vector.hxx" 62 template <
class T =
double>
96 vigra_precondition(sigma_ > 0.0,
97 "Gaussian::Gaussian(): sigma > 0 required.");
110 calculateHermitePolynomial();
115 result_type
operator()(argument_type x)
const;
133 double radius(
double sigmaMultiple = 3.0)
const 137 void calculateHermitePolynomial();
140 T sigma_, sigma2_, norm_;
154 return detail::RequiresExplicitCast<result_type>::cast(g);
156 return detail::RequiresExplicitCast<result_type>::cast(x * g);
158 return detail::RequiresExplicitCast<result_type>::cast((1.0 -
sq(x / sigma_)) * g);
160 return detail::RequiresExplicitCast<result_type>::cast((3.0 -
sq(x / sigma_)) * x * g);
162 return order_ % 2 == 0 ?
163 detail::RequiresExplicitCast<result_type>::cast(g * horner(x2))
164 : detail::RequiresExplicitCast<result_type>::cast(x * g * horner(x2));
172 T res = hermitePolynomial_[i];
173 for(--i; i >= 0; --i)
174 res = x * res + hermitePolynomial_[i];
183 hermitePolynomial_[0] = 1.0;
187 hermitePolynomial_[0] = T(-1.0 / sigma_ / sigma_);
202 T s2 = T(-1.0 / sigma_ / sigma_);
205 hn1 = hn0 + order_+1,
206 hn2 = hn1 + order_+1,
210 for(
unsigned int i = 2; i <= order_; ++i)
212 hn0[0] = s2 * (i-1) * hn2[0];
213 for(
unsigned int j = 1; j <= i; ++j)
214 hn0[j] = s2 * (hn1[j-1] + (i-1) * hn2[j]);
221 for(
unsigned int i = 0; i < hermitePolynomial_.
size(); ++i)
222 hermitePolynomial_[i] = order_ % 2 == 0 ?
T argument_type
Definition: gaussians.hxx:72
result_type operator()(argument_type x) const
Definition: gaussians.hxx:147
linalg::TemporaryMatrix< T > exp(MultiArrayView< 2, T, C > const &v)
Definition: accessor.hxx:43
Definition: gaussians.hxx:63
NumericTraits< T >::Promote sq(T t)
The square function.
Definition: mathutil.hxx:365
unsigned int derivativeOrder() const
Definition: gaussians.hxx:124
value_type sigma() const
Definition: gaussians.hxx:119
Gaussian(T sigma=1.0, unsigned int derivativeOrder=0)
Definition: gaussians.hxx:89
const_iterator begin() const
Definition: array_vector.hxx:223
T result_type
Definition: gaussians.hxx:75
size_type size() const
Definition: array_vector.hxx:358
int ceil(FixedPoint< IntBits, FracBits > v)
rounding up.
Definition: fixedpoint.hxx:675
T value_type
Definition: gaussians.hxx:69
SquareRootTraits< FixedPoint< IntBits, FracBits > >::SquareRootResult sqrt(FixedPoint< IntBits, FracBits > v)
square root.
Definition: fixedpoint.hxx:616
double radius(double sigmaMultiple=3.0) const
Definition: gaussians.hxx:133