Image Component Library (ICL)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members

Class to apply an arbitrary series of affine transformations More...

#include <AffineOp.h>

Inheritance diagram for icl::filter::AffineOp:
icl::filter::BaseAffineOp icl::utils::Uncopyable icl::filter::UnaryOp icl::utils::Configurable icl::filter::RotateOp icl::filter::ScaleOp icl::filter::TranslateOp

Public Member Functions

 AffineOp (core::scalemode eInterpolate=core::interpolateLIN)
 Constructor. More...
void reset ()
 resets the internal Matrix More...
void rotate (double dAngle)
 adds a rotation More...
void translate (double x, double y)
 adds a traslation More...
void scale (double x, double y)
 adds a scale More...
virtual void apply (const core::ImgBase *poSrc, core::ImgBase **ppoDst)
 Applies the affine transform to the image. More...
void setAdaptResultImage (bool on)
 sets whether the result image is is scaled and translated to contain the whole result image More...
bool getAdaptResultImage () const
 returns the Adapt Result image option More...
- Public Member Functions inherited from icl::filter::BaseAffineOp
virtual ~BaseAffineOp ()
 Destructor. More...
- Public Member Functions inherited from icl::filter::UnaryOp
 UnaryOp ()
 Explicit empty constructor. More...
 UnaryOp (const UnaryOp &other)
 Explicit copy constructor. More...
UnaryOpoperator= (const UnaryOp &other)
 Explicit declaration of the assignment operator. More...
virtual ~UnaryOp ()
 Destructor. More...
virtual ICL_DEPRECATED void applyMT (const core::ImgBase *operand1, core::ImgBase **dst, unsigned int nThreads)
 apply function for multithreaded filtering (currently even slower than using one thread) More...
virtual const core::ImgBaseapply (const core::ImgBase *src)
 applys the filter usign an internal buffer as output image More...
void operator() (const core::ImgBase *src, core::ImgBase **dst)
 function operator (alternative for apply(src,dst) More...
const core::ImgBaseoperator() (const core::ImgBase *src)
 function operator for the implicit destination apply(src) call More...
const core::ImgBaseoperator() (const core::ImgBase &src)
 reference based function operator More...
void setClipToROI (bool bClipToROI)
 sets if the image should be clip to ROI or not More...
void setCheckOnly (bool bCheckOnly)
 sets if the destination image should be adapted to the source, or if it is only checked if it can be adapted. More...
bool getClipToROI () const
 returns the ClipToROI status More...
bool getCheckOnly () const
 returns the CheckOnly status More...
virtual void setPropertyValue (const std::string &propertyName, const utils::Any &value) throw (utils::ICLException)
 sets value of a property (always call call_callbacks(propertyName) or Configurable::setPropertyValue) More...
- Public Member Functions inherited from icl::utils::Configurable
virtual ~Configurable ()
 virtual destructor More...
 Configurable (const Configurable &other)
 Copy constructor. More...
Configurableoperator= (const Configurable &other)
 Assignment operator. More...
void setConfigurableID (const std::string &ID) throw (ICLException)
 sets the ID of this configurable More...
const std::string & getConfigurableID () const
 returns the configurables static ID More...
bool isOrderedFlagSet () const
 returns whether the ordered flag is set More...
void deactivateProperty (const std::string &pattern)
 adds an additional deativation pattern More...
void deleteDeactivationPattern (const std::string &pattern)
 removed a formerly added deactivation pattern More...
std::vector< std::string > getPropertyListWithoutDeactivated () const
 this returns a filtered list of properties (using all filters added by deactivateProperty) More...
virtual void adaptProperty (const std::string &name, const std::string &newType, const std::string &newInfo, const std::string &newToolTip) throw (ICLException)
 this function can be used to adapt a specific property afterwards More...
void registerCallback (const Callback &cb)
 add a callback for changed properties More...
void removedCallback (const Callback &cb)
 removes a callback that was registered before More...
void syncChangesTo (Configurable *others, int num=1)
 this can be used to let this instance also apply property changes to others More...
virtual std::vector< std::string > getPropertyList () const
 returns a list of All properties, that can be set using setProperty More...
virtual bool supportsProperty (const std::string &propertyName) const
 base implementation for property check (seaches in the property list) More...
virtual void saveProperties (const std::string &filename, const std::vector< std::string > &propertiesToSkip=EMPTY_VEC) const
 writes all available properties into a file More...
virtual void loadProperties (const std::string &filename, const std::vector< std::string > &propertiesToSkip=EMPTY_VEC)
 reads a camera config file from disc More...
virtual std::string getPropertyType (const std::string &propertyName) const
 get type of property More...
virtual std::string getPropertyInfo (const std::string &propertyName) const
 get information of a properties valid values More...
virtual Any getPropertyValue (const std::string &propertyName) const
 returns the current value of a property or a parameter More...
virtual std::string getPropertyToolTip (const std::string &propertyName) const
 returns the tooltip description for a given property More...
virtual int getPropertyVolatileness (const std::string &propertyName) const
 Returns whether this property may be changed internally. More...

Private Member Functions

template<typename T >
void affine (const core::ImgBase *poSrc, core::ImgBase *poDst)
void applyT (const double p[2], double aResult[2])
void getShiftAndSize (const utils::Rect &roi, utils::Size &size, double &xShift, double &yShift)

Static Private Member Functions

static void useMinMax (const double aCur[2], double aMin[2], double aMax[2])

Private Attributes

void(AffineOp::* m_aMethods [core::depthLast+1])(const core::ImgBase *poSrc, core::ImgBase *poDst)
 array of class methods used to transform depth8u and depth32f images More...
double m_aadT [2][3]
core::scalemode m_eInterpolate
bool m_adaptResultImage
 internal flag More...

Additional Inherited Members

- Public Types inherited from icl::utils::Configurable
typedef Function< void, const
Property & > 
 Function type for changed properties. More...
- Static Public Member Functions inherited from icl::filter::UnaryOp
static UnaryOpfromString (const std::string &definition) throw (utils::ICLException)
 Creates a UnaryOp instance from given string definition. More...
static std::string getFromStringSyntax (const std::string &opSpecifier) throw (utils::ICLException)
 gives a string syntax description for given opSpecifier More...
static std::vector< std::string > listFromStringOps ()
 returns a list of all supported OP_SPEC values for the fromString function More...
static void applyFromString (const std::string &definition, const core::ImgBase *src, core::ImgBase **dst) throw (utils::ICLException)
 creates, applies and releases a UnaryOp defined by given definition string More...
- Static Public Member Functions inherited from icl::utils::Configurable
static std::string create_default_ID (const std::string &prefix)
 this function can be used in subclasses to create a default ID More...
static Configurableget (const std::string &id)
 returns configurable by given ID More...
static void register_configurable_type (const std::string &classname, Function< Configurable * > creator) throw (ICLException)
 registers a configurable type More...
static std::vector< std::string > get_registered_configurables ()
 returns a list of all registered configurable classnames More...
static Configurablecreate_configurable (const std::string &classname) throw (ICLException)
 creates a configurable by given name More...
- Static Public Attributes inherited from icl::utils::Configurable
static const std::vector
< std::string > 
 used as shortcut – just an empty vector of std::strings More...
- Protected Member Functions inherited from icl::filter::UnaryOp
bool prepare (core::ImgBase **ppoDst, core::depth eDepth, const utils::Size &imgSize, core::format eFormat, int nChannels, const utils::Rect &roi, utils::Time timestamp=utils::Time::null)
virtual bool prepare (core::ImgBase **ppoDst, const core::ImgBase *poSrc)
 check+adapt destination image to properties of given source image More...
virtual bool prepare (core::ImgBase **ppoDst, const core::ImgBase *poSrc, core::depth eDepth)
- Protected Member Functions inherited from icl::utils::Configurable
void addProperty (const std::string &name, const std::string &type, const std::string &info, const Any &value=Any(), const int volatileness=0, const std::string &tooltip=std::string()) throw (ICLException)
 This can be used by derived classes to store supported properties in the internal list. More...
void addChildConfigurable (Configurable *configurable, const std::string &childPrefix="")
 This adds another configurable as child. More...
void removeChildConfigurable (Configurable *configurable)
 removes the given child configurable More...
Propertyprop (const std::string &propertyName) throw (ICLException)
 this CAN be used e.g. to store a property value in internal property-list More...
const Propertyprop (const std::string &propertyName) const throw (ICLException)
 this CAN be used e.g. to store a property value in internal property-list More...
 Configurable (const std::string &ID="", bool ordered=true) throw (ICLException)
 create this configurable with given ID More...
void call_callbacks (const std::string &propertyName, const Configurable *caller) const
 calls all registered callbacks More...
- Protected Member Functions inherited from icl::utils::Uncopyable
 Uncopyable ()
 Empty base constructor. More...
- Protected Attributes inherited from icl::filter::UnaryOp
- Protected Attributes inherited from icl::utils::Configurable
std::vector< Callbackcallbacks
 internally managed list of callbacks More...

Detailed Description

Class to apply an arbitrary series of affine transformations

Affine operations apply transform pixel locations using affine matrix transformation. To optimize performance concatenated affine transformation's matrices are pre-multiplied.

Adapt Result Image

In some cases, it might make sense to automatically adapt the destinate image so that it contains the whole warping result image. Consider the following example

source image:
A---------+                   +--/---\--+
|         |                   |/       |
|         |    -------->     /|         |\
|    A    |     rot(45)     + |    A'   | +
|         |                  |         |/
|         |                   |\       /|
+---------+                   +--\---/--+

But obviously, the result image's corners are cut. If the "Adapt Result Image" option is set to true, the result image would be scaled to contain the whole rotated image and the affine matrix's shift is adpated in order to fit the result completely into the result image. If otherwise "Adpat Result Image is false, the result image's size will be identical to the source images size and the corners of the rotated image are cropped.

Please note: this options is by default set to "true". Only the TranslateOp will set it to false by default, because a pure translation is just compensated completely by the result image adaption.


example: a 300x400 rgb 8u-image was scaled by 1.001 and rotated by 1-360 degree in 3.6 degree steps We used a 2Ghz Core2Duo machine and g++ 4.3 with -O4 and -march=native flags set

With IPP: neares neighbour interpolation: 1ms linear interpolation 5ms

C++-Fallback: neares neighbour interpolation: 22ms linear interpolation 52ms

Constructor & Destructor Documentation

icl::filter::AffineOp::AffineOp ( core::scalemode  eInterpolate = core::interpolateLIN)


Member Function Documentation

template<typename T >
void icl::filter::AffineOp::affine ( const core::ImgBase poSrc,
core::ImgBase poDst 
virtual void icl::filter::AffineOp::apply ( const core::ImgBase poSrc,
core::ImgBase **  ppoDst 

Applies the affine transform to the image.

Implements icl::filter::UnaryOp.

void icl::filter::AffineOp::applyT ( const double  p[2],
double  aResult[2] 
bool icl::filter::AffineOp::getAdaptResultImage ( ) const

returns the Adapt Result image option

See Also
Adapt Result Image
void icl::filter::AffineOp::getShiftAndSize ( const utils::Rect roi,
utils::Size size,
double &  xShift,
double &  yShift 
void icl::filter::AffineOp::reset ( )

resets the internal Matrix


1 0 0
0 1 0
0 0 
void icl::filter::AffineOp::rotate ( double  dAngle)

adds a rotation

dAngleangle in degrees (clockwise)
void icl::filter::AffineOp::scale ( double  x,
double  y 

adds a scale

xscale-factor in x-direction
yscale-factor in y-direction different values for x and y will lead to a dilation / upsetting deformation
void icl::filter::AffineOp::setAdaptResultImage ( bool  on)

sets whether the result image is is scaled and translated to contain the whole result image

See Also
Adapt Result Image
void icl::filter::AffineOp::translate ( double  x,
double  y 

adds a traslation

xpixels to translate in x-direction
ypixels to translate in y-direction
static void icl::filter::AffineOp::useMinMax ( const double  aCur[2],
double  aMin[2],
double  aMax[2] 

Member Data Documentation

double icl::filter::AffineOp::m_aadT[2][3]
bool icl::filter::AffineOp::m_adaptResultImage

internal flag

void(AffineOp::* icl::filter::AffineOp::m_aMethods[core::depthLast+1])(const core::ImgBase *poSrc, core::ImgBase *poDst)

array of class methods used to transform depth8u and depth32f images

core::scalemode icl::filter::AffineOp::m_eInterpolate

The documentation for this class was generated from the following file: