|
本帖最后由 ancientcc 于 2017-10-22 19:18 编辑
最大稳定极值区域(Maximally Stable Extremal Regions)是一种类似分水岭图像的分割与匹配算法。它具有SIFT SURF及 ORB等特征不具备的仿射不变性,近年来广泛应用于图像分割与匹配领域。
详细算法原理介绍可参见链接:http://blog.csdn.net/zhaocj/article/details/40742191
使用cv::MSER就两个步骤,一是创建创建MSER对象,二是MSER检测。
一:创建MSER对象
- cv::Ptr<cv::MSER> mesr1 = cv::MSER::create(2, 10, 5000, 0.5, 0.3);
- //如果想要了解各参数的含义,首先需要通过以上链接了解算法原理。2表示灰度值的变化量,10和5000表示检测到的组块面积的范围,0.5为最大的变化率,0.3为稳定区域的最小变换量
复制代码
二:MSER检测
- std::vector<std::vector<cv::Point> > regContours;
- std::vector<cv::Rect> bboxes;
- mesr1->detectRegions(gray, regContours, bboxes); //gray为处理的图像,为单通道灰度图
复制代码
如何直观理解detectRegions产生的输出结果regContours、bboxes1?以看以下两张图。
左侧是输入的灰度图,即detectRegions的输入参数gray。右侧是在灰度图的基础上叠加regContours中的两个单元(红色),和bboxes中的所有单元(白色)。以下是几个结论。
- regContours长度一定等于bboxes长度。即regContours.size() == bboxes.size(),值就是该图中存在的最大稳定极值区域的个数。
- regContours[j]表示第j个最大稳定极值区域中露出的像素点。bboxes[j]则是包围这些像素点的最小矩形。
- 某个极值区域可能是另外个极值区域的子集。
- 不同区域的bboxes[j]有可能是相同值。
|
|