Fork me on GitHub

最大稳定极值区域MSER-Maximally Stable Extrernal Regions

基本原理

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

其中Qi表示第i个连通区域的面积,Δ表示微小的阈值变化(注水),当vi小于给定阈值时认为该区域为MSER。
显然,这样检测得到的MSER内部灰度值是小于边界的,想象一副黑色背景白色区域的图片,显然这个区域是检测不到的。因此对原图进行一次MSER检测后需要将其反转,再做一次MSER检测,两次操作又称MSER+和MSER-。

Python源码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
import matplotlib.pyplot as plt

im = cv2.imread('./source.jpg')
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

mser = cv2.MSER_create(_min_area=300)
regions, boxes = mser.detectRegions(gray)

for box in boxes:
x, y, w, h = box
cv2.rectangle(im, (x, y),(x + w, y + h), (255, 0, 0), 2)

cv2.imwrite("./mser.jpg", im)
0%