[ VIGRA Homepage | Class Index | Function Index | File Index | Main Page ]
![]() |
Geometric Transformations | ![]() |
---|
Functions | |
template<...> void | resizeImageNoInterpolation (SrcIterator is, SrcIterator iend, SrcAccessor sa, DestIterator id, DestIterator idend, DestAccessor da) |
Resize image by repeating the nearest pixel values. | |
template<...> void | resizeImageLinearInterpolation (SrcIterator is, SrcIterator iend, SrcAccessor sa, DestIterator id, DestIterator idend, DestAccessor da) |
Resize image using linear interpolation. | |
template<...> void | resizeImageSplineInterpolation (SrcIterator is, SrcIterator iend, SrcAccessor sa, DestIterator id, DestIterator idend, DestAccessor da) |
Resize image using bi-cubic spline interpolation. |
Detailed Description |
#include "vigra/stdimagefunctions.hxx"
or
#include "vigra/resizeimage.hxx"
void resizeImageLinearInterpolation (...) |
Resize image using linear interpolation. The function uses the standard separable bilinear interpolation algorithm to obtain a good compromize 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. The function uses accessors. Declarations: pass arguments explicitly: namespace vigra { template <class SrcImageIterator, class SrcAccessor, class DestImageIterator, class DestAccessor> void resizeImageLinearInterpolation( SrcImageIterator is, SrcImageIterator iend, SrcAccessor sa, DestImageIterator id, DestImageIterator idend, DestAccessor da) } use argument objects in conjuction with Argument Object Factories: namespace vigra { template <class SrcImageIterator, class SrcAccessor, class DestImageIterator, class DestAccessor> void resizeImageLinearInterpolation( triple<SrcImageIterator, SrcImageIterator, SrcAccessor> src, triple<DestImageIterator, DestImageIterator, DestAccessor> dest) } Usage:
#include "vigra/resizeimage.hxx"
vigra::resizeImageLinearInterpolation( src.upperLeft(), src.lowerRight(), src.accessor(), dest.upperLeft(), dest.lowerRight(), dest.accessor()); Required Interface:
SrcImageIterator src_upperleft, src_lowerright;
DestImageIterator dest_upperleft, src_lowerright;
SrcAccessor src_accessor;
DestAccessor dest_accessor;
NumericTraits<SrcAccessor::value_type>::RealPromote
u = src_accessor(src_upperleft),
v = src_accessor(src_upperleft, 1);
double d;
u = d * v;
u = u + v;
dest_accessor.set(
NumericTraits<DestAccessor::value_type>::fromRealPromote(u),
dest_upperleft);
Preconditions:
src_lowerright.x - src_upperleft.x > 1 src_lowerright.y - src_upperleft.y > 1 dest_lowerright.x - dest_upperleft.x > 1 dest_lowerright.y - dest_upperleft.y > 1 |
void 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 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. Destiniation pixels are directly copied from the appropriate source pixels. The function uses accessors. Declarations: pass arguments explicitly: namespace vigra { template <class SrcImageIterator, class SrcAccessor, class DestImageIterator, class DestAccessor> void resizeImageNoInterpolation( SrcImageIterator is, SrcImageIterator iend, SrcAccessor sa, DestImageIterator id, DestImageIterator idend, DestAccessor da) } use argument objects in conjuction with Argument Object Factories: namespace vigra { template <class SrcImageIterator, class SrcAccessor, class DestImageIterator, class DestAccessor> void resizeImageNoInterpolation( triple<SrcImageIterator, SrcImageIterator, SrcAccessor> src, triple<DestImageIterator, DestImageIterator, DestAccessor> dest) } Usage:
#include "vigra/resizeimage.hxx"
vigra::resizeImageNoInterpolation( src.upperLeft(), src.lowerRight(), src.accessor(), dest.upperLeft(), dest.lowerRight(), dest.accessor()); Required Interface:
SrcImageIterator src_upperleft, src_lowerright; DestImageIterator dest_upperleft, src_lowerright; SrcAccessor src_accessor; DestAccessor dest_accessor; dest_accessor.set(src_accessor(src_upperleft), dest_upperleft); Preconditions:
src_lowerright.x - src_upperleft.x > 1 src_lowerright.y - src_upperleft.y > 1 dest_lowerright.x - dest_upperleft.x > 1 dest_lowerright.y - dest_upperleft.y > 1 |
void resizeImageSplineInterpolation (...) |
Resize image using bi-cubic spline interpolation. The function uses the bi-cubic, non-separable spline algorithm described in [Hoschek/Lasser: "Grundlagen der geometrischen Datenverarbeitung", Teubner, 1992] to obtain optimal interpolation quality. 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 arguments explicitly: namespace vigra { template <class SrcImageIterator, class SrcAccessor, class DestImageIterator, class DestAccessor> void resizeImageSplineInterpolation( SrcImageIterator is, SrcImageIterator iend, SrcAccessor sa, DestImageIterator id, DestImageIterator idend, DestAccessor da) } use argument objects in conjuction with Argument Object Factories: namespace vigra { template <class SrcImageIterator, class SrcAccessor, class DestImageIterator, class DestAccessor> void resizeImageSplineInterpolation( triple<SrcImageIterator, SrcImageIterator, SrcAccessor> src, triple<DestImageIterator, DestImageIterator, DestAccessor> dest) } Usage:
#include "vigra/resizeimage.hxx"
vigra::resizeImageSplineInterpolation( src.upperLeft(), src.lowerRight(), src.accessor(), dest.upperLeft(), dest.lowerRight(), dest.accessor()); Required Interface:
SrcImageIterator src_upperleft, src_lowerright;
DestImageIterator dest_upperleft, src_lowerright;
SrcAccessor src_accessor;
DestAccessor dest_accessor;
NumericTraits<SrcAccessor::value_type>::RealPromote
u = src_accessor(src_upperleft),
v = src_accessor(src_upperleft, 1);
double d;
u = d * v;
u = u + v;
u = u - v;
u = u * v;
u += v;
u -= v;
dest_accessor.set(
NumericTraits<DestAccessor::value_type>::fromRealPromote(u),
dest_upperleft);
Preconditions:
src_lowerright.x - src_upperleft.x > 3 src_lowerright.y - src_upperleft.y > 3 dest_lowerright.x - dest_upperleft.x > 1 dest_lowerright.y - dest_upperleft.y > 1 |
© Ullrich Köthe (koethe@informatik.uni-hamburg.de) |
html generated using doxygen and Python
|