last update 20 Sep 2009 |
#include <cvrFastHessianDetection.h>
Classes | |
class | parameters |
The parameters for the class fastHessianDetection. More... | |
Public Types | |
enum | eExtremaType { Minima, Maxima, Both } |
enum | eLevelSelectionMethod { Blocks, Exponential } |
enum | eLocationSelectionMode { All, Absolute, Relative, Conspicuous, Number } |
Public Member Functions | |
fastHessianDetection () | |
fastHessianDetection (const parameters &par) | |
fastHessianDetection (const fastHessianDetection &other) | |
virtual | ~fastHessianDetection () |
virtual bool | apply (const channel8 &src, list< location > &locs) const |
bool | apply (const channel8 &src, list< location > &locs, list< float > &strength) const |
bool | apply (const channel8 &src, list< location > &locs, list< float > &strength, int &numLocs) const |
virtual bool | apply (const channel8 &src, list< location > &locs, int &numLocs) const |
virtual bool | apply (const channel &src, list< location > &locs) const |
bool | apply (const channel &src, list< location > &locs, list< float > &strength) const |
bool | apply (const channel &src, list< location > &locs, list< float > &strength, int &numLocs) const |
virtual bool | apply (const channel &src, list< location > &locs, int &numLocs) const |
bool | sort (const list< location > &locs, const list< float > &strength, std::vector< location > &sortedLocs, fvector &sortedStrength) const |
fastHessianDetection & | copy (const fastHessianDetection &other) |
fastHessianDetection & | operator= (const fastHessianDetection &other) |
virtual const std::string & | name () const |
virtual fastHessianDetection * | clone () const |
virtual fastHessianDetection * | newInstance () const |
const parameters & | getParameters () const |
bool | updateParameters () |
The class cvr::fastHessianDetection is one of the available location detectors in the CVR-Lib , i.e. is a class used to detect interesing points in an image, considering also the "scale" at which the interesting information resides.
This particular method is part of the SURF approach for robust feature detection, as explained in detail in the paper:
Herbert Bay, Tinne Tuytelaars, and Luc Van Gool. SURF: Speeded Up Robust Features. In Proceedings of the 9th European Conference on Computer Vision, May 2006. Available at http://www.vision.ee.ethz.ch/~surf/papers.html
The implementation here provides some configuration possibilities, but is limited to provide the authors concept as reliable as the paper allowed.
Types of level selection in the multiresolutional representation.
Modes available for the selection of conspicuous locations.
These modes affect the way in which the threshold value is interpreted.
All | Ignore the threshold, and compute all locations. |
Absolute | The determinant of the hessian matrix has to be greater than the threshold value (or less than -threshold) to be considered. |
Relative | The determinant of the hessian matrix has to be greater than a threshold value computed as a percentage of the greatest value found at each level. |
Conspicuous | The determinant of the hessian matrix has to be greater than a threshold value computed as the mean of all values plus a number of times the standard deviation. |
Number | At most the given number of (strongest) locations will be returned. |
cvr::fastHessianDetection::fastHessianDetection | ( | ) |
Default constructor.
cvr::fastHessianDetection::fastHessianDetection | ( | const parameters & | par | ) |
Construct a functor using the given parameters.
cvr::fastHessianDetection::fastHessianDetection | ( | const fastHessianDetection & | other | ) |
virtual cvr::fastHessianDetection::~fastHessianDetection | ( | ) | [virtual] |
Destructor.
virtual bool cvr::fastHessianDetection::apply | ( | const channel & | src, | |
list< location > & | locs, | |||
int & | numLocs | |||
) | const [virtual] |
Compute the locations based on the determinant of the "fast Hessian" matrix.
This method provides numLocs = locs.size() directly. The reason is simple: speed. The size() method needs to count the elements, and this is usually done in the process.
src | channel8 with the source image. | |
locs | lists of detected locations. | |
numLocs | number of locations detected. |
Implements cvr::locationDetection.
bool cvr::fastHessianDetection::apply | ( | const channel & | src, | |
list< location > & | locs, | |||
list< float > & | strength, | |||
int & | numLocs | |||
) | const |
Compute the locations based on the determinant of the "fast Hessian" matrix.
src | channel8 with the source image. | |
locs | lists of detected locations. | |
strength | the determinant value of the hessian matrix at the center of the location. | |
numLocs | number of location in locs and strength |
virtual bool cvr::fastHessianDetection::apply | ( | const channel & | src, | |
list< location > & | locs | |||
) | const [virtual] |
Compute the locations based on the determinant of the "fast Hessian" matrix.
Implements cvr::locationDetection.
virtual bool cvr::fastHessianDetection::apply | ( | const channel8 & | src, | |
list< location > & | locs, | |||
int & | numLocs | |||
) | const [virtual] |
Compute the locations based on the determinant of the "fast Hessian" matrix.
This method provides numLocs = locs.size() directly. The reason is simple: speed. The size() method needs to count the elements, and this is usually done in the process.
src | channel8 with the source image. | |
locs | lists of detected locations. | |
numLocs | number of locations detected. |
Implements cvr::locationDetection.
bool cvr::fastHessianDetection::apply | ( | const channel8 & | src, | |
list< location > & | locs, | |||
list< float > & | strength, | |||
int & | numLocs | |||
) | const |
Compute the locations based on the determinant of the "fast Hessian" matrix.
src | channel8 with the source image. | |
locs | lists of detected locations. | |
strength | the determinant value of the hessian matrix at the center of the location. | |
numLocs | number of location in locs and strength |
virtual bool cvr::fastHessianDetection::apply | ( | const channel8 & | src, | |
list< location > & | locs | |||
) | const [virtual] |
Compute the locations based on the determinant of the "fast Hessian" matrix.
Implements cvr::locationDetection.
virtual fastHessianDetection* cvr::fastHessianDetection::clone | ( | ) | const [virtual] |
fastHessianDetection& cvr::fastHessianDetection::copy | ( | const fastHessianDetection & | other | ) |
const parameters& cvr::fastHessianDetection::getParameters | ( | ) | const |
virtual const std::string& cvr::fastHessianDetection::name | ( | ) | const [virtual] |
virtual fastHessianDetection* cvr::fastHessianDetection::newInstance | ( | ) | const [virtual] |
fastHessianDetection& cvr::fastHessianDetection::operator= | ( | const fastHessianDetection & | other | ) |
bool cvr::fastHessianDetection::sort | ( | const list< location > & | locs, | |
const list< float > & | strength, | |||
std::vector< location > & | sortedLocs, | |||
fvector & | sortedStrength | |||
) | const |
Sort the locations according to their strength, in descending order: the strongest locations are always first.
This is useful to take a fixed number of the strongest locations.
The behaviour is influenced by the parameter settings of parameters::extrema. If it is set to Maxima, then the values are sorted as given, in descending order; if set to Minima, then the values are sorted in ascending order; if set to Both, then the absolute value of the strength is sorted in descending order.
locs | the unsorted locations as provided by the apply method. | |
strength | the corresponding strengths for the locations, as provided by the apply method. It has to have exactly the same size as the locs list. | |
sortedLocs | the sorted locations as vector, to have access to the rank of the location | |
sortedStrength | the sorted strength. |
true
if successful or false
otherwise. bool cvr::fastHessianDetection::updateParameters | ( | ) | [virtual] |