Image Component Library (ICL)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
icl::filter::FFTOp Class Reference

#include <FFTOp.h>

Inheritance diagram for icl::filter::FFTOp:
icl::filter::UnaryOp icl::utils::Configurable

Public Types

enum  SizeAdaptionMode {
  NO_SCALE, PAD_ZERO, PAD_COPY, PAD_MIRROR,
  SCALE_UP, SCALE_DOWN
}
 Modes how the sourceimage is to adapt before fftcomputation. More...
 
enum  ResultMode {
  TWO_CHANNEL_COMPLEX, IMAG_ONLY, REAL_ONLY, POWER_SPECTRUM,
  LOG_POWER_SPECTRUM, MAGNITUDE_ONLY, PHASE_ONLY, TWO_CHANNEL_MAGNITUDE_PHASE
}
 Modes how the destinationimage will be created. More...
 
- Public Types inherited from icl::utils::Configurable
typedef Function< void, const
Property & > 
Callback
 Function type for changed properties. More...
 

Public Member Functions

 FFTOp (ResultMode rm=LOG_POWER_SPECTRUM, SizeAdaptionMode sam=NO_SCALE, bool fftshift=true, bool forceDFT=false)
 Creates a new FFTOp-object. More...
 
 ~FFTOp ()
 
void setResultMode (ResultMode rm)
 Sets the resultmode. More...
 
int getResultMode ()
 Returns the resultmode as int. More...
 
void setSizeAdaptionMode (SizeAdaptionMode sam)
 Sets the sizeadaptionmode. More...
 
int getSizeAdaptionMode ()
 Returns the sizeadaptionmode. More...
 
bool getForceDFT ()
 Returns true if the diskrete fourier transfarmation shall be used, else false. More...
 
void setForceDFT (bool pForceDFT)
 Set wether to force the diskrete fourier transformation or to use the fast fourier transformation. More...
 
void setFFTShift (bool pFFTShift)
 Set wether to fftshift the destinationimage or not. More...
 
bool getFFTShift ()
 Returns the current value for fftshift. More...
 
virtual void apply (const core::ImgBase *src, core::ImgBase **dst)
 Call this method to start fftcomputation. 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<class SrcT , class DstT >
void apply_internal (const core::Img< SrcT > &src, core::Img< DstT > &dst, math::DynMatrix< std::complex< DstT > > &buf, math::DynMatrix< std::complex< DstT > > &dstBuf)
 
template<class T >
const core::Img< T > * adapt_source (const core::Img< T > *src)
 
template<typename T >
void apply_inplace_fftshift (math::DynMatrix< T > &m)
 

Private Attributes

Data * m_data
 Class for internal params and buffers. More...
 

Additional Inherited Members

- 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 > 
EMPTY_VEC
 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 Attributes inherited from icl::filter::UnaryOp
utils::MultiThreaderm_poMT
 
- Protected Attributes inherited from icl::utils::Configurable
std::vector< Callbackcallbacks
 internally managed list of callbacks More...
 

Detailed Description

This class implements the unary operator for the fast and discrete 2D fourier transformation. As known the fft can only be applied if the datasize is a power of 2. This implementation uses the fft as far as it can be applied and switches to the dft, so you can use it if datasize is not a power of 2 too. If MKL or IPP is available, FFTOp tries to use it if possible.

Simple FFT-computation demo

#include <ICLQuick/Common.h>
using namespace icl;
GUI gui;
void init(){...}
int main(int n, char **args){
pa_init(n,args,"-input|-i(filename)",init);
Img32f src = load(*pa("-i"));
const ImgBase *dst = fftop.apply(&src);
// note: icl-xv must be within your PATH
show(norm(cvt(dst)));
}

fft.jpg

Save the above sourcecode to a file, compile and link it. Execute it: ./appname -input pic.jpg

Region Mean Algorithm

These modes configure the way the destinationimage (the result of the fft) shall be returned. Different results like logpowerspectrum, real part or phase and magnitude can be obtained. (see icl::FFTOp::ResultMode)

Sizeadaption modes

These modes configure the sourceimage before processing the fft. The sourceimage can be scaled up, so that the datasize is a power of 2 (this is needed if you want to use the IPP acceleration or the faster part of the fallback). You can also scale the image down, leave it as it is or create a border and fill it with several methods. (see icl::filter::FFTOp::SizeAdaptionMode)

Intel Ipp/Intel MKL acceleration

If you own the Intel IPP or MKL library, the computation of the fft can be accelarated by using it. The IPP functions assume a datasize of power of 2 (see icl::filter::FFTOp::SizeAdaptionMode). If IPP is available on you system and the datasize is a power of 2, it will be used automatacally. If MKL is available on your system, it will be used if IPP is not available or the datasize is not a power of 2. If IPP and MKL are not available, the fallback will be used. The MKL and fallback functions support also datasizes which are not power of 2. Supported source and destinationtypes:

dst/srcicl8uicl16sicl32sicl32ficl64f
icl32fIPP/MKLIPP/MKLIPP/MKLIPP/MKLMKL
icl64fMKLMKLMKLMKLMKL

Benchmarks

The following benchmark has been done on Intel Dual Core 2.4GHz CPU on a PC with 2GiB RAM. Since IPP and MKL provide their fft results in a packed format, the time for unpacking is included in this benchmarks. Also IPP and MKL do not support every possible sourcetype, so time for typeconversation is also included if necessary. All times are provided in ms per channel.:

lib/size (format)QVGA(320x240)HVGA(480x320)VGA(640x480)SVGA(800x600)XGA(1024x768)DSVGA(1200x800)512x5121024x1024
IPP- - - - - - 4 21
MKL1 2 7 12 36 266 58
FB214 440 896 5509 1395 11064 438 1915

Member Enumeration Documentation

Modes how the destinationimage will be created.

Several resultmodes for destinationimage.

Enumerator
TWO_CHANNEL_COMPLEX 

alternates real- and imaginarypart of fftcomputation

IMAG_ONLY 

imaginarypart of fftcomputation

REAL_ONLY 

realpart of fftcomputation

POWER_SPECTRUM 

powerspectrum of fftcomputation

LOG_POWER_SPECTRUM 

logpowerspectrum of fftcomputation

MAGNITUDE_ONLY 

magnitude of fftcomputation

PHASE_ONLY 

phase of fftcomputation

TWO_CHANNEL_MAGNITUDE_PHASE 

alternates magnitude and phase of fftcomputation

Modes how the sourceimage is to adapt before fftcomputation.

Several sizeadaptionmodes for sourceimageadaption

Enumerator
NO_SCALE 

sourceimage stays as is

PAD_ZERO 

creates a border with zeros around the sourceimage(new size is next power of 2 after originsize, or origanalsize if it is power of 2)

PAD_COPY 

continues the image with copies the sourceimage(new size is next power of 2 after originsize, or origanalsize if it is power of 2)

PAD_MIRROR 

mirrors the image on the edges of the sourceimage(new size is next power of 2 after originsize, or origanalsize if it is power of 2)

SCALE_UP 

zooms to next higher power of 2 of originsize, or origanalsize if it is power of 2

SCALE_DOWN 

zooms to next lower power of 2 of originsize, or origanalsize if it is power of 2

Constructor & Destructor Documentation

icl::filter::FFTOp::FFTOp ( ResultMode  rm = LOG_POWER_SPECTRUM,
SizeAdaptionMode  sam = NO_SCALE,
bool  fftshift = true,
bool  forceDFT = false 
)

Creates a new FFTOp-object.

Constructor. Params can be changed later.

Parameters
rmthe resultmode
samthe sizeadaptionmode before applying FFTOp
fftshiftwether to apply fftshift to destinationimage after fftcomputation or not*
forceDFTwether to apply dft or fft
icl::filter::FFTOp::~FFTOp ( )

Destructor

Member Function Documentation

template<class T >
const core::Img<T>* icl::filter::FFTOp::adapt_source ( const core::Img< T > *  src)
private

Called by apply. Adapts sourceimage to specified values(scaling, padding on so on).Possible sourceparam is: Img<icl8u>, Img<icl16s>, Img<icl32s>, Img<icl32f>, Img<icl64f>

virtual void icl::filter::FFTOp::apply ( const core::ImgBase src,
core::ImgBase **  dst 
)
virtual

Call this method to start fftcomputation.

Applies FFTOp on src and dst.

Parameters
*srcpointer to sourceimage
**dstpointer to pointer to destinationimage

Implements icl::filter::UnaryOp.

template<typename T >
void icl::filter::FFTOp::apply_inplace_fftshift ( math::DynMatrix< T > &  m)
private

Applies inplace fftshift on destinationimage after fftcomputation. Possible sourceparam is: Img<icl32f> and Img<icl64f>

template<class SrcT , class DstT >
void icl::filter::FFTOp::apply_internal ( const core::Img< SrcT > &  src,
core::Img< DstT > &  dst,
math::DynMatrix< std::complex< DstT > > &  buf,
math::DynMatrix< std::complex< DstT > > &  dstBuf 
)
private

Called by apply. Applies fft/dft and resultmode. Possible sourceparam is: Img<icl8u>, Img<icl16s>, Img<icl32s>, Img<icl32f>, Img<icl64f>. Possible destinationparam is: Img<icl32f> and Img<icl64f>.

bool icl::filter::FFTOp::getFFTShift ( )

Returns the current value for fftshift.

Returns
true if destinationimage is to be fftshifted, else false
bool icl::filter::FFTOp::getForceDFT ( )

Returns true if the diskrete fourier transfarmation shall be used, else false.

Returns
true if dft should be used, false if fft should be used
int icl::filter::FFTOp::getResultMode ( )

Returns the resultmode as int.

Returns
the current resultmode.
int icl::filter::FFTOp::getSizeAdaptionMode ( )

Returns the sizeadaptionmode.

Returns
the current sizeadationmode
void icl::filter::FFTOp::setFFTShift ( bool  pFFTShift)

Set wether to fftshift the destinationimage or not.

Parameters
pFFTShifttrue if the destinationimage should be shifted, else false
void icl::filter::FFTOp::setForceDFT ( bool  pForceDFT)

Set wether to force the diskrete fourier transformation or to use the fast fourier transformation.

Parameters
pForceDFT
void icl::filter::FFTOp::setResultMode ( ResultMode  rm)

Sets the resultmode.

Parameters
rmthe resultmode to be set
void icl::filter::FFTOp::setSizeAdaptionMode ( SizeAdaptionMode  sam)

Sets the sizeadaptionmode.

Parameters
samthe sizeadaptionmode to be set

Member Data Documentation

Data* icl::filter::FFTOp::m_data
private

Class for internal params and buffers.


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