MSER(Maximally Stable Extrernal Regions)是区域检测中影响最大的算法

1. 原理

MSER基于分水岭的概念:对图像进行二值化,二值化阈值取[0, 255],这样二值化图像就经历一个从全黑到全白的过程(就像水位不断上升的俯瞰图)。在这个过程中,有些连通区域面积随阈值上升的变化很小,这种区域就叫MSER。

,其中Qi表示第i个连通区域的面积,Δ表示微小的阈值变化(注水),当vi小于给定阈值时认为该区域为MSER。

显然,这样检测得到的MSER内部灰度值是小于边界的,想象一副黑色背景白色区域的图片,显然这个区域是检测不到的。因此对原图进行一次MSER检测后需要将其反转,再做一次MSER检测,两次操作又称MSER+和MSER-

2. 算法步骤

从上节可以看到,MSER的基本思路很简单,但编码实现是很需要算法和编程技巧的

以下算法步骤基于改进的分水岭算法:注水的地方固定,只有当该处的沟壑水漫出来后才能注入到另一个沟壑

此外,为方便编程,面积变化的计算方式也从双边改为单边检测,即

import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages/') from PIL import Image
import numpy as np
import cv2
import matplotlib.pyplot as plt img = cv2.imread('img/origin2/31.jpg')
mser = cv2.MSER_create(_min_area=300) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
regions, boxes = mser.detectRegions(gray) for box in boxes:
x, y, w, h = box
cv2.rectangle(img, (x,y),(x+w, y+h), (255, 0, 0), 2) plt.imshow(img,'brg')
plt.show()

最新文章

  1. ASP.NET MVC 5 -从控制器访问数据模型
  2. 可输出sql的PrepareStatement封装
  3. servlet中请求转发(forword)与重定向(sendredirect)的区别
  4. Linux 压缩系列常用命令
  5. Struts2基本配置详解
  6. 用NAN简化Google V8 JS引擎的扩展
  7. java基础知识回顾之java Thread类学习(四)--java多线程安全问题(锁)
  8. 黄源河《左偏树的应用》——数字序列(Baltic 2004)
  9. gridview中判断隐藏还是现实
  10. red hat Linux 使用CentOS yum源更新
  11. Nginx集群之SSL证书的WebApi微服务
  12. 关于导入excel问题
  13. 软工+C(11): 从命令行开始逐步培养编程能力(Java)
  14. Composer 安装时要求输入授权用户名密码?
  15. 咖啡之约--体验 SourceAnywhere
  16. HDU - 4780费用流
  17. Yii2 数据库查询汇总
  18. 【待补充】[Spark Core] Spark 实现标签生成
  19. java 类中的细节
  20. 汇编,浮点运算符,fldpi,fmul等指令说明.

热门文章

  1. hdu3605 Escape 二分图多重匹配/最大流
  2. linux ssh的安装与配置以及实现密钥登录
  3. .NET本质论 用类型编程
  4. S老师 背包系统 装备系统 锻造系统 学习
  5. PowerDesigner学习 ---- 系列文章
  6. Linux下安装jdk&Jmeter
  7. CSS如何实现”右部宽度固定,左部自适应“的布局
  8. webpack 中,loader、plugin 的区别
  9. 运用MQTT-JMeter插件测试MQTT服务器性能
  10. Vivado HLS初识---阅读《vivado design suite tutorial-high-level synthesis》(4)