[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]
Geometric Transformations |
Functions | |
template<... > | |
void | affineWarpImage (...) |
Warp an image according to an affine transformation. More... | |
template<... > | |
void | reflectImage (...) |
Reflect image horizontally or vertically. More... | |
template<... > | |
void | resampleImage (...) |
Resample image by a given factor. More... | |
template<... > | |
void | resizeImageCatmullRomInterpolation (...) |
Resize image using the Catmull/Rom interpolation function. More... | |
template<... > | |
void | resizeImageCoscotInterpolation (...) |
Resize image using the Coscot interpolation function. More... | |
template<... > | |
void | resizeImageLinearInterpolation (...) |
Resize image using linear interpolation. More... | |
template<... > | |
void | resizeImageNoInterpolation (...) |
Resize image by repeating the nearest pixel values. More... | |
template<... > | |
void | resizeImageSplineInterpolation (...) |
Resize image using B-spline interpolation. More... | |
template<... > | |
void | resizeMultiArraySplineInterpolation (...) |
Resize MultiArray using B-spline interpolation. More... | |
template<... > | |
void | rotateImage (...) |
Rotate an image by a multiple of 90 degrees or by an arbitrary angle. More... | |
linalg::TemporaryMatrix< double > | rotationMatrix2DDegrees (double angle) |
Create homogeneous matrix representing a 2D rotation about the coordinate origin. More... | |
linalg::TemporaryMatrix< double > | rotationMatrix2DDegrees (double angle, TinyVector< double, 2 > const ¢er) |
Create homogeneous matrix representing a 2D rotation about the given point. More... | |
linalg::TemporaryMatrix< double > | rotationMatrix2DRadians (double angle) |
Create homogeneous matrix representing a 2D rotation about the coordinate origin. More... | |
linalg::TemporaryMatrix< double > | rotationMatrix2DRadians (double angle, TinyVector< double, 2 > const ¢er) |
Create homogeneous matrix representing a 2D rotation about the given point. More... | |
linalg::TemporaryMatrix< double > | scalingMatrix2D (double scalingFactor) |
Create homogeneous matrix representing a 2D uniform scaling about the coordinate origin. More... | |
linalg::TemporaryMatrix< double > | scalingMatrix2D (double sx, double sy) |
Create homogeneous matrix representing a 2D non-uniform scaling about the coordinate origin. More... | |
linalg::TemporaryMatrix< double > | shearMatrix2D (double s01, double s10) |
Create homogeneous matrix representing a 2D shearing. More... | |
linalg::TemporaryMatrix< double > | translationMatrix2D (TinyVector< double, 2 > const &shift) |
Create homogeneous matrix representing a 2D translation. More... | |
template<... > | |
void | transposeImage (...) |
Transpose an image over the major or minor diagonal. More... | |
Resize or warp an array using various interpolation schemes or just pixel repetition.
See also: Image Registration, vigra::SplineImageView
linalg::TemporaryMatrix<double> vigra::translationMatrix2D | ( | TinyVector< double, 2 > const & | shift | ) |
Create homogeneous matrix representing a 2D translation.
For use with affineWarpImage().
linalg::TemporaryMatrix<double> vigra::scalingMatrix2D | ( | double | scalingFactor | ) |
Create homogeneous matrix representing a 2D uniform scaling about the coordinate origin.
For use with affineWarpImage().
linalg::TemporaryMatrix<double> vigra::scalingMatrix2D | ( | double | sx, |
double | sy | ||
) |
Create homogeneous matrix representing a 2D non-uniform scaling about the coordinate origin.
For use with affineWarpImage().
linalg::TemporaryMatrix<double> vigra::shearMatrix2D | ( | double | s01, |
double | s10 | ||
) |
Create homogeneous matrix representing a 2D shearing.
For use with affineWarpImage().
linalg::TemporaryMatrix<double> vigra::rotationMatrix2DRadians | ( | double | angle | ) |
Create homogeneous matrix representing a 2D rotation about the coordinate origin.
For use with affineWarpImage(). Angle must be in radians.
linalg::TemporaryMatrix<double> vigra::rotationMatrix2DDegrees | ( | double | angle | ) |
Create homogeneous matrix representing a 2D rotation about the coordinate origin.
For use with affineWarpImage(). Angle must be in degrees.
linalg::TemporaryMatrix<double> vigra::rotationMatrix2DRadians | ( | double | angle, |
TinyVector< double, 2 > const & | center | ||
) |
Create homogeneous matrix representing a 2D rotation about the given point.
For use with affineWarpImage(). Angle must be in radians.
linalg::TemporaryMatrix<double> vigra::rotationMatrix2DDegrees | ( | double | angle, |
TinyVector< double, 2 > const & | center | ||
) |
Create homogeneous matrix representing a 2D rotation about the given point.
For use with affineWarpImage(). Angle must be in degrees.
void vigra::affineWarpImage | ( | ... | ) |
Warp an image according to an affine transformation.
Declarations:
pass 2D array views:
The algorithm applies the given affineMatrix to the destination coordinates and copies the image value from the resulting source coordinates, using the given SplineImageView src for interpolation. If the resulting coordinate is outside the source image, nothing will be written at that destination point.
The matrix represents a 2-dimensional affine transform by means of homogeneous coordinates, i.e. it must be a 3x3 matrix whose last row is (0,0,1).
Usage:
#include <vigra/affinegeometry.hxx>
Namespace: vigra
See also: Functions to specify affine transformation: translationMatrix2D(), scalingMatrix2D(), shearMatrix2D(), rotationMatrix2DRadians(), rotationMatrix2DDegrees()
void vigra::rotateImage | ( | ... | ) |
Rotate an image by a multiple of 90 degrees or by an arbitrary angle.
If you specify the angle as an integer which is a multiple of 90 degrees, rotateImage() just copies the pixels in the appropriate new order. It expects the destination image to have the correct shape for the desired rotation. That is, when the rotation is a multiple of 180 degrees, source and destination must have the same shape, otherwise destination must have the transposed shape of the source.
If you want to rotate by an arbitrary angle and around an arbitrary center point, you must specify the source image as a vigra::SplineImageView, which is used for interpolation at the required subpixel positions. If no center point is provided, the image center is used by default. The destination image must have the same size as the source SplineImageView.
Positive angles refer to counter-clockwise rotation, negative ones to clockwise rotation. All angles must be given in degrees.
Declarations:
pass 2D array views:
Usage:
#include <vigra/basicgeometry.hxx>
Namespace: vigra
Preconditions:
void vigra::reflectImage | ( | ... | ) |
Reflect image horizontally or vertically.
The reflection direction refers to the reflection axis, i.e. horizontal reflection turns the image upside down, vertical reflection changes left for right. The directions are selected by the enum values vigra::horizontal
and vigra::vertical
. The two directions can also be "or"ed together to perform both reflections simultaneously (see example below) – this is the same as a 180 degree rotation.
Declarations:
pass 2D array views:
Usage:
#include <vigra/basicgeometry.hxx>
Namespace: vigra
Preconditions:
void vigra::transposeImage | ( | ... | ) |
Transpose an image over the major or minor diagonal.
The transposition direction refers to the axis, i.e. major transposition turns the upper right corner into the lower left one, whereas minor transposition changes the upper left corner into the lower right one. The directions are selected by the enum values vigra::major
and vigra::minor
. The two directions can also be "or"ed together to perform both reflections simultaneously (see example below) – this is the same as a 180 degree rotation. (Caution: When doing multi-platform development, you should be aware that some <sys/types.h> define major/minor, too. Do not omit the vigra namespace prefix.)
Note that a similar effect can be chieved by MultiArrayView::transpose(). However, the latter can only transpose about the major diagonal, and it doesn't rearrange the data
Declarations:
pass 2D array views:
Usage:
#include <vigra/basicgeometry.hxx>
Namespace: vigra
Preconditions:
void vigra::resampleImage | ( | ... | ) |
Resample image by a given factor.
This algorithm is very fast and does not require any arithmetic on the pixel types. The input image must have a size of at least 2x2. Destiniation pixels are directly copied from the appropriate source pixels. The size of the result image is the product of factor
and the original size, where we round up if factor < 1.0
and down otherwise. This size calculation is the main difference to the convention used in the similar function resizeImageNoInterpolation(): there, the result size is calculated as n*(old_width-1)+1
and n*(old_height-1)+1
. This is because resizeImageNoInterpolation() does not replicate the last pixel of every row/column in order to make it compatible with the other functions of the resizeImage...
family.
The function can be called with different resampling factors for x and y, or with a single factor to be used for both directions.
It should also be noted that resampleImage() is implemented so that an enlargement followed by the corresponding shrinking reproduces the original image.
Declarations:
pass 2D array views:
Usage:
#include <vigra/basicgeometry.hxx>
Namespace: vigra
Preconditions:
void vigra::resizeMultiArraySplineInterpolation | ( | ... | ) |
Resize MultiArray using B-spline interpolation.
Declarations:
pass arbitrary-dimensional array views:
The function implements separable spline interpolation algorithm described in
M. Unser, A. Aldroubi, M. Eden, "B-Spline Signal Processing" IEEE Transactions on Signal Processing, vol. 41, no. 2, pp. 821-833 (part I), pp. 834-848 (part II), 1993.
to obtain optimal interpolation quality and speed. You may pass the function a spline of arbitrary order (e.g. BSpline<ORDER, double>
or CatmullRomSpline<double>
). The default is a third order spline which gives a twice continuously differentiable interpolant. The implementation ensures that image values are interpolated rather than smoothed by first calling a recursive (sharpening) prefilter as described in the above paper. Then the actual interpolation is done using resamplingConvolveLine().
The range of both the input and output images (resp. regions) must be given. The input image must have a size of at least 4x4, the destination of at least 2x2. The scaling factors are then calculated accordingly. If the source image is larger than the destination, it is smoothed (band limited) using a recursive exponential filter. The source value_type (SrcAccessor::value_type) must be a linear algebra, i.e. it must support addition, subtraction, and multiplication (+, -, *), multiplication with a scalar real number and NumericTraits. The function uses accessors.
Usage:
#include <vigra/multi_resize.hxx>
Namespace: vigra
void vigra::resizeImageNoInterpolation | ( | ... | ) |
Resize image by repeating the nearest pixel values.
This algorithm is very fast and does not require any arithmetic on the pixel types.
The range of both the input and output images (resp. regions) must be given. Both images must have a size of at least 2x2 pixels. The scaling factors are then calculated accordingly. Destination pixels are directly copied from the appropriate source pixels.
Declarations:
pass 2D array views:
Usage:
#include <vigra/resizeimage.hxx>
Namespace: vigra
Preconditions:
Source and destination must have at least 2 pixels along each axis.
void vigra::resizeImageLinearInterpolation | ( | ... | ) |
Resize image using linear interpolation.
The function uses the standard separable bilinear interpolation algorithm to obtain a good compromise between quality and speed.
The range must of both the input and output images (resp. regions) must be given. Both images must have a size of at least 2x2. The scaling factors are then calculated accordingly. If the source image is larger than the destination, it is smoothed (band limited) using a recursive exponential filter. The source value_type (SrcAccessor::value_type) must be a linear space, i.e. it must support addition, multiplication with a scalar real number and NumericTraits.
Declarations:
pass 2D array views:
Usage:
#include <vigra/resizeimage.hxx>
Namespace: vigra
Preconditions:
Source and destination must have at least 2 pixels along each axis.
void vigra::resizeImageSplineInterpolation | ( | ... | ) |
Resize image using B-spline interpolation.
The function implements separable spline interpolation algorithm described in
M. Unser, A. Aldroubi, M. Eden, "B-Spline Signal Processing" IEEE Transactions on Signal Processing, vol. 41, no. 2, pp. 821-833 (part I), pp. 834-848 (part II), 1993.
to obtain optimal interpolation quality and speed. You may pass the function a spline of arbitrary order (e.g. BSpline<ORDER, double>
or CatmullRomSpline<double>
). The default is a third order spline which gives a twice continuously differentiable interpolant. The implementation ensures that image values are interpolated rather than smoothed by first calling a recursive (sharpening) prefilter as described in the above paper. Then the actual interpolation is done using resamplingConvolveLine().
The range of both the input and output images (resp. regions) must be given. The input image must have a size of at least 4x4, the destination of at least 2x2. The scaling factors are then calculated accordingly. If the source image is larger than the destination, it is smoothed (band limited) using a recursive exponential filter. The source value_type (SrcAccessor::value_type) must be a linear algebra, i.e. it must support addition, subtraction, and multiplication (+, -, *), multiplication with a scalar real number and NumericTraits. The function uses accessors.
Declarations:
pass 2D array views:
Usage:
#include <vigra/resizeimage.hxx>
Namespace: vigra
Preconditions:
Source and destination must have at least 2 pixels along each axis.
void vigra::resizeImageCatmullRomInterpolation | ( | ... | ) |
Resize image using the Catmull/Rom interpolation function.
The function calls like resizeImageSplineInterpolation() with vigra::CatmullRomSpline as an interpolation kernel. The interpolated function has one continuous derivative. (See resizeImageSplineInterpolation() for more documentation)
Declarations:
pass 2D array views:
#include <vigra/resizeimage.hxx>
Namespace: vigra
void vigra::resizeImageCoscotInterpolation | ( | ... | ) |
Resize image using the Coscot interpolation function.
The function calls resizeImageSplineInterpolation() with vigra::CoscotFunction as an interpolation kernel. The interpolated function has one continuous derivative. (See resizeImageSplineInterpolation() for more documentation)
Declarations:
pass 2D array views:
#include <vigra/resizeimage.hxx>
Namespace: vigra
© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) |
html generated using doxygen and Python
|