Documentation>C API
Gaussian Scale Space (GSS)

Table of Contents

Karel Lenc
Andrea Vedaldi
Michal Perdoch

scalespace.h implements a Gaussian scale space, a data structure representing an image at multiple resolutions [33] [13] [14] . Scale spaces have many use, including the detection of co-variant local features [15] such as SIFT, Hessian-Affine, Harris-Affine, Harris-Laplace, etc. Getting started demonstreates how to use the C API to compute the scalespace of an image. For further details refer to:

Getting started

Given an input image image, the following example uses the VlScaleSpace object to compute its Gaussian scale space and return the image level at scale (o,s), where o is the octave and s is the octave subdivision or sublevel:

float* level ;
VlScaleSpace ss = vl_scalespace_new(imageWidth, imageHeight) ;
level = vl_scalespace_get_level(ss, o, s) ;

The image level is obtained by convolving image by a Gaussian filter of isotropic standard deviation given by

double sigma = vl_scalespace_get_sigma(ss, o, s) ;

The resolution of level is in general different from the resolution of image and is determined by the octave o. It can be obtained as follows:

ogeom.width // width of level (in number of pixels)
ogeom.height // height of level (in number of pixels)
ogeom.step // spatial sampling step

The parameter ogeom.step is the sampling step relatively to the sampling of the input image image. The ranges of valid octaves and scale sublevels can be obtained as

geom.firstOctave // Index of the fisrt octave
geom.lastOctave // Index of the last octave
geom.octaveResolution ; // Number of octave subdivisions
geom.octaveFirstSubdivision // Index of the first octave subdivision
geom.octaveLastSubdivision // Index of the last octave subdivision

So for example o minimum value is geom.firstOctave and maximum value is geom.lastOctave. The subdivision index s naturally spans the range 0 to geom.octaveResolution-1. However, the scale space object is flexible in that it allows different ranges of subdivisions to be computed and s varies in the range geom.octaveFirstSubdivision to geom.octaveLastSubdivision. See Gaussian scale space fundamentals for further details.

The geometry of the scale space can be customized upon creation, as follows:

geom.firstOctave = -1 ;
VlScaleSpacae ss = vl_scalespace_new_with_geometry (geom) ;