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