last update 20 Sep 2009 |
#include <cvrFastHessianDetection.h>
Public Member Functions | |
parameters () | |
parameters (const parameters &other) | |
~parameters () | |
parameters & | copy (const parameters &other) |
parameters & | operator= (const parameters &other) |
virtual const std::string & | name () const |
virtual parameters * | clone () const |
virtual parameters * | newInstance () const |
virtual bool | write (ioHandler &handler, const bool complete=true) const |
virtual bool | read (ioHandler &handler, const bool complete=true) |
Public Attributes | |
Parameters for the "scale-space" levels | |
int | numberOfLevels |
int | initialKernelSize |
eLevelSelectionMethod | levelSelectionMethod |
int | initialKernelStep |
int | levelGroupSize |
float | normPower |
Parameters for the location selection | |
eExtremaType | extrema |
eLocationSelectionMode | locationSelectionMode |
float | threshold |
bool | subsampleLevels |
int | initialSamplingStep |
Parameters for the estimation of the location orientation. | |
The algorithm in the SURF paper states that on a circular window around the detected location a set of samples is chosen for which some gradient related values (computed through Haar filters) are computed and used in a "weighted voting" approach.
Each sample votes in an orientation window (or windows) that covers the angle of the "gradient" and with a weight given by its magnitude. At the end, an orientation value is selected of the window with the largest accumulated magnitude and with the angle of the accumulated values. | |
bool | computeOrientation |
float | orientationNeighborhoodFactor |
float | orientationSamplingStepFactor |
float | orientationWaveletSizeFactor |
float | orientationGaussianFactor |
float | orientationWindowWidth |
int | orientationNumberOfWindows |
cvr::fastHessianDetection::fastHessianDetection::parameters::parameters | ( | ) |
cvr::fastHessianDetection::fastHessianDetection::parameters::parameters | ( | const parameters & | other | ) |
Copy constructor.
other | the parameters object to be copied |
Reimplemented from cvr::locationDetection::locationDetection::parameters.
cvr::fastHessianDetection::fastHessianDetection::parameters::~parameters | ( | ) | [virtual] |
virtual parameters* cvr::fastHessianDetection::fastHessianDetection::parameters::clone | ( | ) | const [virtual] |
Returns a pointer to a clone of the parameters.
Reimplemented from cvr::locationDetection::locationDetection::parameters.
parameters& cvr::fastHessianDetection::fastHessianDetection::parameters::copy | ( | const parameters & | other | ) |
Copy the contents of a parameters object.
other | the parameters object to be copied |
Reimplemented from cvr::locationDetection::locationDetection::parameters.
virtual const std::string& cvr::fastHessianDetection::fastHessianDetection::parameters::name | ( | ) | const [virtual] |
Returns the complete name of the parameters class.
Reimplemented from cvr::locationDetection::locationDetection::parameters.
virtual parameters* cvr::fastHessianDetection::fastHessianDetection::parameters::newInstance | ( | ) | const [virtual] |
Returns a pointer to a new instance of the parameters.
Reimplemented from cvr::locationDetection::locationDetection::parameters.
parameters& cvr::fastHessianDetection::fastHessianDetection::parameters::operator= | ( | const parameters & | other | ) |
Copy the contents of a parameters object.
other | the parameters object to be copied |
Reimplemented from cvr::locationDetection::locationDetection::parameters.
virtual bool cvr::fastHessianDetection::fastHessianDetection::parameters::read | ( | ioHandler & | handler, | |
const bool | complete = true | |||
) | [virtual] |
Read the parameters from the given ioHandler.
handler | the ioHandler to be used | |
complete | if true (the default) the enclosing begin/end will be also written, otherwise only the data block will be written. |
Reimplemented from cvr::locationDetection::locationDetection::parameters.
virtual bool cvr::fastHessianDetection::fastHessianDetection::parameters::write | ( | ioHandler & | handler, | |
const bool | complete = true | |||
) | const [virtual] |
Write the parameters in the given ioHandler.
handler | the ioHandler to be used | |
complete | if true (the default) the enclosing begin/end will be also written, otherwise only the data block will be written. |
Reimplemented from cvr::locationDetection::locationDetection::parameters.
bool cvr::fastHessianDetection::fastHessianDetection::parameters::computeOrientation |
Selection flag used to deactivate orientation computation.
In order to compute the so-called U-SURF descriptors, which lack of orientation, we can save some time by deactivating the orientation computation.
To deactivate the computation of the orientation just set this parameter to false
.
Default value: true
eExtremaType cvr::fastHessianDetection::fastHessianDetection::parameters::extrema |
Types of extrema to search for.
The locations are placed on local extrema of the scale-space representation of the image. Here you can indicate if they should be placed on Maxima
, on Minima
or on Both
.
Default value: Both
int cvr::fastHessianDetection::fastHessianDetection::parameters::initialKernelSize |
Kernel size for the highest spatian resolution.
This is the kernel side size, which means that, if you provide 9, then a kernel 9x9 will be built.
The kernel size is intrinsically tied to the sigma (standard deviation) of the kernel. A 9x9 kernel will always use a sigma=1.2 in accordance to the SURF paper. Any other kernel size will ajust the sigma linearly. A kernel of 27x27 will use a sigma of 3x1.2=3.6, since 27=3x9.
The size value has to be divisible by 3 and odd.
See parameters::initialKernelStep for an example.
Default value: 9
int cvr::fastHessianDetection::fastHessianDetection::parameters::initialKernelStep |
Kernel step size change between levels.
This parameters is used only if you select the levelSelectionMethod as Blocks
.
The multiresolutional representation of a channel contains several levels, each one computed with a kernel size to which this step value is iteratively added. Once the levelGroupSize
has been reached, the kernel step is duplicated.
For example, with
initialKernelSize=9
,initialKernelStep=6
,levelGroupSize=4
, andnumberOfLevels=12
,then the used kernel sizes will be
The step value has to be even and divisible by three (and hence, divisible by 6). If not, then the closest number divisible by 6 will be used.
Default value: 6
int cvr::fastHessianDetection::fastHessianDetection::parameters::initialSamplingStep |
Initial sampling step.
If subsampleLevels is set to true
, this is the initial sampling step. If subsampleLevels is set to false
then all levels use this value.
This value must be 1 or greater.
Default value: 2
int cvr::fastHessianDetection::fastHessianDetection::parameters::levelGroupSize |
Number of levels in a group or octave.
If levelSelectionMethod is set to Blocks
, a group of levels is the number of levels generated using the same kernel step. The "next" group will double the kernel size step.
See parameters::initialKernelStep for an example.
If levelSelectionMethod is set to Exponential
, then this is the number of levels tried to be present in an octave. However, since the kernel sizes have to be divisible by three and have to be odd, then this might become true only for the higher levels.
Default value: 4
eLevelSelectionMethod cvr::fastHessianDetection::fastHessianDetection::parameters::levelSelectionMethod |
Level selection method.
You can choose between two methods for the level selection:
Blocks
method resembles the one proposed in the SURF paper selecting blocks of levels separated by a fixed amount of "scale".Exponential
method increases the scale exponentially, as is usual in scale-space pyramids. However, since the kernel sizes must be odd and divisible by three, the lower resolution will not exactly grow at exponential rates.Default value: Blocks
eLocationSelectionMode cvr::fastHessianDetection::fastHessianDetection::parameters::locationSelectionMode |
Mode for location selection.
You can select among different modes for selecting the locations according to their strength in the value of the hessian determinant.
This will affect the way in which the threshold value is interpreted. See parameters::threshold for more information.
Default value: Absolute
float cvr::fastHessianDetection::fastHessianDetection::parameters::normPower |
Norm power.
Theoretically this value has to be 4.0f in order to keep the same information weight of all levels. You can modify this value to slightly smaller values (e.g. 3.9f) if you want to give more weight to larger locations, or larger values (4.1f) if you need to obtain locations of small details.
The outputs of the filters approximating the second order derivatives have to be normalized by the filter mask sizes (and hence, the norm will be proportional to the square of the scale). Additionally, the determinant of the hessian matrix is computed by products of two filter outputs, and hence, the total norm is proportional to the scale to the power of four.
Default value: 4
int cvr::fastHessianDetection::fastHessianDetection::parameters::numberOfLevels |
Number of levels of the multi-scale representation used to detect interest points.
You need at least 3 levels.
See parameters::initialKernelStep for an example.
Default value: 12
float cvr::fastHessianDetection::fastHessianDetection::parameters::orientationGaussianFactor |
Gaussian weights for the orientation.
The wavelet responses on the samples in the neighborhood used to compute the orientation are weighted with a gaussian that has an standard deviation of this factor multiplied by the scale on which the location has been found.
Default value: 2.5
float cvr::fastHessianDetection::fastHessianDetection::parameters::orientationNeighborhoodFactor |
int cvr::fastHessianDetection::fastHessianDetection::parameters::orientationNumberOfWindows |
Number of angular windows.
Each window will contain angles in an interval of orientationWindowWidth distributed homogeneously on the 2*Pi radians.
Default value: 6
float cvr::fastHessianDetection::fastHessianDetection::parameters::orientationSamplingStepFactor |
Factor used to compute the samples within the orientation neighborhood considered.
The real sampling step is computed multiplying this factor with the scale on which a location has been found.
The value orientationNeighborhoodFactor
has to be divisible by this number.
Default value: 1
float cvr::fastHessianDetection::fastHessianDetection::parameters::orientationWaveletSizeFactor |
float cvr::fastHessianDetection::fastHessianDetection::parameters::orientationWindowWidth |
Angular width for the orientation window.
This is used as follows. When a sample produces an angular value to vote for, over that angular value a slice is placed with an angular span of the value given here. All windows that fall beneath that slice will count the vote. This means, a value of zero forces just one window to be taken into consideration, as the original SURF paper states.
If this angular value is less than 2*Pi, then it is assumed to be given in radians. Otherwise is interpreted in degrees.
The value must be positive or zero.
In the original paper a value of zero is used, however, a value of 60 has proven (with orientationNumberOfWindows=6) to be much more reliable.
Default value: 60
bool cvr::fastHessianDetection::fastHessianDetection::parameters::subsampleLevels |
Subsample levels.
The search for conspicuous locations can be made using all pixels in all levels (value set to false
) or just some selected samples depending on the scale of a level (value set to true
).
Default value: true
float cvr::fastHessianDetection::fastHessianDetection::parameters::threshold |
Threshold value.
The meaning of this threshold value depends on the settings of the locationSelectionMode.
locationSelectionMode
is set to All, then this value is ignored and all detected locations will be returned.locationSelectionMode
is set to Absolute, then this value means the weakest strength a location can exhibit in order to be returned in the results.locationSelectionMode
is set to Relative, then this value means the fraction of the maximal location strengh that will be allowed. This value has to be between 0 and 1.locationSelectionMode
is set to Conspicuous, then this value means the number of times the standard deviation will be multiplied with when added to the strengths mean value to compute the threshold.
locationSelectionMode
is set to Number, then this value means the maximal number of locations that will be returned, where only the strongest locations will be returned. This is the slowest method of all, since it requires to sort the values.Default value: 0.1f