Documentation>C API
scalespace.c File Reference

Scale Space - Definition. More...

#include "scalespace.h"
#include "mathop.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdio.h>

Functions

VlScaleSpaceGeometry vl_scalespace_get_default_geometry (vl_size width, vl_size height)
 Get the default geometry for a given image size. More...
 
vl_bool vl_scalespacegeometry_is_equal (VlScaleSpaceGeometry a, VlScaleSpaceGeometry b)
 Check scale space geometries for equality. More...
 
VlScaleSpaceGeometry vl_scalespace_get_geometry (VlScaleSpace const *self)
 Get the geometry of the scale space. More...
 
VlScaleSpaceOctaveGeometry vl_scalespace_get_octave_geometry (VlScaleSpace const *self, vl_index o)
 Get the geometry of an octave of the scalespace. More...
 
float * vl_scalespace_get_level (VlScaleSpace *self, vl_index o, vl_index s)
 Get the data of a scale space level. More...
 
float const * vl_scalespace_get_level_const (VlScaleSpace const *self, vl_index o, vl_index s)
 Get the data of a scale space level (const) More...
 
double vl_scalespace_get_level_sigma (VlScaleSpace const *self, vl_index o, vl_index s)
 Get the scale of a given octave and sublevel. More...
 
static void copy_and_upsample (float *destination, float const *source, vl_size width, vl_size height)
 Upsample the rows and take the transpose. More...
 
static void copy_and_downsample (float *destination, float const *source, vl_size width, vl_size height, vl_size numOctaves)
 Downsample. More...
 
VlScaleSpacevl_scalespace_new (vl_size width, vl_size height)
 Create a new scale space object. More...
 
VlScaleSpacevl_scalespace_new_with_geometry (VlScaleSpaceGeometry geom)
 Create a new scale space with the specified geometry. More...
 
VlScaleSpacevl_scalespace_new_copy (VlScaleSpace *self)
 Create a new copy of the object. More...
 
VlScaleSpacevl_scalespace_new_shallow_copy (VlScaleSpace *self)
 Create a new shallow copy of the object. More...
 
void vl_scalespace_delete (VlScaleSpace *self)
 Delete object. More...
 
void _vl_scalespace_fill_octave (VlScaleSpace *self, vl_index o)
 Fill octave starting from the first level. More...
 
static void _vl_scalespace_start_octave_from_image (VlScaleSpace *self, float const *image, vl_index o)
 Initialize the first level of an octave from an image. More...
 
static void _vl_scalespace_start_octave_from_previous_octave (VlScaleSpace *self, vl_index o)
 Initialize the first level of an octave from the previous octave. More...
 
void vl_scalespace_put_image (VlScaleSpace *self, float const *image)
 Initialise Scale space with new image. More...
 

Detailed Description

Author
Karel Lenc
Andrea Vedaldi
Michal Perdoch

Function Documentation

◆ _vl_scalespace_fill_octave()

void _vl_scalespace_fill_octave ( VlScaleSpace self,
vl_index  o 
)
Parameters
selfobject instance.
ooctave to process.

The function takes the first sublevel of octave o (the one at sublevel octaveFirstLevel and iteratively smoothes it to obtain the other octave levels.

◆ _vl_scalespace_start_octave_from_image()

static void _vl_scalespace_start_octave_from_image ( VlScaleSpace self,
float const *  image,
vl_index  o 
)
static
Parameters
selfVlScaleSpace object instance.
imageimage data.
ooctave to start.

The function initializes the first level of octave o from image image. The dimensions of the image are the ones set during the creation of the VlScaleSpace object instance.

◆ _vl_scalespace_start_octave_from_previous_octave()

static void _vl_scalespace_start_octave_from_previous_octave ( VlScaleSpace self,
vl_index  o 
)
static
Parameters
selfobject.
ooctave to initialize.

The function initializes the first level of octave o from the content of octave o - 1.

◆ copy_and_downsample()

static void copy_and_downsample ( float *  destination,
float const *  source,
vl_size  width,
vl_size  height,
vl_size  numOctaves 
)
static
Parameters
destinationoutput imgae buffer.
sourceinput image buffer.
widthinput image width.
heightinput image height.
numOctavesoctaves (non negative).

The function downsamples the image d times, reducing it to 1/2^d of its original size. The parameters width and height are the size of the input image. The destination image dst is assumed to be floor(width/2^d) pixels wide and floor(height/2^d) pixels high.

◆ copy_and_upsample()

static void copy_and_upsample ( float *  destination,
float const *  source,
vl_size  width,
vl_size  height 
)
static
Parameters
destinationoutput image.
sourceinput image.
widthinput image width.
heightinput image height.

The output image has dimensions height by 2 width (so the destination buffer must be at least as big as two times the input buffer).

Upsampling is performed by linear interpolation.

◆ vl_scalespace_delete()

void vl_scalespace_delete ( VlScaleSpace self)
Parameters
selfobject to delete.
See also
vl_scalespace_new()

◆ vl_scalespace_get_default_geometry()

VlScaleSpaceGeometry vl_scalespace_get_default_geometry ( vl_size  width,
vl_size  height 
)
Parameters
widthimage width.
heightimage height.
Returns
the default scale space geometry.

Both width and height must be at least one pixel wide.

◆ vl_scalespace_get_geometry()

VlScaleSpaceGeometry vl_scalespace_get_geometry ( VlScaleSpace const *  self)
Parameters
selfobject.
Returns
the scale space geometry.

◆ vl_scalespace_get_level()

float* vl_scalespace_get_level ( VlScaleSpace self,
vl_index  o,
vl_index  s 
)
Parameters
selfobject.
ooctave index.
slevel index.
Returns
pointer to the data for octave o, level s.

The octave index o must be in the range firstOctave to lastOctave and the scale index s must be in the range octaveFirstSubdivision to octaveLastSubdivision.

◆ vl_scalespace_get_level_const()

float const* vl_scalespace_get_level_const ( VlScaleSpace const *  self,
vl_index  o,
vl_index  s 
)
Parameters
selfobject.
ooctave index.
slevel index.
Returns
pointer to the data for octave o, level s.

This function is the same as vl_scalespace_get_level but reutrns a const pointer to the data.

◆ vl_scalespace_get_level_sigma()

double vl_scalespace_get_level_sigma ( VlScaleSpace const *  self,
vl_index  o,
vl_index  s 
)
Parameters
selfobject.
ooctave index.
ssublevel index.

The function returns the scale \(\sigma(o,s)\) as a function of the octave index o and sublevel s.

◆ vl_scalespace_get_octave_geometry()

VlScaleSpaceOctaveGeometry vl_scalespace_get_octave_geometry ( VlScaleSpace const *  self,
vl_index  o 
)
Parameters
selfobject.
ooctave index.
Returns
the geometry of octave o.

◆ vl_scalespace_new()

VlScaleSpace* vl_scalespace_new ( vl_size  width,
vl_size  height 
)
Parameters
widthimage width.
heightimage height.
Returns
new scale space object.

This function is the same as vl_scalespace_new_with_geometry() but it uses vl_scalespace_get_default_geometry to initialise the geometry of the scale space from the image size.

See also
vl_scalespace_new_with_geometry(), vl_scalespace_delete().

◆ vl_scalespace_new_copy()

VlScaleSpace* vl_scalespace_new_copy ( VlScaleSpace self)
Parameters
selfobject to copy from.

The function returns NULL if the copy cannot be made due to an out-of-memory condition.

◆ vl_scalespace_new_shallow_copy()

VlScaleSpace* vl_scalespace_new_shallow_copy ( VlScaleSpace self)
Parameters
selfobject to copy from.

The function works like vl_scalespace_new_copy() but only allocates the scale space, without actually copying the data.

◆ vl_scalespace_new_with_geometry()

VlScaleSpace* vl_scalespace_new_with_geometry ( VlScaleSpaceGeometry  geom)
Parameters
geomscale space geomerty.
Returns
new scale space object.

If the geometry is not valid (see VlScaleSpaceGeometry), the result is unpredictable.

The function returns NULL if it was not possible to allocate the object because of an out-of-memory condition.

See also
VlScaleSpaceGeometry, vl_scalespace_delete().

◆ vl_scalespace_put_image()

void vl_scalespace_put_image ( VlScaleSpace self,
float const *  image 
)
Parameters
selfVlScaleSpace object instance.
imageimage to process.

Compute the data of all the defined octaves and scales of the scale space self.

◆ vl_scalespacegeometry_is_equal()

vl_bool vl_scalespacegeometry_is_equal ( VlScaleSpaceGeometry  a,
VlScaleSpaceGeometry  b 
)
Parameters
afirst geometry.
bsecond geometry.
Returns
true if equal.