class cv::MSER

Overview

Maximally stable extremal region extractor. More…

#include <features2d.hpp>

class MSER: public cv::Feature2D
{
public:
    // methods

    static
    Ptr<MSER>
    create(
        int _delta = 5,
        int _min_area = 60,
        int _max_area = 14400,
        double _max_variation = 0.25,
        double _min_diversity = .2,
        int _max_evolution = 200,
        double _area_threshold = 1.01,
        double _min_margin = 0.003,
        int _edge_blur_size = 5
        );

    virtual
    void
    detectRegions(
        InputArray image,
        std::vector<std::vector<Point>>& msers,
        std::vector<Rect>& bboxes
        ) = 0;

    virtual
    int
    getDelta() const = 0;

    virtual
    int
    getMaxArea() const = 0;

    virtual
    int
    getMinArea() const = 0;

    virtual
    bool
    getPass2Only() const = 0;

    virtual
    void
    setDelta(int delta) = 0;

    virtual
    void
    setMaxArea(int maxArea) = 0;

    virtual
    void
    setMinArea(int minArea) = 0;

    virtual
    void
    setPass2Only(bool f) = 0;
};

Inherited Members

public:
    // methods

    virtual
    void
    clear();

    virtual
    bool
    empty() const;

    virtual
    String
    getDefaultName() const;

    virtual
    void
    read(const FileNode& fn);

    virtual
    void
    save(const String& filename) const;

    virtual
    void
    write(FileStorage& fs) const;

    template <typename _Tp>
    static
    Ptr<_Tp>
    load(
        const String& filename,
        const String& objname = String()
        );

    template <typename _Tp>
    static
    Ptr<_Tp>
    loadFromString(
        const String& strModel,
        const String& objname = String()
        );

    template <typename _Tp>
    static
    Ptr<_Tp>
    read(const FileNode& fn);

    virtual
    void
    compute(
        InputArray image,
        std::vector<KeyPoint>& keypoints,
        OutputArray descriptors
        );

    virtual
    void
    compute(
        InputArrayOfArrays images,
        std::vector<std::vector<KeyPoint>>& keypoints,
        OutputArrayOfArrays descriptors
        );

    virtual
    int
    defaultNorm() const;

    virtual
    int
    descriptorSize() const;

    virtual
    int
    descriptorType() const;

    virtual
    void
    detect(
        InputArray image,
        std::vector<KeyPoint>& keypoints,
        InputArray mask = noArray()
        );

    virtual
    void
    detect(
        InputArrayOfArrays images,
        std::vector<std::vector<KeyPoint>>& keypoints,
        InputArrayOfArrays masks = noArray()
        );

    virtual
    void
    detectAndCompute(
        InputArray image,
        InputArray mask,
        std::vector<KeyPoint>& keypoints,
        OutputArray descriptors,
        bool useProvidedKeypoints = false
        );

    virtual
    bool
    empty() const;

    void
    read(const String& fileName);

    virtual
    void
    read(const FileNode& fn);

    void
    write(const String& fileName) const;

    virtual
    void
    write(FileStorage& fs) const;

protected:
    // methods

    void
    writeFormat(FileStorage& fs) const;

Detailed Documentation

Maximally stable extremal region extractor.

The class encapsulates all the parameters of the MSER extraction algorithm (see wiki article).

  • there are two different implementation of MSER: one for grey image, one for color image
  • the grey image algorithm is taken from: [62]; the paper claims to be faster than union-find method; it actually get 1.5~2m/s on my centrino L7200 1.2GHz laptop.
  • the color image algorithm is taken from: [28]; it should be much slower than grey image method ( 3~4 times ); the chi_table.h file is taken directly from paper’s source code which is distributed under GPL.
  • (Python) A complete example showing the use of the MSER detector can be found at samples/python/mser.py

Methods

static
Ptr<MSER>
create(
    int _delta = 5,
    int _min_area = 60,
    int _max_area = 14400,
    double _max_variation = 0.25,
    double _min_diversity = .2,
    int _max_evolution = 200,
    double _area_threshold = 1.01,
    double _min_margin = 0.003,
    int _edge_blur_size = 5
    )

Full consturctor for MSER detector.

Parameters:

_delta it compares \((size_{i}-size_{i-delta})/size_{i-delta}\)
_min_area prune the area which smaller than minArea
_max_area prune the area which bigger than maxArea
_max_variation prune the area have simliar size to its children
_min_diversity for color image, trace back to cut off mser with diversity less than min_diversity
_max_evolution for color image, the evolution steps
_area_threshold for color image, the area threshold to cause re-initialize
_min_margin for color image, ignore too small margin
_edge_blur_size for color image, the aperture size for edge blur
virtual
void
detectRegions(
    InputArray image,
    std::vector<std::vector<Point>>& msers,
    std::vector<Rect>& bboxes
    ) = 0

Detect MSER regions.

Parameters:

image input image (8UC1, 8UC3 or 8UC4, must be greater or equal than 3x3)
msers resulting list of point sets
bboxes resulting bounding boxes