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...
 
const float * 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()

const float* 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.