Documentation - C API
covdet.h File Reference

Covariant feature detectors (Covariant feature detectors) More...

#include "generic.h"
#include "stringop.h"
#include "scalespace.h"
#include <stdio.h>

Data Structures

struct  VlFrameDisc
 Disc feature frame. More...
struct  VlFrameOrientedDisc
 Oriented disc feature frame An upright frame has angle equal to zero. More...
struct  VlFrameEllipse
 Ellipse feature frame. More...
struct  VlFrameOrientedEllipse
 Oriented ellipse feature frame The affine transformation transforms the ellipse shape into a circular region. More...
struct  VlCovDetFeature
 A detected feature. More...

Functions

Create and destroy
VlCovDet * vl_covdet_new (VlCovDetMethod method)
 Create a new object instance.
void vl_covdet_delete (VlCovDet *self)
 Delete object instance.
void vl_covdet_reset (VlCovDet *self)
 Reset object.
Process data
int vl_covdet_put_image (VlCovDet *self, float const *image, vl_size width, vl_size height)
 Detect features in an image.
void vl_covdet_detect (VlCovDet *self)
 Detect scale-space features.
int vl_covdet_append_feature (VlCovDet *self, VlCovDetFeature const *feature)
 Append a feature to the internal buffer.
void vl_covdet_extract_orientations (VlCovDet *self)
 Extract the orientation(s) for the stored features.
void vl_covdet_extract_laplacian_scales (VlCovDet *self)
 Extract the Laplacian scales for the stored features.
void vl_covdet_extract_affine_shape (VlCovDet *self)
 Extract the affine shape for the stored features.
VlCovDetFeatureOrientation * vl_covdet_extract_orientations_for_frame (VlCovDet *self, vl_size *numOrientations, VlFrameOrientedEllipse frame)
 Extract the orientation(s) for a feature frame.
VlCovDetFeatureLaplacianScale * vl_covdet_extract_laplacian_scales_for_frame (VlCovDet *self, vl_size *numScales, VlFrameOrientedEllipse frame)
 Extract the Laplacian scale(s) for a feature frame.
int vl_covdet_extract_affine_shape_for_frame (VlCovDet *self, VlFrameOrientedEllipse *adapted, VlFrameOrientedEllipse frame)
 Extract the affine shape for a feature frame.
vl_bool vl_covdet_extract_patch_for_frame (VlCovDet *self, float *patch, vl_size resolution, double extent, double sigma, VlFrameOrientedEllipse frame)
 Helper for extracting patches.
void vl_covdet_drop_features_outside (VlCovDet *self, double margin)
 Drop features (partially) outside the image.
Retrieve data and parameters
vl_size vl_covdet_get_num_features (VlCovDet const *self)
 Get number of stored frames.
void * vl_covdet_get_features (VlCovDet *self)
 Get the stored frames.
vl_index vl_covdet_get_first_octave (VlCovDet const *self)
 Get the index of the first octave.
vl_size vl_covdet_get_octave_resolution (VlCovDet const *self)
 Get the octave resolution.
double vl_covdet_get_peak_threshold (VlCovDet const *self)
 Get the peak threshold.
double vl_covdet_get_edge_threshold (VlCovDet const *self)
 Get the edge threshold.
vl_bool vl_covdet_get_transposed (VlCovDet const *self)
 Get wether images are passed in transposed.
VlScaleSpacevl_covdet_get_gss (VlCovDet const *self)
 Get the Gaussian scale space.
VlScaleSpacevl_covdet_get_css (VlCovDet const *self)
 Get the cornerness measure scale space.
vl_bool vl_covdet_get_aa_accurate_smoothing (VlCovDet const *self)
 Get whether affine adaptation uses accurate smoothing.
vl_size const * vl_covdet_get_laplacian_scales_statistics (VlCovDet const *self, vl_size *numScales)
 Get the number of features found with a certain number of scales.
double vl_covdet_get_non_extrema_suppression_threshold (VlCovDet const *self)
 Get the non-extrema suppression threshold.
vl_size vl_covdet_get_num_non_extrema_suppressed (VlCovDet const *self)
 Get the number of non-extrema suppressed.
Set parameters
void vl_covdet_set_first_octave (VlCovDet *self, vl_index o)
 Set the index of the first octave.
void vl_covdet_set_octave_resolution (VlCovDet *self, vl_size r)
 Set the octave resolutuon.
void vl_covdet_set_peak_threshold (VlCovDet *self, double peakThreshold)
 Set the peak threshold.
void vl_covdet_set_edge_threshold (VlCovDet *self, double edgeThreshold)
 Set the edge threshold.
void vl_covdet_set_transposed (VlCovDet *self, vl_bool t)
 Set the index of the first octave.
void vl_covdet_set_aa_accurate_smoothing (VlCovDet *self, vl_bool x)
 Set whether affine adaptation uses accurate smoothing.
void vl_covdet_set_non_extrema_suppression_threshold (VlCovDet *self, double x)
 Set the non-extrema suppression threshod.

Feature frames

enum  VlFrameType { VL_FRAMETYPE_DISC = 1, VL_FRAMETYPE_ORIENTED_DISC, VL_FRAMETYPE_ELLIPSE, VL_FRAMETYPE_ORIENTED_ELLIPSE }
 Types of feature frames. More...
enum  VlCovDetMethod
 Covariant feature detection method.
const char * vlFrameNames [VL_FRAMETYPE_NUM]
 Names of the frame types.
VlEnumerator vlFrameTypes [VL_FRAMETYPE_NUM]
 Mapping between string values and VlFrameType values.
VlEnumerator vlCovdetMethods [VL_COVDET_METHOD_NUM]
 Mapping between strings and VlCovDetMethod values.
vl_size vl_get_frame_size (VlFrameType frameType)
 Get the size of a frame structure.
VlFrameType vl_get_frame_type (vl_bool affineAdaptation, vl_bool orientation)
 Get the size of a frame structure.

Detailed Description

Author:
Karel Lenc
Andrea Vedaldi
Michal Perdoch

Enumeration Type Documentation

Enumerator:
VL_FRAMETYPE_DISC 

A disc.

VL_FRAMETYPE_ORIENTED_DISC 

An oriented disc.

VL_FRAMETYPE_ELLIPSE 

An ellipse.

VL_FRAMETYPE_ORIENTED_ELLIPSE 

An oriented ellipse.


Function Documentation

int vl_covdet_append_feature ( VlCovDet *  self,
VlCovDetFeature const *  feature 
)
Parameters:
selfobject.
featurea pointer to the feature to append.
Returns:
status.

The feature is copied. The function may fail with status equal to VL_ERR_ALLOC if there is insufficient memory.

void vl_covdet_delete ( VlCovDet *  self)
Parameters:
selfobject.
void vl_covdet_detect ( VlCovDet *  self)
Parameters:
method
Returns:
new covariant detector.
void vl_covdet_drop_features_outside ( VlCovDet *  self,
double  margin 
)
Parameters:
selfobject.
margingeometric marging.

The feature extent is defined by maring. A bounding box in the normalised feature frame containin a circle of radius maring is created and mapped to the image by the feature frame transformation. Then the feature is dropped if the bounding box is not contained in the image.

For example, setting margin to zero drops a feature only if its center is not contained.

Typically a valua of margin equal to 1 or 2 is used.

void vl_covdet_extract_affine_shape ( VlCovDet *  self)
Parameters:
selfobject.

This function may discard features for which no affine shape can reliably be detected.

int vl_covdet_extract_affine_shape_for_frame ( VlCovDet *  self,
VlFrameOrientedEllipse adapted,
VlFrameOrientedEllipse  frame 
)
Parameters:
selfobject.
adaptedthe shape-adapted frame.
framethe input frame.
Returns:
VL_ERR_OK if affine adaptation is successful.

This function may fail if adaptation is unsuccessful or if memory is insufficient.

void vl_covdet_extract_laplacian_scales ( VlCovDet *  self)
Parameters:
selfobject.

Note that, since more than one orientation can be detected for each feature, this function may create copies of them, one for each orientation.

VlCovDetFeatureLaplacianScale* vl_covdet_extract_laplacian_scales_for_frame ( VlCovDet *  self,
vl_size numScales,
VlFrameOrientedEllipse  frame 
)
Parameters:
selfobject.
numScalesthe number of detected scales.
Returns:
an array of detected scales.

The function returns NULL if memory is insufficient.

void vl_covdet_extract_orientations ( VlCovDet *  self)
Parameters:
selfobject.

Note that, since more than one orientation can be detected for each feature, this function may create copies of them, one for each orientation.

VlCovDetFeatureOrientation* vl_covdet_extract_orientations_for_frame ( VlCovDet *  self,
vl_size numOrientations,
VlFrameOrientedEllipse  frame 
)
Parameters:
selfobject.
numOrientationsthe number of detected orientations.
Returns:
an array of detected orientations with their scores.

The returned array is a matrix of size \( 2 \times n \) where n is the number of detected orientations.

The function returns NULL if memory is insufficient.

vl_bool vl_covdet_extract_patch_for_frame ( VlCovDet *  self,
float *  patch,
vl_size  resolution,
double  extent,
double  sigma,
VlFrameOrientedEllipse  frame 
)
Parameters:
selfobject.
patchbuffer.
resolutionpatch resolution.
extentpatch extent.
sigmadesired smoothing in the patch frame.
framefeature frame.

The function considers a patch of extent [-extent,extent] on each side, with a side counting 2*resolution+1 pixels. In attempts to extract from the scale space a patch baed on the affine warping specified by frame in such a way that the resulting smoothing of the image is sigma (in the patch frame).

The transformation is specified by the matrices A and T embedded in the feature frame. Note that this transformation maps pixels from the patch frame to the image frame.

vl_bool vl_covdet_get_aa_accurate_smoothing ( VlCovDet const *  self)
Parameters:
selfobject.
Returns:
true if accurate smoothing is used.
VlScaleSpace* vl_covdet_get_css ( VlCovDet const *  self)
Returns:
cornerness measure scale space.

A cornerness measure scale space exists only after calling vl_covdet_detect. Otherwise the function returns NULL.

double vl_covdet_get_edge_threshold ( VlCovDet const *  self)
Parameters:
self::VlCovDet object.
Returns:
the edge threshold.
void* vl_covdet_get_features ( VlCovDet *  self)
Returns:
frames stored in the detector.
vl_index vl_covdet_get_first_octave ( VlCovDet const *  self)
Parameters:
self::VlCovDet object.
Returns:
index of the first octave.
VlScaleSpace* vl_covdet_get_gss ( VlCovDet const *  self)
Returns:
Gaussian scale space.

A Gaussian scale space exists only after calling vl_covdet_put_image. Otherwise the function returns NULL.

vl_size const* vl_covdet_get_laplacian_scales_statistics ( VlCovDet const *  self,
vl_size numScales 
)
Parameters:
sellfobject.
numScaleslength of the histogram (out).
Returns:
histogram.

Calling this function makes sense only after running a detector that uses the Laplacian as a secondary measure for scale detection

double vl_covdet_get_non_extrema_suppression_threshold ( VlCovDet const *  self)
Parameters:
selfobject.
Returns:
threshold.
vl_size vl_covdet_get_num_features ( VlCovDet const *  self)
Returns:
number of frames stored in the detector.
vl_size vl_covdet_get_num_non_extrema_suppressed ( VlCovDet const *  self)
Parameters:
selfobject.
Returns:
number.
vl_size vl_covdet_get_octave_resolution ( VlCovDet const *  self)
Parameters:
self::VlCovDet object.
Returns:
octave resolution.
double vl_covdet_get_peak_threshold ( VlCovDet const *  self)
Parameters:
self::VlCovDet object.
Returns:
the peak threshold.
vl_bool vl_covdet_get_transposed ( VlCovDet const *  self)
Parameters:
self::VlCovDet object.
Returns:
whether images are transposed.
VlCovDet* vl_covdet_new ( VlCovDetMethod  method)
Parameters:
methodmethod for covariant feature detection.
Returns:
new covariant detector.
int vl_covdet_put_image ( VlCovDet *  self,
float const *  image,
vl_size  width,
vl_size  height 
)
Parameters:
selfobject.
imageimage to process.
widthimage width.
heightimage height.
Returns:
status.

width and height must be at least one pixel. The function fails by returing VL_ERR_ALLOC if the memory is insufficient.

void vl_covdet_reset ( VlCovDet *  self)
Parameters:
selfobject.

This function removes any buffered features and frees other internal buffers.

void vl_covdet_set_aa_accurate_smoothing ( VlCovDet *  self,
vl_bool  x 
)
Parameters:
selfobject.
xwhether accurate smoothing should be usd.
void vl_covdet_set_edge_threshold ( VlCovDet *  self,
double  edgeThreshold 
)
Parameters:
self::VlCovDet object.
theedge threshold.

The edge threshold must be non-negative.

void vl_covdet_set_first_octave ( VlCovDet *  self,
vl_index  o 
)
Parameters:
self::VlCovDet object.
indexof the first octave.

Calling this function resets the detector.

void vl_covdet_set_non_extrema_suppression_threshold ( VlCovDet *  self,
double  x 
)
Parameters:
selfobject.
xthreshold.
void vl_covdet_set_octave_resolution ( VlCovDet *  self,
vl_size  r 
)
Parameters:
self::VlCovDet object.
octaveresoltuion.

Calling this function resets the detector.

void vl_covdet_set_peak_threshold ( VlCovDet *  self,
double  peakThreshold 
)
Parameters:
self::VlCovDet object.
thepeak threshold.

The peak threshold must be non-negative.

void vl_covdet_set_transposed ( VlCovDet *  self,
vl_bool  t 
)
Parameters:
self::VlCovDet object.
twhether images are transposed.
vl_size vl_get_frame_size ( VlFrameType  frameType)
inline
Parameters:
frameTypeidentifier of the type of frame.
Returns:
size of the corresponding frame structure in bytes.
VlFrameType vl_get_frame_type ( vl_bool  affineAdaptation,
vl_bool  orientation 
)
inline
Parameters:
frameTypeidentifier of the type of frame.
Returns:
size of the corresponding frame structure in bytes.