摘 要: 介紹了一種基于面向?qū)ο蟮腣isual C++語言,在Windows MFC平臺下開發(fā)出的視頻字幕自動提取系統(tǒng)。該系統(tǒng)應(yīng)用垂直、水平、對角方向的邊緣檢測算子檢測出3個方向的字幕邊緣信息,然后運(yùn)用形態(tài)學(xué)對每個方向的邊緣圖像進(jìn)行處理,最終運(yùn)用與融合提取出字幕區(qū)域。實(shí)驗(yàn)結(jié)果驗(yàn)證,該系統(tǒng)性能穩(wěn)定,字幕定位較精準(zhǔn)。
關(guān)鍵詞: Visual C++;邊緣檢測;形態(tài)學(xué);文字提取
0 引言
隨著計(jì)算機(jī)科學(xué)的飛速發(fā)展,海量的視頻出現(xiàn)在數(shù)字圖書館、電視廣播和互聯(lián)網(wǎng)上。在這些視頻中,大多數(shù)都嵌入了一些解說性的、含有豐富語義信息的文字,例如:說話者姓名、電視節(jié)目介紹、節(jié)目名稱、滾動文字新聞、實(shí)時比分、運(yùn)動員號碼、時間等信息[1-3]。如果能將這些文字自動提取出來,將對視頻的索引起到關(guān)鍵的作用,有利于用戶迅速準(zhǔn)確地從海量視頻中找到自己感興趣的內(nèi)容[4],在信息化的時代背景下,視頻字幕自動定位與提取的應(yīng)用價值越來越高。本系統(tǒng)的開發(fā)是基于Windows環(huán)境下的MFC平臺,利用Visual C++[5-7]面向?qū)ο蟮木幊陶Z言而完成的。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)具有文字提取較精準(zhǔn)、運(yùn)行穩(wěn)定等優(yōu)點(diǎn)。
1 系統(tǒng)總體設(shè)計(jì)
1.1 系統(tǒng)實(shí)現(xiàn)目標(biāo)
該系統(tǒng)實(shí)現(xiàn)的基本目標(biāo)是基于Visual C++6.0開發(fā)環(huán)境,對一個含有字幕信息的24位真彩色的JPEG文件,通過文字提取算法的處理來實(shí)現(xiàn)視頻圖像中字幕的自動定位與提取。
在文字提取方面,國內(nèi)外學(xué)者都做了一定的研究,大致可以分為基于邊緣、基于紋理和基于連通區(qū)域三類方法。KEECHUL J等人[8]提出一種綜合運(yùn)用紋理和連通組元分析的方法來定位文字,組建基于多層感知器(MLP)的紋理分類器和基于連通分量(CC)的濾波器,整個算法復(fù)雜,且需要足夠的訓(xùn)練樣本。KIM K I等[9]人提出用支持向量機(jī)(SVM)的紋理分類器來檢測視頻中的文字,該方法的檢測結(jié)果雖然較好,但是計(jì)算量大。ADRIAN C R等人[10]提出基于顏色聚類的方法進(jìn)行文字定位,其主要針對手機(jī)上的視頻圖像有一定的局限性。本文在分析以上文字提取算法的基礎(chǔ)上,提出一個新的、有效的文字提取算法,即利用垂直、水平、對角3個方向的邊緣檢測算子檢測出3個方向的文字邊緣信息;在此基礎(chǔ)上,利用形態(tài)學(xué)對3個方向的邊緣圖像進(jìn)行處理,最終,將3個方向的圖像進(jìn)行與融合,消除大量的噪聲,從而定位并提取出字幕區(qū)域。實(shí)驗(yàn)驗(yàn)證,該算法能較好地提取出視頻中的字幕信息。
1.2 系統(tǒng)的體系結(jié)構(gòu)設(shè)計(jì)實(shí)現(xiàn)
該系統(tǒng)采用MFC單文檔單視圖的結(jié)構(gòu)設(shè)計(jì),通過文件→打開的方式讀取圖像文件,并判斷文件是否滿足處理要求(24位真彩色的JPEG文件)。該系統(tǒng)的處理流程如圖1所示。該工程的工程名為“ViewDIB”,圖像文件打開與數(shù)據(jù)讀取在類CViewDIBDoc中的CViewDIBDoc::OnOpenDocument(LPCTSTR lpszPathName)函數(shù)中實(shí)現(xiàn),而圖像的顯示及對各種處理算法菜單命令的響應(yīng)在類CViewDIBView中實(shí)現(xiàn)。系統(tǒng)的主界面如圖2所示。
2 垂直、水平、對角方向的邊緣提取
目前,常用的基本邊緣檢測算子大致有三類:第一類是Roberts邊緣檢測算子,它的特點(diǎn)是采用對角方向像素之間的差來檢測圖像邊緣,對噪聲較敏感,定位比較準(zhǔn);第二類是Sobel算子,它利用像素點(diǎn)上下、左右鄰點(diǎn)的灰度加權(quán)算法來定位邊緣,能提供較為精確的邊緣方向信息,但它同時也會檢測出許多的偽邊緣;第三類是拉普拉斯算子,它是一個二階導(dǎo)數(shù)算子,利用它能對圖像的邊緣信息進(jìn)行較好的定位。針對目前網(wǎng)絡(luò)、電視中視頻圖像的邊緣信息一般都比較豐富這一情況,本文考慮圖像色彩的綜合信息,在以上3個算子的基礎(chǔ)上提出了一個可以檢測垂直、水平、對角3個方向的彩色邊緣算子,如圖3所示。以像素點(diǎn)(i,j)為例,利用公式 RV(i,j)=ev(k)×R(k),GV(i,j)=ev(k)×G(k),BV(i,j)=ev(k)×B(k)來獲取垂直方向的邊緣圖像。其中ev(k)為圖3(a)中的垂直檢測算子,R(k)、G(k)和B(k)分別為檢測算子在視頻圖像中所掃描到的像素點(diǎn)(i,j)處及它的八鄰域內(nèi)的紅、綠、藍(lán)分量。
在編寫程序時,在視類CViewDIBView中建立3個消息響應(yīng)函數(shù)OnVertedge()、OnHorzedge()和OnVerthorzedge(),分別提取垂直、水平和對角方向的邊緣信息。以垂直方向?yàn)槔?,其函?shù)具體實(shí)現(xiàn)代碼如下:
void CViewDIBView::OnVertedge()
{CConvoluteDlg FD(1,10,3,this);
//卷積度選擇,最大10,最小1,默認(rèn)3
if(FD.DoModal()==IDOK)
{
CViewDIBDoc*pDoc=GetDocument();
m_pDib->Vertedge(hDIB,F(xiàn)D.m_nStreng);
//調(diào)用垂直邊緣提取函數(shù)
pDoc->SetModifiedFlag(TRUE);//做好標(biāo)記
OnRealizePal((WPARAM)m_hWnd,0);
//創(chuàng)建新的調(diào)色板
pDoc->UpdateAllViews(NULL);//更新視圖
OnTogray();//轉(zhuǎn)變?yōu)榛叶葓D
OnPointinvert();//圖像反色處理
}
}
完成代碼的編寫、編譯和鏈接后,即可在調(diào)試出的系統(tǒng)界面中的工具欄中點(diǎn)擊“VE”、“HE”、“DE”輕松獲取3個方向的邊緣圖像。圖4給出了3個方向的邊緣檢測結(jié)果。
3 形態(tài)學(xué)處理
數(shù)學(xué)形態(tài)學(xué)的基本運(yùn)算有4個:膨脹、腐蝕、開啟和閉合[11-12]。本文利用這4個運(yùn)算設(shè)計(jì)了一個針對3個方向邊緣圖像的形態(tài)學(xué)處理方案,每個方向的邊緣圖像都經(jīng)過下面的處理,具體實(shí)施如下:(1)利用一次閉合運(yùn)算,填補(bǔ)字幕區(qū)域內(nèi)的空洞;(2)利用一次開啟運(yùn)算,刪除字幕區(qū)域以外的噪聲;(3)利用6次水平方向的膨脹與3次水平方向的腐蝕擴(kuò)大和縮小字幕區(qū)域,此處采用水平方向的結(jié)構(gòu)元素B={1,1,1,1,1}。實(shí)驗(yàn)證明此結(jié)構(gòu)大小適中,且能有效地形成文字連通域,如圖5所示。
在編程時,視類CViewDIBView中建立OnCloseOperate()、OnOpenOperate()、OnHDilation()、OnHErosion()4個消息響應(yīng)函數(shù),它們分別代表閉合、開啟、水平膨脹、水平腐蝕運(yùn)算。在系統(tǒng)界面中,只需在工具欄中點(diǎn)擊與上面4個函數(shù)對應(yīng)的圖標(biāo)“C”、“O”、“HD”、“HE”即可完成以上4個運(yùn)算。其中閉合運(yùn)算“C”的代碼實(shí)現(xiàn)如下:
void CViewDIBView::OnCloseOperate()
{
CViewDIBDoc*pDoc=GetDocument();
m_pDib->CloseOperate();//調(diào)用閉合函數(shù)
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0);
pDoc->UpdateAllViews(NULL);
}
BOOL CDib::CloseOperate()
//在CDib類中實(shí)現(xiàn)閉合函數(shù)
{
if(IsEmpty())
return FALSE;
if(!VHDilationDIB(m_hDib))//調(diào)用膨脹函數(shù)
return FALSE;
if(!VHErosionDIB(m_hDib))//調(diào)用腐蝕函數(shù)
return FALSE;
return UpdateInternal();
}
4 與融合
為了較精準(zhǔn)地判斷出字幕區(qū)域,在得到了垂直、水平、對角3個方向的文字連通域圖TV(x,y)、TH(x,y)、TD(x,y)后,本系統(tǒng)采用“與”融合的方法,將3個方向的文字連通域圖進(jìn)行相與運(yùn)算。
MFC編程實(shí)現(xiàn)時,在系統(tǒng)界面中添加“AND”圖標(biāo),同時在視類CViewDIBView中建立起與之對應(yīng)的消息響應(yīng)函數(shù)OnTextVerify(),其程序代碼實(shí)現(xiàn)如下:
void CViewDIBView::OnTextVerify()
{
CViewDIBDoc*pDoc=GetDocument();
m_pDib->Textverify();//調(diào)用與運(yùn)算
pDoc->SetModifiedFlag(TRUE);
OnRealizePal((WPARAM)m_hWnd,0);
pDoc->UpdateAllViews(NULL);
}
實(shí)驗(yàn)證明,采用與融合方法能去除很大部分的噪聲區(qū)域,能較準(zhǔn)確地定位出字幕區(qū)域TI(x,y)。但也發(fā)現(xiàn)在TI(x,y)中仍存在小部分的偽字幕區(qū)域,因此,本文運(yùn)用遞歸算法[13]統(tǒng)計(jì)出各候選文字區(qū)域的白色像素總數(shù)PixelNum,若PixelNum<areapixel(areapixel為圖像高度×圖像寬度/150),則偽字幕區(qū)域就被刪除。實(shí)驗(yàn)證明,此方法簡單且能有效地判斷出字幕區(qū)域,圖6給出了與融合的處理結(jié)果。
5 字幕區(qū)域的坐標(biāo)定位與提取
在去除了偽字幕區(qū)域后,本文采用以下算法完成字幕區(qū)域的坐標(biāo)定位。
?。?)判斷像素點(diǎn)(x,y)是否為白色,若不是,則算法結(jié)束;
(2)若像素點(diǎn)(x,y)是白色,則掃描(x,y)的4個鄰域,若4個鄰域內(nèi)無白色像素,則算法結(jié)束,并返回文字區(qū)域的左上角和右下角坐標(biāo)值;
?。?)若(x,y)的4個鄰域仍存在白色像素點(diǎn),則調(diào)整文字區(qū)域的左上角和右下角坐標(biāo),并繼續(xù)判斷其他像素點(diǎn)及其鄰域是否為白色像素點(diǎn),最終返回一個確定的左上角和右下角坐標(biāo)值。
在編寫程序時,在系統(tǒng)界面的工具欄中建立“L”和“EX”圖標(biāo),分別代表字幕區(qū)域的坐標(biāo)定位(Location)與提取(Extraction),同時,在視類CViewDIBView中創(chuàng)建與兩個圖標(biāo)對應(yīng)的消息響應(yīng)函數(shù)OnTextLocate()和OnTextExtract()來完成字幕區(qū)域的坐標(biāo)定位與提取,其結(jié)果如圖7所示。
6 結(jié)論
本系統(tǒng)基于字幕的邊緣特征信息,利用了垂直、水平、對角方向的邊緣檢測算子獲取字幕的邊緣信息,在此基礎(chǔ)上,結(jié)合數(shù)學(xué)形態(tài)學(xué)的處理,得到3個方向的字幕連通域圖,最后將這3個不同方向的連通域圖進(jìn)行邏輯與融合,定位并提取出最終的字幕區(qū)域。實(shí)驗(yàn)結(jié)果表明,基于Visual C++6.0環(huán)境下并結(jié)合文字提取算法實(shí)現(xiàn)的字幕自動提取系統(tǒng)具有字幕定位準(zhǔn)、運(yùn)行速度快且穩(wěn)定等特點(diǎn)。
提取出字幕信息后,本系統(tǒng)下一步的研究方向?yàn)椋海?)對字幕信息進(jìn)行二值化等處理,并將其送入OCR系統(tǒng)進(jìn)行識別;(2)基于Visual C++6.0開發(fā)環(huán)境,結(jié)合開源發(fā)行的跨平臺計(jì)算機(jī)視覺庫OpenCV,進(jìn)一步優(yōu)化和完善本系統(tǒng)。
參考文獻(xiàn)
[1] 張洋.電視視頻字幕文字的提取方法研究[D].合肥:中國科學(xué)技術(shù)大學(xué),2009.
[2] 陳義,李言俊,孫小煒.利用OCR識別技術(shù)實(shí)現(xiàn)視頻中文字的提取[J].計(jì)算機(jī)工程與應(yīng)用,2010,46(10):180-183.
[3] 姜曉希,馮靖怡,馮結(jié)青.視頻內(nèi)容敏感的動態(tài)字幕[M].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報,2011,23(5):855-862.
[4] 章毓晉.基于內(nèi)容的視覺信息檢索[M].北京:科學(xué)出版社,2003.
[5] 王占全,徐惠.Visual C++數(shù)字圖像處理技術(shù)與工程案例[M].北京:人民郵電出版社,2009.
[6] 張宏林.精通Visual C++數(shù)字圖像處理典型算法及實(shí)現(xiàn)(第2版)[M].北京:人民郵電出版社,2008.
[7] 俞朝暉,龐也馳,于濤.Visual C++數(shù)字圖像處理與工程應(yīng)用實(shí)踐[M].北京:中國鐵道出版社,2012.
[8] KEECHUL J, HAN J H. Hybrid approach to efficient text extraction in complex color images[J]. Pattern Recognition Letters, 2004(25):679-699.
[9] KIM K I, JUNG K C, RARK S H, et al. Support vector machines for texture classification[C]. IEEE Transactions on Image Processing, 2002, 24:1542-1550.
[10] ADRIAN C R, KIM J H, KIM S H. Efficient text extraction algorithm using color clustering for language translation in mobile phone[J]. Signal and Information Processing, 2012(3): 228-237.
[11] 李敏,蔣建春.基于腐蝕算法的圖像邊緣檢測的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(1):82-84.
[12] 范立南,李金峰,張義鑫.基于Visual C++的廣義形態(tài)圖像邊緣檢測算法[J].計(jì)算機(jī)應(yīng)用與軟件,2006,23(7):8-10.
[13] 徐慧.Visual C++數(shù)字圖像實(shí)用工程案例精選(第1版)[M].北京:人民郵電出版社,2004.