matlab实现MSER(最大极值稳定区域)来进行文本定位

利用matlab的detectMSERFeature来实现简单文本定位

1.处理流程


首先是输入一幅图像,想进行必要的预处理如灰度化,然后提取MSER区域

(这里直接利用的是matlab自带的函数detectMSERFeature),然后将得到的区域转换成二值图像(主要是利用取得区域的坐标信息)。对得到的MSER区域二值图像进行连通域分析,

先粗过滤一些明显不符合字符的区域,然后对过滤后的图像进行闭运算。

闭运算之后再进行一次细滤除,最后得到包围文本区域的包围盒。

先看几组效果,左边是原图,右边是定位后的图,绿色线画出来的区域,不是很明显。

图是比较简单,说明这个方法还是比较初级的,存在比较多的经验阈值。

CODE


怎样把mser算法中分割的region坐标取出来?

如果用的OpenCV, mser.detectRegions()返回值第一个就是region,数据结构差不多是

[[[x11, y11], [x12, y12], [], ...], [[x21, y21], []...]]

用的都是np数组。第二个返回值是一组bounding box的list。

代码包里的EXAMPLE里有mser.py这个例子可参考。

Has anyone used MSER in OpenCV to detect regions?


Opencv MSER detectRegions C++

following steps are performed:

  1. Read image using imread

  2. Convert to gray scale using cvtColor with COLOR_BGR2GRAY

  3. Perform histogram equalization:

    a. CLAHE object is created using clipLimit=2.0, tileGridSize - 8x8
    
    b. apply CLAHE on gray image
    
  4. Get height and width of image.
  5. Scale image to 600X800 SVGA size

    a. if width > height then scale = width / 800.0

    b. else scale = height / 600.0

    c. Use 'resize' with above scaling factor 'scale'

  6. Create MSER object
  7. setDelta(4)
  8. Call detectRegions


cv::MSER(2, 10, 5000, 0.5, 0.3)(gray, regContours);

cv::MSER(2, 10, 5000, 0.5, 0.3)已经实例化对象了啊。
编译器已经知道此处有个实例对象,当然可以直接调用成员函数了。
只不过这个实力对象没有载体,只能这里调用一次。

之后就丢失了可寻的载体,你就没法用了而已。


cv::MSER(2, 10, 5000, 0.5, 0.3)
这样已经是调用构造函数构造出一个匿名对象了

随后调用了该对象的void operator()方法








发布了1662 篇原创文章 · 获赞 354 · 访问量 231万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览