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