[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]
Kernel2D< ARITHTYPE > Class Template Reference |
Generic 2 dimensional convolution kernel. More...
#include <vigra/stdconvolution.hxx>
Public Types | |
typedef BasicImage< value_type > ::Accessor | Accessor |
typedef BasicImage< value_type > ::ConstAccessor | ConstAccessor |
typedef BasicImage< value_type > ::const_traverser | ConstIterator |
typedef BasicImage< value_type > ::traverser | Iterator |
typedef ARITHTYPE | value_type |
Public Member Functions | |
Accessor | accessor () |
ConstAccessor | accessor () const |
BorderTreatmentMode | borderTreatment () const |
Iterator | center () |
ConstIterator | center () const |
int | height () const |
void | initAveraging (int radius) |
void | initDisk (int radius) |
Kernel2D & | initExplicitly (Shape2 const &upperleft, Shape2 const &lowerright) |
Kernel2D & | initExplicitly (BasicImage< value_type > const &image) |
void | initGaussian (double std_dev, value_type norm) |
void | initGaussian (double std_dev) |
void | initSeparable (Kernel1D< value_type > const &kx, Kernel1D< value_type > const &ky) |
template<class KernelIterator > | |
void | initSeparable (KernelIterator kxcenter, int xleft, int xright, KernelIterator kycenter, int yleft, int yright) |
Kernel2D () | |
Kernel2D (Kernel2D const &k) | |
Point2D | lowerRight () const |
value_type | norm () const |
void | normalize (value_type norm) |
void | normalize () |
value_type & | operator() (int x, int y) |
value_type | operator() (int x, int y) const |
Kernel2D & | operator= (Kernel2D const &k) |
InitProxy | operator= (value_type const &v) |
value_type & | operator[] (Diff2D const &d) |
value_type | operator[] (Diff2D const &d) const |
void | setBorderTreatment (BorderTreatmentMode new_mode) |
Point2D | upperLeft () const |
int | width () const |
~Kernel2D () | |
Generic 2 dimensional convolution kernel.
This kernel may be used for convolution of 2 dimensional signals.
Convolution functions access the kernel via an ImageIterator which they get by calling center(). This iterator points to the center of the kernel. The kernel's size is given by its upperLeft() (upperLeft().x <= 0, upperLeft().y <= 0) and lowerRight() (lowerRight().x >= 0, lowerRight().y >= 0) methods. The desired border treatment mode is returned by borderTreatment().
The different init functions create a kernel with the specified properties. The requirements for the kernel's value_type depend on the init function used. At least NumericTraits must be defined.
Usage:
#include <vigra/stdconvolution.hxx>
Namespace: vigra
Required Interface:
See also the init functions.
typedef ARITHTYPE value_type |
the kernel's value type
typedef BasicImage<value_type>::traverser Iterator |
2D random access iterator over the kernel's values
typedef BasicImage<value_type>::const_traverser ConstIterator |
const 2D random access iterator over the kernel's values
typedef BasicImage<value_type>::Accessor Accessor |
the kernel's accessor
typedef BasicImage<value_type>::ConstAccessor ConstAccessor |
the kernel's const accessor
Kernel2D | ( | ) |
Default constructor. Creates a kernel of size 1x1 which would copy the signal unchanged.
~Kernel2D | ( | ) |
Destructor.
InitProxy operator= | ( | value_type const & | v | ) |
Initialization. This initializes the kernel with the given constant. The norm becomes v*width()*height().
Instead of a single value an initializer list of length width()*height() can be used like this:
In this case, the norm will be set to the sum of the init values. An initializer list of wrong length will result in a run-time error.
void initSeparable | ( | Kernel1D< value_type > const & | kx, |
Kernel1D< value_type > const & | ky | ||
) |
Init the 2D kernel as the cartesian product of two 1D kernels of type Kernel1D. The norm becomes the product of the two original norms.
Required Interface:
The kernel's value_type must be a linear algebra.
void initSeparable | ( | KernelIterator | kxcenter, |
int | xleft, | ||
int | xright, | ||
KernelIterator | kycenter, | ||
int | yleft, | ||
int | yright | ||
) |
Init the 2D kernel as the cartesian product of two 1D kernels given explicitly by iterators and sizes. The norm becomes the sum of the resulting kernel values.
Required Interface:
The kernel's value_type must be a linear algebra.
Preconditions:
void initAveraging | ( | int | radius | ) |
Init as a 2D box filter with given radius.
void initGaussian | ( | double | std_dev, |
value_type | norm | ||
) |
Init as a 2D Gaussian function with given standard deviation and norm.
void initGaussian | ( | double | std_dev | ) |
Init as a 2D Gaussian function with given standard deviation and unit norm.
void initDisk | ( | int | radius | ) |
Init the 2D kernel as a circular averaging filter. The norm will be calculated as NumericTraits<value_type>::one() / (number of non-zero kernel values)
. The kernel's value_type must be a linear space.
Required Interface:
Precondition:
Kernel2D& initExplicitly | ( | Shape2 const & | upperleft, |
Shape2 const & | lowerright | ||
) |
Init the kernel by an explicit initializer list. The upper left and lower right corners (inclusive) of the kernel must be passed either as Shape2
or Diff2D
objects. A comma-separated initializer list for the kernel's weights is given after the assignment operator like this:
The norm is set to the sum of the initializer values. If the wrong number of values is given, a run-time error results. It is, however, possible to give just one initializer. This creates an averaging filter with the given constant:
Here, the norm is set to value*width()*height().
Preconditions:
Kernel2D& initExplicitly | ( | BasicImage< value_type > const & | image | ) |
Init the kernel by providing a BasicImage with the kernel values.
The kernel's origin is placed at the center of the given image. The norm is set to the sum of the image values.
Preconditions:
odd image width and height;
Point2D upperLeft | ( | ) | const |
Coordinates of the upper left corner of the kernel.
Point2D lowerRight | ( | ) | const |
Coordinates of the lower right corner of the kernel.
int width | ( | ) | const |
Width of the kernel.
int height | ( | ) | const |
Height of the kernel.
Iterator center | ( | ) |
ImageIterator that points to the center of the kernel (coordinate (0,0)).
ConstIterator center | ( | ) | const |
ImageIterator that points to the center of the kernel (coordinate (0,0)).
value_type& operator() | ( | int | x, |
int | y | ||
) |
Access kernel entry at given position.
value_type operator() | ( | int | x, |
int | y | ||
) | const |
Read kernel entry at given position.
value_type& operator[] | ( | Diff2D const & | d | ) |
Access kernel entry at given position.
value_type operator[] | ( | Diff2D const & | d | ) | const |
Read kernel entry at given position.
value_type norm | ( | ) | const |
Norm of the kernel (i.e. sum of its elements).
Accessor accessor | ( | ) |
The kernels default accessor.
ConstAccessor accessor | ( | ) | const |
The kernels default const accessor.
void normalize | ( | value_type | norm | ) |
Normalize the kernel to the given value. (The norm is the sum of all kernel elements.) The kernel's value_type must be a division algebra or algebraic field.
Required Interface:
void normalize | ( | ) |
Normalize the kernel to norm 1.
BorderTreatmentMode borderTreatment | ( | ) | const |
current border treatment mode
void setBorderTreatment | ( | BorderTreatmentMode | new_mode | ) |
Set border treatment mode. Only BORDER_TREATMENT_CLIP
and BORDER_TREATMENT_AVOID
are currently allowed.
© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) |
html generated using doxygen and Python
|