mser.h File Reference
Detailed Description
Maximally Stable Extremal Regions Overview
Running the MSER filter usually involves the following steps:
- Initialize the MSER filter by vl_mser_new(). The filter can be reused for images of the same size.
- Compute the MSERs by vl_mser_process().
- Optionally fit ellipsoids to the MSERs by vl_mser_ell_fit().
- Retrieve the results by vl_mser_get_regions() (and optionally vl_mser_get_ell()).
- Optionally retrieve filter statistics by vl_mser_get_stats().
- Delete the MSER filter by vl_mser_delete().
MSER definition
An extremal region


For each intensity , one has multiple disjoint extremal regions in the level set
. Let
span a finite number of values
(a sampling of the image range). One obtains a family of regions
; by connecting two regions
and
if, and only if,
, regions form a tree:

The maximally stable extremal regions are extremal regions which satisfy a stability criterion. Here we use a criterion which is similar but not identical to the original paper. This definition is somewhat simpler both to understand and code (it also runs faster).
Let be the branch of the tree rooted at
. We associate to the branch the (in)stability score
The score is low if the regions along the branch have similar area (and thus similar shape). We aim to select maximally stable branches; then a maximally stable region is just a representative region selected from a maximally stable branch (for simplicity we select , but one could choose for example
).
Roughly speaking, a branch is maximally stable if it is a local minimum of the (in)stability score. More accurately, we start by assuming that all branches are maximally stable. Then we consider each branch and its parent branch
(notice that, due to the discrete nature of the calculations, they might be geometrically identical) and we mark as unstable the less stable one, i.e.:
- if
, mark
as unstable;
- if
, mark
as unstable;
- otherwise, do nothing.
This criterion selects among nearby regions the ones that are more stable. We optionally refine the selection by running (starting from the bigger and going to the smaller regions) the following tests:
: exclude MSERs too small or too big (
is the area of the image).
: exclude MSERs too unstable.
- For any MSER
, find the parent MSER
and check if
: remove duplicated MSERs.
parameter | alt. name | standard value | set by |
![]() | delta | 5 | vl_mser_set_delta() |
![]() | max_area | 0.75 | vl_mser_set_max_area() |
![]() | min_area | 3.0/![]() | vl_mser_set_min_area() |
![]() | max_var | 0.25 | vl_mser_set_max_variation() |
![]() | min_diversity | 0.2 | vl_mser_set_min_diversity() |
Volumetric images
The code supports images of arbitrary dimension. For instance, it is possible to find the MSER regions of volumetric images or time sequences. See vl_mser_new() for further details.sEllipsoids
Usually extremal regions are returned as a set of ellipsoids fitted to the actual regions (which have arbitrary shape). The fit is done by calculating the mean and variance of the pixels composing the region:
Ellipsoids are fitted by vl_mser_ell_fit(). Notice that for a n dimensional image, the mean has n components and the variance has n(n+1)/2 independent components. The total number of components is obtained by vl_mser_get_ell_dof() and the total number of fitted ellipsoids by vl_mser_get_ell_num(). A matrix with an ellipsoid per column is returned by vl_mser_get_ell(). The column is the stacking of the mean and of the independent components of the variance, in the order (1,1),(1,2),..,(1,n), (2,2),(2,3).... In the calculations, the pixel coordinate use the standard index order and ranges.
Algorithm
The algorithm is quite efficient. While some details may be tricky, the overall idea is easy to grasp.
- Pixels are sorted by increasing intensity.
- Pixels are added to a forest by increasing intensity. The forest has the following properties:
- All the descendent of a certain pixels are subset of an extremal region.
- All the extremal regions are the descendants of some pixels.
- Extremal regions are extracted from the region tree and the extremal regions tree is calculated.
- Stable regions are marked.
- Duplicates and other bad regions are removed.
- Remarks:
- The extremal region tree which is calculated is a subset of the actual extremal region tree. In particular, it does not contain redundant entries extremal regions that coincide as sets. So, for example, in the calculated extremal region tree, the parent
of an extremal region
may or may not correspond to
, depending whether
or not. These subtleties are important when calculating the stability tests.
Definition in file mser.h.
#include "generic.h"
Go to the source code of this file.
Data Structures | |
struct | _VlMserStats |
MSER filter statistics definition. More... | |
struct | _VlMserReg |
MSER: basic region (declaration). More... | |
struct | _VlMserExtrReg |
MSER: extremal region (declaration). More... | |
struct | _VlMserFilt |
MSER filter. More... | |
Defines | |
#define | VL_MSER_PIX_MAXVAL 256 |
Maximum value. | |
#define | VL_MSER_VOID_NODE ((1ui64<<32) - 1) |
Basic region flag: null region. | |
Typedefs | |
typedef vl_uint8 | vl_mser_pix |
MSER image data type. | |
typedef struct _VlMserFilt | VlMserFilt |
MSER Filter. | |
typedef struct _VlMserStats | VlMserStats |
MSER filter statistics. | |
typedef float | vl_mser_acc |
MSER accumulator data type. | |
typedef struct _VlMserReg | VlMserReg |
MSER: basic region. | |
typedef struct _VlMserExtrReg | VlMserExtrReg |
MSER: extremal region. | |
Functions | |
Construction and Destruction | |
VL_EXPORT VlMserFilt * | vl_mser_new (int ndims, int const *dims) |
Create a new MSER filter. | |
VL_EXPORT void | vl_mser_delete (VlMserFilt *f) |
Delete MSER filter. | |
Processing | |
VL_EXPORT void | vl_mser_process (VlMserFilt *f, vl_mser_pix const *im) |
Process image. | |
VL_EXPORT void | vl_mser_ell_fit (VlMserFilt *f) |
Fit ellipsoids. | |
Retrieving data | |
VL_INLINE vl_uint | vl_mser_get_regions_num (VlMserFilt const *f) |
Get number of maximally stable extremal regions. | |
VL_INLINE vl_uint const * | vl_mser_get_regions (VlMserFilt const *f) |
Get maximally stable extremal regions. | |
VL_INLINE float const * | vl_mser_get_ell (VlMserFilt const *f) |
Get ellipsoids. | |
VL_INLINE vl_uint | vl_mser_get_ell_num (VlMserFilt const *f) |
Get number of ellipsoids. | |
VL_INLINE vl_uint | vl_mser_get_ell_dof (VlMserFilt const *f) |
Get number of degrees of freedom of ellipsoids. | |
VL_INLINE VlMserStats const * | vl_mser_get_stats (VlMserFilt const *f) |
Get statistics. | |
Retrieving parameters | |
VL_INLINE vl_mser_pix | vl_mser_get_delta (VlMserFilt const *f) |
Get delta. | |
VL_INLINE double | vl_mser_get_min_area (VlMserFilt const *f) |
Get minimum region area. | |
VL_INLINE double | vl_mser_get_max_area (VlMserFilt const *f) |
Get maximum region area. | |
VL_INLINE double | vl_mser_get_max_variation (VlMserFilt const *f) |
Get maximum region variation. | |
VL_INLINE double | vl_mser_get_min_diversity (VlMserFilt const *f) |
Get minimum diversity. | |
Setting parameters | |
VL_INLINE void | vl_mser_set_delta (VlMserFilt *f, vl_mser_pix x) |
Set delta. | |
VL_INLINE void | vl_mser_set_min_area (VlMserFilt *f, double x) |
Set minimum region area. | |
VL_INLINE void | vl_mser_set_max_area (VlMserFilt *f, double x) |
Set maximum region area. | |
VL_INLINE void | vl_mser_set_max_variation (VlMserFilt *f, double x) |
Set maximum region variation. | |
VL_INLINE void | vl_mser_set_min_diversity (VlMserFilt *f, double x) |
Set minimum diversity. |
Define Documentation
#define VL_MSER_PIX_MAXVAL 256 |
Maximum value of the integer type vl_mser_pix.
Definition at line 30 of file mser.h.
Referenced by vl_mser_process().
#define VL_MSER_VOID_NODE ((1ui64<<32) - 1) |
Typedef Documentation
typedef float vl_mser_acc |
For internal use only.
This is a large integer type. It should be large enough to contain a number equal to the area (volume) of the image by the image width by the image height (for instance, if the image is a square of side 256, the maximum value is 256 x 256 x 256).
typedef vl_uint8 vl_mser_pix |
typedef struct _VlMserExtrReg VlMserExtrReg |
typedef struct _VlMserFilt VlMserFilt |
The MSER filter computes the Maximally Stable Extremal Regions of an image.
This structure is opaque.
typedef struct _VlMserReg VlMserReg |
Function Documentation
VL_EXPORT void vl_mser_delete | ( | VlMserFilt * | f | ) |
VL_EXPORT void vl_mser_ell_fit | ( | VlMserFilt * | f | ) |
- Parameters:
-
f MSER filter.
- See also:
- Ellipsoids
Definition at line 849 of file mser.c.
References _VlMserFilt::acc, adv(), _VlMserReg::area, _VlMserFilt::dof, _VlMserFilt::ell, _VlMserFilt::nel, _VlMserFilt::nell, _VlMserFilt::nmer, _VlMserReg::parent, _VlMserFilt::rell, vl_free(), and vl_malloc().
VL_INLINE vl_mser_pix vl_mser_get_delta | ( | VlMserFilt const * | f | ) |
VL_INLINE float const * vl_mser_get_ell | ( | VlMserFilt const * | f | ) |
VL_INLINE vl_uint vl_mser_get_ell_dof | ( | VlMserFilt const * | f | ) |
VL_INLINE vl_uint vl_mser_get_ell_num | ( | VlMserFilt const * | f | ) |
VL_INLINE double vl_mser_get_max_area | ( | VlMserFilt const * | f | ) |
VL_INLINE double vl_mser_get_max_variation | ( | VlMserFilt const * | f | ) |
VL_INLINE double vl_mser_get_min_area | ( | VlMserFilt const * | f | ) |
VL_INLINE double vl_mser_get_min_diversity | ( | VlMserFilt const * | f | ) |
VL_INLINE vl_uint const * vl_mser_get_regions | ( | VlMserFilt const * | f | ) |
VL_INLINE vl_uint vl_mser_get_regions_num | ( | VlMserFilt const * | f | ) |
VL_INLINE VlMserStats const * vl_mser_get_stats | ( | VlMserFilt const * | f | ) |
VL_EXPORT VlMserFilt* vl_mser_new | ( | int | ndims, | |
int const * | dims | |||
) |
Initializes a new MSER filter for images of the specified dimensions. Images are ndims -dimensional arrays of dimensions dims.
- Parameters:
-
ndims number of dimensions. dims dimensions.
Definition at line 284 of file mser.c.
References vl_calloc(), and vl_malloc().
VL_EXPORT void vl_mser_process | ( | VlMserFilt * | f, | |
vl_mser_pix const * | im | |||
) |
The functions calculates the Maximally Stable Extremal Regions (MSERs) of image im using the MSER filter f.
The filter f must have been initialized to be compatible with the dimensions of im.
- Parameters:
-
f MSER filter. im image data.
Definition at line 382 of file mser.c.
References _VlMserExtrReg::area, _VlMserReg::area, climb(), _VlMserFilt::er, _VlMserReg::height, _VlMserExtrReg::index, _VlMserExtrReg::max_stable, _VlMserFilt::mer, _VlMserExtrReg::parent, _VlMserReg::parent, _VlMserFilt::rer, _VlMserFilt::rmer, _VlMserExtrReg::shortcut, _VlMserReg::shortcut, _uMexOption::val, _VlMserExtrReg::value, _VlMserExtrReg::variation, vl_free(), vl_malloc(), VL_MAX, VL_MSER_PIX_MAXVAL, and VL_MSER_VOID_NODE.
VL_INLINE void vl_mser_set_delta | ( | VlMserFilt * | f, | |
vl_mser_pix | x | |||
) |
VL_INLINE void vl_mser_set_max_area | ( | VlMserFilt * | f, | |
double | x | |||
) |
VL_INLINE void vl_mser_set_max_variation | ( | VlMserFilt * | f, | |
double | x | |||
) |
VL_INLINE void vl_mser_set_min_area | ( | VlMserFilt * | f, | |
double | x | |||
) |
VL_INLINE void vl_mser_set_min_diversity | ( | VlMserFilt * | f, | |
double | x | |||
) |