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()