MSER — 自然場景文本檢測

MSER是最大穩(wěn)定極值區(qū)域:是對一幅灰度圖像(灰度值為0~255)取閾值進行二值化處理势告,閾值從0到255依次遞增。閾值的遞增類似于分水嶺算法中的水面的上升肌厨,隨著水面的上升培慌,有一些較矮的丘陵會被淹沒,如果從天空往下看柑爸,則大地分為陸地和水域兩個部分吵护,這類似于二值圖像。在得到的所有二值圖像中表鳍,圖像中的某些連通區(qū)域變化很小馅而,甚至沒有變化,則該區(qū)域就被稱為最大穩(wěn)定極值區(qū)域譬圣。具體算法的原理參考http://blog.csdn.net/zhaocj/article/details/40742191
此刻正在聽張學(xué)友的歌瓮恭,所以想到先做一個測試吧:

2017世界巡回演唱會西安站.jpeg
MSER多用于自然場景的文本檢測的前期階段,產(chǎn)生盡可能多的proposals厘熟,首先回顧一下在調(diào)用這個函數(shù)過程中踩過的坑:
1屯蹦、不知道如何修改MSER中的參數(shù),如灰度值的變化量维哈,檢測到的組塊面積的范圍以及最大的變化率,只能使用默認(rèn)參數(shù)如下:

mser = cv2.MSER_create()

最后發(fā)現(xiàn)了http://bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_features2d.MSER.html#create-int-int-int-double-double-int-double-double-int-登澜,發(fā)現(xiàn)可以醬紫根據(jù)自己的圖像修改參數(shù):

mser = cv2.MSER_create(_delta=2, _min_area=200, _max_variation=0.7)
mser參數(shù).jpeg

2阔挠、下圖是調(diào)用mser后用polylines繪制輪廓的結(jié)果:

cv2.polylines(imgContours, hulls, 1, (255, 0, 0))
mser檢測結(jié)果.jpeg

那如果想要得到外接矩形怎么辦?求助萬能的百度,給出的解決方案如下:http://www.cnblogs.com/jkmiao/p/6797252.html

mser = cv2.MSER_create()
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)
cv2.imshow("img2", vis)

然而并不能解決問題脑蠕,在調(diào)用mser.detectRegions返回兩個函數(shù)的時候會報琼锋,http://answers.opencv.org/question/139636/want-to-get-area-from-mser-operator/這個帖子也出現(xiàn)了類似的錯誤:

contours, boxes = mser.detectRegions(imgThreshCopy)
Error:
TypeError: Required argument 'bboxes' (pos 2) not found

受到findcontours繪制外界矩形的啟發(fā)状勤,因此我嘗試了第二種解決方案:

for c in hulls:
     x, y, w, h = cv2.boundingRect(c)
     cv2.rectangle(vis, (x, y), (x + w, y + h), (255, 0, 0), 1)

至此完美的解決問題,下面是得到的結(jié)果圖:

矩形框繪制結(jié)果.jpeg
3渡八、但是從圖中可以看到很多重疊框默伍,可以在這里加上NMS, 篩選一部分矩形框,推薦這兩篇博客晃跺,寫的很詳細(xì)揩局,給出了demo,地址:1哼审、http://www.pyimagesearch.com/2014/11/17/non-maximum-suppression-object-detection-python/谐腰,2、http://blog.csdn.net/pandav5/article/details/50997272涩盾。 因為在NMS過程中用的數(shù)據(jù)類型是numpy.ndarry, 所以執(zhí)著的我在http://www.reibang.com/p/f8e6a0a6399f中對于list和numpy.ndarry的區(qū)別扒了一下:
最后貼上完整的代碼和運行結(jié)果:

#coding:utf-8
import numpy as np
import cv2
import nms
img = cv2.imread('3447976_0.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
vis = img.copy()
orig = img.copy()
mser = cv2.MSER_create()
regions = mser.detectRegions(gray, None)
hulls = [cv2.convexHull(p.reshape(-1, 1, 2)) for p in regions]
cv2.polylines(img, hulls, 1, (0, 255, 0))
cv2.imshow('img', img)
keep = []
for c in hulls:
    x, y, w, h = cv2.boundingRect(c)
    keep.append([x, y, x + w, y + h])
    cv2.rectangle(vis, (x, y), (x + w, y + h), (255, 255, 0), 1)            
print "[x] %d initial bounding boxes" % (len(keep))
cv2.imshow("hulls", vis)
keep2=np.array(keep)
pick = nms.nms(keep2, 0.5)
print "[x] after applying non-maximum, %d bounding boxes" % (len(pick))
# loop over the picked bounding boxes and draw them
for (startX, startY, endX, endY) in pick:
    cv2.rectangle(orig, (startX, startY), (endX, endY), (255, 0, 0), 1)
cv2.imshow("After NMS", orig)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結(jié)果:
WechatIMG21.jpeg
[x] 1795 initial bounding boxes
[x] after applying non-maximum, 130 bounding boxes

可以看到應(yīng)用NMS之前檢測到的矩形框是1795個十气,應(yīng)用NMS后矩形框的數(shù)量減少到了130個,這張圖只是拿來做測試用春霍,并沒有調(diào)整自己的參數(shù)砸西,用了默認(rèn)值。效果還不錯吧址儒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芹枷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子莲趣,更是在濱河造成了極大的恐慌鸳慈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喧伞,死亡現(xiàn)場離奇詭異走芋,居然都是意外死亡,警方通過查閱死者的電腦和手機潘鲫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門翁逞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溉仑,你說我怎么就攤上這事挖函。” “怎么了浊竟?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵怨喘,是天一觀的道長津畸。 經(jīng)常有香客問我,道長必怜,這世上最難降的妖魔是什么洼畅? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮棚赔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徘郭。我一直安慰自己靠益,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布残揉。 她就那樣靜靜地躺著胧后,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抱环。 梳的紋絲不亂的頭發(fā)上壳快,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音镇草,去河邊找鬼眶痰。 笑死,一個胖子當(dāng)著我的面吹牛梯啤,可吹牛的內(nèi)容都是我干的竖伯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼因宇,長吁一口氣:“原來是場噩夢啊……” “哼七婴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起察滑,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤打厘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贺辰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體户盯,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年魂爪,在試婚紗的時候發(fā)現(xiàn)自己被綠了先舷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡滓侍,死狀恐怖蒋川,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撩笆,我是刑警寧澤捺球,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布缸浦,位于F島的核電站,受9級特大地震影響氮兵,放射性物質(zhì)發(fā)生泄漏裂逐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一泣栈、第九天 我趴在偏房一處隱蔽的房頂上張望卜高。 院中可真熱鬧,春花似錦南片、人聲如沸掺涛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薪缆。三九已至,卻和暖如春伞广,著一層夾襖步出監(jiān)牢的瞬間拣帽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工嚼锄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留减拭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓灾票,卻偏偏與公主長得像峡谊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刊苍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容