| 
    latest version v1.9 - last update 10 Apr 2010 | 
      | 
   
The Guy-Medioni saliency is a procedure for perceptual grouping of low level features like points and edges. More...
#include <ltiGuyMedioniSaliency.h>


Classes | |
| class | parameters | 
| the parameters for the class guyMedioniSaliency  More... | |
Public Member Functions | |
| guyMedioniSaliency () | |
| guyMedioniSaliency (const parameters &par) | |
| guyMedioniSaliency (const guyMedioniSaliency &other) | |
| virtual | ~guyMedioniSaliency () | 
| virtual const char * | getTypeName () const | 
| bool | apply (const channel &edgeRelevance, const channel &orientation, channel &saliencyLambdaX, channel &saliencyLambdaY) | 
| bool | apply (const channel &edgeRelevance, const channel &orientation, channel &saliency) | 
| bool | apply (const channel &edgeRelevance, const channel &orientation, channel &saliency, channel &angle, float &maxSaliency) | 
| const matrix< float > & | getExtensionFieldX () const | 
| const matrix< float > & | getExtensionFieldY () const | 
| const matrix< float > & | getExtensionFieldM () const | 
| guyMedioniSaliency & | copy (const guyMedioniSaliency &other) | 
| guyMedioniSaliency & | operator= (const guyMedioniSaliency &other) | 
| virtual functor * | clone () const | 
| const parameters & | getParameters () const | 
| virtual bool | updateParameters () | 
Protected Member Functions | |
| void | accumulate (const channel &edgeRelevance, const channel &orientation, const float threshold) | 
| void | getSaliency (channel &salLambdaMax, channel &salLambdaMin) | 
| void | getSaliency (channel &sal) | 
| void | getSaliency (channel &sal, channel &angle, float &maxSaliency) | 
Protected Attributes | |
| arctanLUT | atan2 | 
Saliency Accumulators  | |
| matrix< float > | sumx2 | 
| matrix< float > | sumy2 | 
| matrix< float > | sumxy | 
Extension Field | |
| 
 | |
| matrix< float > | extensionFieldX | 
| matrix< float > | extensionFieldY | 
| matrix< float > | extensionFieldM | 
| bilinearInterpolator< float > | ifieldX | 
| bilinearInterpolator< float > | ifieldY | 
| point | extFieldCenter | 
| int | extFieldRadius | 
| imatrix | extFieldCircle | 
| float | fieldThreshold | 
| bool | generateExtensionField () | 
| void | vote (const point p, const float angle, const float weight) | 
The Guy-Medioni saliency is a procedure for perceptual grouping of low level features like points and edges.
For this task it computes first a extension field, an based on it a saliency map, where only perceptual relevant features survive, or illusory ones appear.
As input it expects the output of an orientation map, with a relevance channel and an orientation channel. The relevance can be replaced by an edge map. With a threshold-parameter you can decide how much relevant a pixel must be in order to be considered in the saliency map.
The original theory can be found in:
G. Guy and G. Medioni. "Inferring global perceptual contours from local features" International Journal of Computer Vision, Vol.20, No.1/2, 1996, pp. 113-133
http://citeseer.nj.nec.com/guy96inferring.html
Example:
lti::image img; lti::channel chnl,rel,ori; lti::channel sal,sala; lti::channel8 rel8; float maxSal; // load an image (suppose you have one in the directory ../img/ called // image1.bmp) lti::loadImage loader; loader.load("../img/image1.bmp",img); chnl.castFrom(img); // convert the color image into a gray valued one // get the edges and orientation channels lti::cannyEdges canny; canny.apply(chnl,rel8,ori); rel.castFrom(rel8); // get the Guy-Medioni saliency (sal) and the orientation (sala) // and the maximal value found in the sal channel (maxSal). lti::guyMedioniSaliency gmSaliency; gmSaliency.apply(rel,ori,sal,sala,maxSal);
The saliency channel is somehow blurred. You can use the lti::nonMaximaSuppression to get again an edge channel from the saliency:
lti::channel8 newEdges; lti::nonMaximaSuppression suppressor; suppressor.apply(sal,sala,newEdges,maxSal);
| lti::guyMedioniSaliency::guyMedioniSaliency | ( | ) | 
default constructor
| lti::guyMedioniSaliency::guyMedioniSaliency | ( | const parameters & | par | ) | 
Construct a functor using the given parameters.
| lti::guyMedioniSaliency::guyMedioniSaliency | ( | const guyMedioniSaliency & | other | ) | 
copy constructor
| other | the object to be copied | 
| virtual lti::guyMedioniSaliency::~guyMedioniSaliency | ( | ) |  [virtual] | 
        
destructor
| void lti::guyMedioniSaliency::accumulate | ( | const channel & | edgeRelevance, | |
| const channel & | orientation, | |||
| const float | threshold | |||
| ) |  [protected] | 
        
compute the first step of the saliency, accumulating the fields of each edge-element.
| bool lti::guyMedioniSaliency::apply | ( | const channel & | edgeRelevance, | |
| const channel & | orientation, | |||
| channel & | saliency, | |||
| channel & | angle, | |||
| float & | maxSaliency | |||
| ) | 
Generates the enhanced saliency measure.
This method is more efficient than to compute both lambda channels with the alternative apply() method and to subtract them.
| edgeRelevance | Relevance for each pixel. It can be an edge image. | |
| orientation | Orientation of each pixel. Please note that the orientation channel expected by this functor contains the angle perpendicular to the edgels as returned by the gradient or orientationMap functors. | |
| saliency | resulting saliency channel. | |
| angle | resulting direction for each pixel | |
| maxSaliency | maximum saliency value. | 
| bool lti::guyMedioniSaliency::apply | ( | const channel & | edgeRelevance, | |
| const channel & | orientation, | |||
| channel & | saliency | |||
| ) | 
Generates the enhanced saliency measure.
This method is more efficient than to compute both lambda channels with the alternative apply() method and to subtract them.
| edgeRelevance | Relevance for each pixel. It can be an edge image. | |
| orientation | Orientation of each pixel. Please note that the orientation channel expected by this functor contains the angle perpendicular to the edgels as returned by the gradient or orientationMap functors. | |
| saliency | resulting saliency channel. | 
| bool lti::guyMedioniSaliency::apply | ( | const channel & | edgeRelevance, | |
| const channel & | orientation, | |||
| channel & | saliencyLambdaX, | |||
| channel & | saliencyLambdaY | |||
| ) | 
Generates the raw saliency and junction saliency maps using Guy-Medioni's approach.
To obtain the final saliency it is more efficient to use the alternative apply() method than to subtract both lambda channels.
| edgeRelevance | Relevance for each pixel. It can be an edge image. | |
| orientation | Orientation of each pixel. Please note that the orientation channel expected by this functor contains the angle perpendicular to the edgels as returned by the gradient or orientationMap functors. | |
| saliencyLambdaX | resulting major eigenvalue: raw saliency. | |
| saliencyLambdaY | resulting minor eigenvalues: junction saliency. | 
| virtual functor* lti::guyMedioniSaliency::clone | ( | ) |  const [virtual] | 
        
returns a pointer to a clone of this functor.
Implements lti::functor.
| guyMedioniSaliency& lti::guyMedioniSaliency::copy | ( | const guyMedioniSaliency & | other | ) | 
copy data of "other" functor.
| other | the functor to be copied | 
Reimplemented from lti::functor.
| bool lti::guyMedioniSaliency::generateExtensionField | ( | ) |  [protected] | 
        
generate extension field
Based on the parameters object, a "kernel" oriented with 0 degrees will be constructed.
| const matrix<float>& lti::guyMedioniSaliency::getExtensionFieldM | ( | ) | const | 
Return a read only copy of the magnitude of the extension field.
The returned field component will be updated after setParameters().
| const matrix<float>& lti::guyMedioniSaliency::getExtensionFieldX | ( | ) | const | 
Return a read only copy of the x component of the extension field.
The returned field component will be updated after setParameters().
| const matrix<float>& lti::guyMedioniSaliency::getExtensionFieldY | ( | ) | const | 
Return a read only copy of the y component of the extension field.
The returned field component will be updated after setParameters().
| const parameters& lti::guyMedioniSaliency::getParameters | ( | ) | const | 
returns used parameters
Reimplemented from lti::modifier.
| void lti::guyMedioniSaliency::getSaliency | ( | channel & | sal, | |
| channel & | angle, | |||
| float & | maxSaliency | |||
| ) |  [protected] | 
        
From the accumulated members compute the saliency components.
| void lti::guyMedioniSaliency::getSaliency | ( | channel & | sal | ) |  [protected] | 
        
From the accumulated members compute the saliency components.
| void lti::guyMedioniSaliency::getSaliency | ( | channel & | salLambdaMax, | |
| channel & | salLambdaMin | |||
| ) |  [protected] | 
        
From the accumulated members compute the saliency components.
| virtual const char* lti::guyMedioniSaliency::getTypeName | ( | ) |  const [virtual] | 
        
returns the name of this type ("guyMedioniSaliency")
Reimplemented from lti::modifier.
| guyMedioniSaliency& lti::guyMedioniSaliency::operator= | ( | const guyMedioniSaliency & | other | ) | 
| virtual bool lti::guyMedioniSaliency::updateParameters | ( | ) |  [virtual] | 
        
Update functor's parameters.
This member updates the internal fields according to the values set in the parameters.
Reimplemented from lti::functor.
| void lti::guyMedioniSaliency::vote | ( | const point | p, | |
| const float | angle, | |||
| const float | weight | |||
| ) |  [protected] | 
        
arctanLUT lti::guyMedioniSaliency::atan2 [protected] | 
        
Look up table for sin values.
Look up table for cos values LUT to compute the arc tangent
matrix<float> lti::guyMedioniSaliency::extensionFieldM [protected] | 
        
Magnitude of the extension field currently used.
matrix<float> lti::guyMedioniSaliency::extensionFieldX [protected] | 
        
x component of the extension field currently used
matrix<float> lti::guyMedioniSaliency::extensionFieldY [protected] | 
        
y component of the extension field currently used
point lti::guyMedioniSaliency::extFieldCenter [protected] | 
        
Center of the extension field.
imatrix lti::guyMedioniSaliency::extFieldCircle [protected] | 
        
Matrix containing the ioPoints of a circle covering the relevant extension field.
int lti::guyMedioniSaliency::extFieldRadius [protected] | 
        
Extension field radius.
float lti::guyMedioniSaliency::fieldThreshold [protected] | 
        
Threshold for the extension field magnitude.
bilinearInterpolator<float> lti::guyMedioniSaliency::ifieldX [protected] | 
        
interpolator for extensionFieldX
bilinearInterpolator<float> lti::guyMedioniSaliency::ifieldY [protected] | 
        
interpolator for extensionFieldY
matrix<float> lti::guyMedioniSaliency::sumx2 [protected] | 
        
sum of the x^2 components
matrix<float> lti::guyMedioniSaliency::sumxy [protected] | 
        
sum of the xy components
matrix<float> lti::guyMedioniSaliency::sumy2 [protected] | 
        
sum of the y^2 components