Image Component Library (ICL)
|
#include <FFTOp.h>
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... | |
virtual void | apply (const core::ImgBase *operand1, core::ImgBase **dst)=0 |
Import unaryOps apply function without destination image. More... | |
virtual const core::ImgBase * | apply (const core::ImgBase *src) |
Import unaryOps apply function without destination image. More... | |
Public Member Functions inherited from icl::filter::UnaryOp | |
UnaryOp () | |
Explicit empty constructor. More... | |
UnaryOp (const UnaryOp &other) | |
Explicit copy constructor. More... | |
UnaryOp & | operator= (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::ImgBase * | apply (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::ImgBase * | operator() (const core::ImgBase *src) |
function operator for the implicit destination apply(src) call More... | |
const core::ImgBase & | operator() (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) |
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... | |
Configurable & | operator= (const Configurable &other) |
Assignment operator. More... | |
void | setConfigurableID (const std::string &ID) |
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) |
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 UnaryOp * | fromString (const std::string &definition) |
Creates a UnaryOp instance from given string definition. More... | |
static std::string | getFromStringSyntax (const std::string &opSpecifier) |
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) |
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 Configurable * | get (const std::string &id) |
returns configurable by given ID More... | |
static void | register_configurable_type (const std::string &classname, Function< Configurable * > creator) |
registers a configurable type More... | |
static std::vector< std::string > | get_registered_configurables () |
returns a list of all registered configurable classnames More... | |
static Configurable * | create_configurable (const std::string &classname) |
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()) |
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... | |
Property & | prop (const std::string &propertyName) |
this CAN be used e.g. to store a property value in internal property-list More... | |
const Property & | prop (const std::string &propertyName) const |
this CAN be used e.g. to store a property value in internal property-list More... | |
Configurable (const std::string &ID="", bool ordered=true) | |
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::MultiThreader * | m_poMT |
Protected Attributes inherited from icl::utils::Configurable | |
std::vector< Callback > | callbacks |
internally managed list of callbacks More... | |
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.
#include <ICLQuick/Common.h> #include <ICLFilter/FFTOp.h> using namespace icl; GUI gui; void init(){...} int main(int n, char **args){ pa_init(n,args,"-input|-i(filename)",init); const ImgBase *dst = fftop.apply(&src); // note: icl-xv must be within your PATH } |
Save the above sourcecode to a file, compile and link it. Execute it: ./appname -input pic.jpg
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)
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)
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/src | icl8u | icl16s | icl32s | icl32f | icl64f |
icl32f | IPP/MKL | IPP/MKL | IPP/MKL | IPP/MKL | MKL |
icl64f | MKL | MKL | MKL | MKL | MKL |
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) | 512x512 | 1024x1024 |
IPP | - | - | - | - | - | - | 4 | 21 |
MKL | 1 | 2 | 7 | 12 | 36 | 26 | 6 | 58 |
FB | 214 | 440 | 896 | 5509 | 1395 | 11064 | 438 | 1915 |
Modes how the destinationimage will be created.
Several resultmodes for destinationimage.
Modes how the sourceimage is to adapt before fftcomputation.
Several sizeadaptionmodes for sourceimageadaption
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.
rm | the resultmode |
sam | the sizeadaptionmode before applying FFTOp |
fftshift | wether to apply fftshift to destinationimage after fftcomputation or not* |
forceDFT | wether to apply dft or fft |
icl::filter::FFTOp::~FFTOp | ( | ) |
Destructor
|
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 |
Call this method to start fftcomputation.
Applies FFTOp on src and dst.
*src | pointer to sourceimage |
**dst | pointer to pointer to destinationimage |
Implements icl::filter::UnaryOp.
virtual void icl::filter::UnaryOp::apply |
Import unaryOps apply function without destination image.
virtual const core::ImgBase* icl::filter::UnaryOp::apply |
Import unaryOps apply function without destination image.
|
private |
Applies inplace fftshift on destinationimage after fftcomputation. Possible sourceparam is: Img<icl32f> and Img<icl64f>
|
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.
bool icl::filter::FFTOp::getForceDFT | ( | ) |
Returns true if the diskrete fourier transfarmation shall be used, else false.
int icl::filter::FFTOp::getResultMode | ( | ) |
Returns the resultmode as int.
int icl::filter::FFTOp::getSizeAdaptionMode | ( | ) |
Returns the sizeadaptionmode.
void icl::filter::FFTOp::setFFTShift | ( | bool | pFFTShift | ) |
Set wether to fftshift the destinationimage or not.
pFFTShift | true 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.
pForceDFT |
void icl::filter::FFTOp::setResultMode | ( | ResultMode | rm | ) |
Sets the resultmode.
rm | the resultmode to be set |
void icl::filter::FFTOp::setSizeAdaptionMode | ( | SizeAdaptionMode | sam | ) |
Sets the sizeadaptionmode.
sam | the sizeadaptionmode to be set |
|
private |
Class for internal params and buffers.