Detect MSER features and return
regions = detectMSERFeatures(
containing information about MSER features detected in the 2-D grayscale
I. This object uses Maximally Stable
Extremal Regions (MSER) algorithm to find regions.
For Simulink® support using this function, you must enable the model
configuration settings. To display the dialog box, in the Simulink Editor, select the Modeling tab and then
select Model Settings > Model Properties. In the
Configuration Parameters dialog box, select
Simulation Target >
Dynamic Memory allocation in
Find MSER Regions in an Image
Read image and detect MSER regions.
I = imread('cameraman.tif'); regions = detectMSERFeatures(I);
Visualize MSER regions which are described by pixel lists stored inside the returned 'regions' object.
figure; imshow(I); hold on; plot(regions,'showPixelList',true,'showEllipses',false);
Display ellipses and centroids fit into the regions. By default, plot displays ellipses and centroids.
figure; imshow(I); hold on; plot(regions);
Find circular MSER regions
Detect MSER regions.
I = imread('coins.png'); [regions,mserCC] = detectMSERFeatures(I);
Show all detected MSER Regions.
figure imshow(I) hold on plot(regions,'showPixelList',true,'showEllipses',false)
Measure the MSER region eccentricity to gauge region circularity.
stats = regionprops('table',mserCC,'Eccentricity');
Threshold eccentricity values to only keep the circular regions. (Circular regions have low eccentricity.)
eccentricityIdx = stats.Eccentricity < 0.55; circularRegions = regions(eccentricityIdx);
Show the circular regions.
figure imshow(I) hold on plot(circularRegions,'showPixelList',true,'showEllipses',false)
I — Input image
M-by-N 2-D grayscale
Input image, specified in grayscale. It must be real and nonsparse. The function internally
converts input images to
uint8 that are not
uint8 before looking for MSER regions.
comma-separated pairs of
the argument name and
Value is the corresponding value.
Name must appear inside quotes. You can specify several name and value
pair arguments in any order as
[30 14000], specifies the size of the region in pixels.
ThresholdDelta — Step size between intensity threshold levels
2 (default) | percent numeric value
Step size between intensity threshold levels, specified as
the comma-separated pair consisting of '
and a numeric value in the range (0,100]. This value is expressed
as a percentage of the input data type range used in selecting extremal
regions while testing for their stability. Decrease this value to
return more regions. Typical values range from 0.8 to 4.
RegionAreaRange — Size of the region
[30 14000] (default) | two-element vector
Size of the region in pixels, specified as the comma-separated
pair consisting of '
RegionAreaRange' and a two-element
vector. The vector, [minArea maxArea],
allows the selection of regions containing pixels to be between minArea and maxArea,
MaxAreaVariation — Maximum area variation between extremal regions
0.25 (default) | positive scalar
Maximum area variation between extremal regions at varying intensity
thresholds, specified as the comma-separated pair consisting of '
and a positive scalar value. Increasing this value returns a greater
number of regions, but they may be less stable. Stable regions are
very similar in size over varying intensity thresholds. Typical values
range from 0.1 to 1.0.
ROI — Rectangular region of interest
I,1)] (default) | vector
Rectangular region of interest, specified as a vector. The vector
must be in the format [x y width height].
When you specify an
ROI, the function detects
corners within the area located at [x y]
of size specified by [width height]
. The [x y] elements specify
the upper left corner of the region.
regions — MSER regions object
MSERRegions object (default)
MSER regions object, returned as a
MSERRegions object. The object contains information
about MSER features detected in the grayscale input image.
cc — Connected component structure
Connected component structure, returned as a structure with
four fields. The connected component structure is useful for measuring
region properties using the
The four fields:
Connectivity of the MSER regions.
Number of MSER regions in
Intensity Threshold Levels
The MSER detector incrementally steps through the intensity range of the input image to detect
stable regions. The
ThresholdDelta parameter determines the
number of increments the detector tests for stability. You can think of the
threshold delta value as the size of a cup to fill a bucket with water. The smaller
the cup, the more number of increments it takes to fill up the bucket. The bucket
can be thought of as the intensity profile of the region.
The MSER object checks the variation of the region area size between
different intensity thresholds. The variation must be less than the value of the
MaxAreaVariation parameter to be considered stable.
MSER feature detection is not suitable for use in images with extreme intensity value changes.
At a high level, MSER can be explained, by thinking of the intensity profile of an image representing a series of buckets. Imagine the tops of the buckets flush with the ground, and a hose turned on at one of the buckets. As the water fills into the bucket, it overflows and the next bucket starts filling up. Smaller regions of water join and become bigger bodies of water, and finally the whole area gets filled. As water is filling up into a bucket, it is checked against the MSER stability criterion. Regions appear, grow and merge at different intensity thresholds.
 Nister, D., and H. Stewenius, "Linear Time Maximally Stable Extremal Regions", Lecture Notes in Computer Science. 10th European Conference on Computer Vision, Marseille, France: 2008, no. 5303, pp. 183–196.
 Matas, J., O. Chum, M. Urba, and T. Pajdla. "Robust wide baseline stereo from maximally stable extremal regions." Proceedings of British Machine Vision Conference, pages 384-396, 2002.
 Obdrzalek D., S. Basovnik, L. Mach, and A. Mikulik. "Detecting Scene Elements Using Maximally Stable Colour Regions," Communications in Computer and Information Science, La Ferte-Bernard, France; 2009, vol. 82 CCIS (2010 12 01), pp 107–115.
 Mikolajczyk, K., T. Tuytelaars, C. Schmid, A. Zisserman, T. Kadir, and L. Van Gool, "A Comparison of Affine Region Detectors"; International Journal of Computer Vision, Volume 65, Numbers 1–2 / November, 2005, pp 43–72 .
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Generates portable C code using a C++ compiler that links to OpenCV (Version 3.4.0) libraries. See Portable C Code Generation for Functions That Use OpenCV Library.
For code generation, the function outputs
regions.PixelListas an array. The region sizes are defined in
For embedded real-time code generation support, you must enable the variable-size signals. Code Generation > Interface from the Configuration Parameters dialog box.