Image Component Library (ICL)
Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
icl::filter::GaborOp Class Reference

Applies Gabor filter operation on images. More...

#include <GaborOp.h>

Inheritance diagram for icl::filter::GaborOp:
icl::filter::UnaryOp icl::utils::Uncopyable icl::utils::Configurable

Public Member Functions

 GaborOp ()
 creates an empty GaborOp More...
 
 GaborOp (const utils::Size &kernelSize, std::vector< icl32f > lambdas, std::vector< icl32f > thetas, std::vector< icl32f > psis, std::vector< icl32f > sigmas, std::vector< icl32f > gammas)
 creates a new gabor op with given kernel size and parameters More...
 
 ~GaborOp ()
 
void setKernelSize (const utils::Size &size)
 sets the current kernel size More...
 
void addLambda (float lambda)
 add a new lambda value More...
 
void addTheta (float theta)
 add a new theta value More...
 
void addPsi (float psi)
 add a new psi value More...
 
void addSigma (float sigma)
 add a new sigma value More...
 
void addGamma (float gamma)
 add a new gamma value More...
 
void updateKernels ()
 update the current kernels by currently possible value combinations More...
 
virtual void apply (const core::ImgBase *poSrc, core::ImgBase **ppoDst)
 apply all filters to an image More...
 
std::vector< icl32fapply (const core::ImgBase *poSrc, const utils::Point &p)
 apply all filters to an image at a specific position More...
 
const std::vector< core::Img32f > & getKernels () const
 returns all currently created kernels More...
 
virtual void apply (const core::ImgBase *operand1, core::ImgBase **dst)=0
 Import unaryOps apply function without destination image. More...
 
virtual const core::ImgBaseapply (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...
 
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)
 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)
 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...
 

Static Public Member Functions

static core::Img32fcreateKernel (const utils::Size &size, float lambda, float theta, float psi, float sigma, float gamma)
 static function to create a gabor kernel by given gabor parameters More...
 
- Static Public Member Functions inherited from icl::filter::UnaryOp
static UnaryOpfromString (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 Configurableget (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 Configurablecreate_configurable (const std::string &classname)
 creates a configurable by given name More...
 

Private Attributes

std::vector< icl32fm_vecLambdas
 
std::vector< icl32fm_vecThetas
 
std::vector< icl32fm_vecPsis
 
std::vector< icl32fm_vecSigmas
 
std::vector< icl32fm_vecGammas
 
std::vector< core::Img32fm_vecKernels
 
std::vector< core::ImgBase * > m_vecResults
 
utils::Size m_oKernelSize
 

Additional Inherited Members

- Public Types inherited from icl::utils::Configurable
typedef Function< void, const Property & > Callback
 Function type for changed properties. 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...
 
Propertyprop (const std::string &propertyName)
 this CAN be used e.g. to store a property value in internal property-list More...
 
const Propertyprop (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 Member Functions inherited from icl::utils::Uncopyable
 Uncopyable ()
 Empty base constructor. 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

Applies Gabor filter operation on images.

General Information

A short introduction to Gabor filters can be found at Wikipedia: A Gabor filter is a linear filter whose impulse response is defined by a harmonic function multiplied by a Gaussian function. Because of the multiplication-convolution property, the Fourier transform of a Gabor filter's impulse response is the convolution of the Fourier transform of the harmonic function and the Fourier transform of the Gaussian function.

\[ g(x,y;\lambda,\theta,\psi,\sigma,\gamma)=\exp(-\frac{x'^2+\gamma^2y'^2}{2\sigma^2})\cos(2\pi\frac{x'}{\lambda}+\psi) \]

where

\[ x' = x \cos\theta + y \sin\theta\, \]

and

\[ y' = -x \sin\theta + y \cos\theta\, \]

In this equation, $\lambda$ represents the wavelength of the cosine factor, $\theta$ represents the orientation of the normal to the parallel stripes of a Gabor function in degrees, $\psi$ is the phase offset in degrees, and $\gamma$ is the spatial aspect ratio, and specifies the ellipticity of the support of the Gabor function.

Gabor filters are directly related to Gabor wavelets, since they can be designed for number of dilations and rotations. However, in general, expansion is not applied for Gabor wavelets, since this requires computation of biorthogonal wavelets, which may be very time-consuming. Therefore, usually, a filter bank consisting of Gabor filters with various scales and rotations is created. The filters are convolved with the signal, resulting in a so-called Gabor space. This process is closely related to processes in the primary visual cortex. The Gabor space is very useful in e.g., image processing applications such as iris recognition. Relations between activations for a specific spatial location are very distinctive between objects in an image. Furthermore, important activations can be extracted from the Gabor space in order to create a sparse object representation (cite http://en.wikipedia.org/wiki/Gabor_filter).

The GaborOp class

The GaborOp class provides basic functionalities for applying Gabor filters on Images. To achieve optimal performance, it wraps the ConvolutionOp class to realize the internal image convolution operations. Determined by a set op input parameters, it internally creates a filter bank that caches all gabor masks. In contrast to other filters, it knows two modes:

  1. whole image mode in this mode, the filter bank image applied on the whole input image, and an output image is created with one channel for each filter. This mode works essentially like all other UnaryOps.
  2. specified center mode here, the filters are applied not on all image locations, but on some well defined image locations. The result is not an image, but a matrix of filter responses, where the matrix's x index references the convolution center, and the y index then defines the filter index on this location. (... some more detail here!)

The GaborOp class provides functionalities for the creation of Gabor-Filter kernels, as well as for applying gabor filter operation on images. As mentioned above, in contrast to other convolution operations, Gabor filters are often applied as so called Gabor-Jets at some specified image locations only. A Gabor-Jet complies a stack of gabor kernels that are created by some methodical variation of one, some or all gabor mask parameters.
Each GaborOp object provide function to create a gabor jet internally, whereas in the easiest case, there is only one value for each parameter, an consequently, only a single gabor mask is created.
In addition to the parameters mentioned in the formula above, the size of the created gabor kernels must be set, and the parameter values must be adapted to to it. In the following, each parameter is explained again, but this time with respect to its underlying effect for a kernel size of KWxKH.

Constructor & Destructor Documentation

◆ GaborOp() [1/2]

icl::filter::GaborOp::GaborOp ( )

creates an empty GaborOp

◆ GaborOp() [2/2]

icl::filter::GaborOp::GaborOp ( const utils::Size kernelSize,
std::vector< icl32f lambdas,
std::vector< icl32f thetas,
std::vector< icl32f psis,
std::vector< icl32f sigmas,
std::vector< icl32f gammas 
)

creates a new gabor op with given kernel size and parameters

The Gabor-Jet internally created consist of one convolution kernel for each possible combination of the parameter values. E.g. if the parameters are:

  • lambdas = {5}
  • thetas = {1,2}
  • psis = {0}
  • sigmas = {100,200}
  • and gammas = {1]

the gabor jet consist of 4 convolution kernels with fixed params $\lambda=5$, $\psi=0$, $\gamma=1$ and variable params

  1. $\theta=1$ and $\sigma=100$
  2. $\theta=2$ and $\sigma=100$
  3. $\theta=1$ and $\sigma=200$
  4. $\theta=2$ and $\sigma=200$

◆ ~GaborOp()

icl::filter::GaborOp::~GaborOp ( )

Member Function Documentation

◆ addGamma()

void icl::filter::GaborOp::addGamma ( float  gamma)

add a new gamma value

◆ addLambda()

void icl::filter::GaborOp::addLambda ( float  lambda)

add a new lambda value

◆ addPsi()

void icl::filter::GaborOp::addPsi ( float  psi)

add a new psi value

◆ addSigma()

void icl::filter::GaborOp::addSigma ( float  sigma)

add a new sigma value

◆ addTheta()

void icl::filter::GaborOp::addTheta ( float  theta)

add a new theta value

◆ apply() [1/4]

virtual void icl::filter::GaborOp::apply ( const core::ImgBase poSrc,
core::ImgBase **  ppoDst 
)
virtual

apply all filters to an image

The output image gets as many channels as kernels could be created by combining given parameters. Channels c of ppoDst is complies the convolution result of the c-th kernel.

Implements icl::filter::UnaryOp.

◆ apply() [2/4]

virtual void icl::filter::UnaryOp::apply

Import unaryOps apply function without destination image.

◆ apply() [3/4]

virtual const core::ImgBase* icl::filter::UnaryOp::apply

Import unaryOps apply function without destination image.

◆ apply() [4/4]

std::vector<icl32f> icl::filter::GaborOp::apply ( const core::ImgBase poSrc,
const utils::Point p 
)

apply all filters to an image at a specific position

The result vector contains the filter-response for all kernels

◆ createKernel()

static core::Img32f* icl::filter::GaborOp::createKernel ( const utils::Size size,
float  lambda,
float  theta,
float  psi,
float  sigma,
float  gamma 
)
static

static function to create a gabor kernel by given gabor parameters

As reminder:

\[ g(x,y;\lambda,\theta,\psi,\sigma,\gamma)=\exp(-\frac{x'^2+\gamma^2y'^2}{2\sigma^2})\cos(2\pi\frac{x'}{\lambda}+\psi) \]

where

\[ x' = x \cos\theta + y \sin\theta\, \]

and

\[ y' = -x \sin\theta + y \cos\theta\, \]

◆ getKernels()

const std::vector<core::Img32f>& icl::filter::GaborOp::getKernels ( ) const
inline

returns all currently created kernels

◆ setKernelSize()

void icl::filter::GaborOp::setKernelSize ( const utils::Size size)

sets the current kernel size

if the kernels have already been created, they are updated to this new size value

◆ updateKernels()

void icl::filter::GaborOp::updateKernels ( )

update the current kernels by currently possible value combinations

Member Data Documentation

◆ m_oKernelSize

utils::Size icl::filter::GaborOp::m_oKernelSize
private

◆ m_vecGammas

std::vector<icl32f> icl::filter::GaborOp::m_vecGammas
private

◆ m_vecKernels

std::vector<core::Img32f> icl::filter::GaborOp::m_vecKernels
private

◆ m_vecLambdas

std::vector<icl32f> icl::filter::GaborOp::m_vecLambdas
private

◆ m_vecPsis

std::vector<icl32f> icl::filter::GaborOp::m_vecPsis
private

◆ m_vecResults

std::vector<core::ImgBase*> icl::filter::GaborOp::m_vecResults
private

◆ m_vecSigmas

std::vector<icl32f> icl::filter::GaborOp::m_vecSigmas
private

◆ m_vecThetas

std::vector<icl32f> icl::filter::GaborOp::m_vecThetas
private

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