蔣 健,湯勇明
(東南大學(xué)電子科學(xué)與工程學(xué)院,南京 210096)
?
視頻幀圖像信息提取及OSD的設(shè)計(jì)與實(shí)現(xiàn)
蔣健,湯勇明*
(東南大學(xué)電子科學(xué)與工程學(xué)院,南京 210096)
摘要:實(shí)時視頻處理近年來發(fā)展迅速,大多數(shù)實(shí)時視頻信號處理算法均建立在對視頻流信息的統(tǒng)計(jì)基礎(chǔ)上?;贔PGA設(shè)計(jì)了通用視頻幀信息提取程序模塊,可實(shí)現(xiàn)實(shí)時對視頻流進(jìn)行分辨率、亮度比、灰度直方等信息提取及在屏幕上顯示(OSD)的功能。測試結(jié)果表明,視頻幀信息提取準(zhǔn)確,OSD信息實(shí)時更新,兼容性好,運(yùn)行穩(wěn)定。此設(shè)計(jì)需要消耗8 kbit的LE資源和150 kbit的存儲資源。
關(guān)鍵詞:FPGA;視頻信息提取;OSD顯示;實(shí)時處理
本設(shè)計(jì)使用的開發(fā)環(huán)境是QuartusⅡ,硬件描述語言是Verilog HDL,硬件開發(fā)平臺是基于Altera公司FPGA芯片的DE2,它帶有視頻解碼器ADV7181B和視頻編碼器ADV7123,符合本設(shè)計(jì)需求。視頻源由DVD輸出,處理結(jié)果送顯示器呈現(xiàn),DE2作為中間處理平臺,如圖1所示。
圖1 系統(tǒng)示意
本設(shè)計(jì)主要完成視頻幀信息的檢測與OSD的顯示(包括了ROM的設(shè)計(jì))功能,在DE2的演示例程TVBOX的基礎(chǔ)上開發(fā)實(shí)現(xiàn),FPGA內(nèi)部總體系統(tǒng)構(gòu)成如圖2所示。
圖2 系統(tǒng)構(gòu)成圖
圖2中虛線框內(nèi)的ITU-R656解碼器模塊和YCrCb轉(zhuǎn)換成RGB模塊為原有模塊。ITU-R656模塊負(fù)責(zé)把視頻解碼器送進(jìn)來的數(shù)據(jù)信號進(jìn)行分離并存儲,根據(jù)輸入的行同步信號HS,場同步信號VS和時鐘信號分離出Y、Cr、Cb等信號。YCrCb、HSV等顏色空間由于將亮度和色度屬性進(jìn)行了分離,在圖像處理方面有突出的優(yōu)勢[4],而顯示器是根據(jù)RGB色彩空間來進(jìn)行顯示的,因此需要YCrCb2RGB模塊負(fù)責(zé)把輸入的Y、Cr、Cb數(shù)據(jù)轉(zhuǎn)換成R、G、B數(shù)據(jù),最后由視頻編碼器接收數(shù)據(jù)。
圖中實(shí)線框內(nèi)的視頻幀信息檢測模塊、OSD控制模塊和字符ROM模塊為此次開發(fā)模塊,實(shí)現(xiàn)所需的功能。
PAL制式和NTSC制式的視頻源都是采用的隔行掃描,而顯示器是按照逐行掃描顯示的,因此在程序內(nèi)部還有隔行轉(zhuǎn)換成逐行的小模塊[5],此處未列出。
2.1視頻幀信息提取模塊
此模塊通過對視頻幀圖像幀率、行列分辨率、亮度比和灰度信息進(jìn)行提取,為OSD顯示提供數(shù)據(jù)。作為一個可以獨(dú)立的模塊,在其他系統(tǒng)需要評估視頻幀圖像質(zhì)量時,能夠方便地嵌入其他系統(tǒng)運(yùn)行。為了實(shí)現(xiàn)這一通用性,在幀率和行列分辨率上進(jìn)行了冗余設(shè)計(jì),大幅提升了針對不同系統(tǒng)的兼容性。幀率最高支持199FPS,分辨率最高支持1 999×1 999,滿足1 920×1 080的全高清顯示。
幀率是用于測量顯示幀數(shù)的量度。測量單位為每秒顯示幀數(shù)(Frame/s)。提取幀率的一種可行方法是計(jì)算兩幀畫面間所用的時間并取倒數(shù)。因此通過對兩幀畫面間的時鐘數(shù)進(jìn)行累計(jì),乘以時鐘的周期(由于時鐘頻率是27 MHz,因此周期是1/27 000 000 s)就得出總的時間,最終計(jì)算出每秒的幀數(shù),即幀率。一幀畫面開始,場同步信號iTD_VS從0變成1有效,因此可以通過計(jì)算2個場同步信號的上升沿之間的時鐘數(shù)來計(jì)算得到幀率。
圖3 幀率提取流程圖
分辨率是屏幕圖像的精密度,是指顯示器所能顯示的像素的多少。此處的分辨率要提取行(水平)分辨率和列(垂直)分辨率。行分辨率代表水平的一行上面像素點(diǎn)的個數(shù),列分辨率代表垂直的一列上面像素點(diǎn)的個數(shù)。
解碼芯片輸出有幾個重要的信號:像素時鐘LLC、場同步信號VS(一幀的開始信號)、行同步信號HS(一幀中一行的開始信號)、數(shù)據(jù)有效信號DE(傳送數(shù)據(jù)是有效的信號)。
對于Y∶Cb∶Cr=4∶4∶4的信號而言,行分辨率即兩次行同步信號HS之間總的有效數(shù)據(jù)的時鐘計(jì)數(shù)值。而對于Y∶Cb∶Cr=4∶2∶2的信號而言,行分辨率還要在此基礎(chǔ)上除以2。以DE2上的視頻解碼芯片ADV7181B為例,1440時鐘周期中有720個Y,720個C,因此總的時鐘計(jì)數(shù)值要只有一半。
流程圖同幀率提取的流程圖,僅僅是行同步信號代替了場同步信號。
列分辨率提取思路同行分辨率,只需對2個場同步信號間的行同步信號的上升沿進(jìn)行計(jì)數(shù)。
亮度比定義的是整個屏幕每個像素點(diǎn)亮度之和與屏幕所有像素點(diǎn)全亮(全白)時總亮度的比值。一個像素點(diǎn)有R、G、B 3種顏色分量,每種分量都有256個灰度級,0~255。當(dāng)R、G、B均為0的時候像素點(diǎn)最暗,為純黑,當(dāng)它們都為255的時候像素點(diǎn)最亮,為純白(全白)。而每個像素點(diǎn)的亮度是R、G、B 3個分量灰度值的平均值。
灰度直方圖是灰度級的函數(shù),它表示圖像中具有某種灰度區(qū)域的像素個數(shù)分布,反映了圖像中不同灰度區(qū)域出現(xiàn)的頻率?;叶仁褂煤谏{(diào)表示物體,即用黑色為基準(zhǔn)色,不同的飽和度的黑色來顯示圖像。每個像素點(diǎn)灰度值的范圍為0~255,表示亮度從深到淺,對應(yīng)圖像中的顏色為從黑到白。為了防止取平均帶來的誤差,需要針對每個像素的R、G、B 3種色彩分別進(jìn)行統(tǒng)計(jì)匯總。為了在屏幕上顯示出直方圖的樣式,需要把0~255的256級灰度值平均分成8段顯示,每段是32(第1段的灰度值是0~31,最后一段的灰度值是224~255)。
由于像素點(diǎn)多,數(shù)據(jù)量大,在進(jìn)行顯示的時候必須按比例縮小數(shù)值,流程圖同亮度比的提取。
圖4 亮度比提取流程圖
2.2字符ROM模塊
使用字模提取字模的16進(jìn)制大小16×16的點(diǎn)陣數(shù)據(jù),寫入mif文件存儲到FPGA的M4K(FPGA內(nèi)部的存儲空間,大小為4K)中,mif文件的內(nèi)容是ROM內(nèi)容的映射,字符圖像點(diǎn)陣數(shù)據(jù)保存在mif文件里面。使用QuartusⅡ軟件中的IP核就可以通過關(guān)聯(lián)mif文件生成對應(yīng)的Verilog文件,只需給時鐘和地址信號就能產(chǎn)生字模數(shù)據(jù)的輸出。使用方便、快捷[5]。
圖5 數(shù)字0~9的字符數(shù)據(jù)
字符ROM有3部分組成:0~9數(shù)字,視頻信息頁的字符(除數(shù)字外),作者版本頁的字符。圖5中一個格子中的4個數(shù)字是16×16字符點(diǎn)陣中的一行,16個格子是一個漢字或數(shù)字,數(shù)字一共10個,因此用了160 byte(這里每個字節(jié)是16 bit)。
2.3OSD模塊
為了對各部分顯示內(nèi)容進(jìn)行有效的控制,把整個屏幕分成三層來顯示。最下面一層是視頻層,是視頻源;中間一層是背景層,用來提升顯示字符和視頻層的顏色對比度。最上面一層是字符層,用來顯示從視頻源中提取到的圖像信息。
背景層能夠幫助用戶更清楚地看清字符。為了進(jìn)一步提升用戶的視覺體驗(yàn),使用半透明的背景層,在看的更清楚的同時也可以看到視頻信息,效果好。為了實(shí)現(xiàn)半透明的效果[6],需要在輸出的時候?qū)、G、B數(shù)值進(jìn)行同比例縮小。VGA顯示是逐行從左到右掃描的,確定了當(dāng)前掃描像素點(diǎn)的行列坐標(biāo),能夠方便地對顯示位置進(jìn)行精確控制。當(dāng)2個行列坐標(biāo)的值達(dá)到設(shè)定的區(qū)間時,就生成一個高有效的使能控制信號.最后將2個使能控制信號進(jìn)行與運(yùn)算,就得到最后的掩膜使能控制信號[7]。
字符層主要分為:靜態(tài)字符,動態(tài)數(shù)字,灰度直方圖。
靜態(tài)字符是字符不會隨著其他模塊的輸入而改變的字符。如字符“行分辨率”。靜態(tài)字符出現(xiàn)在2個界面中,一個是顯示視頻幀信息的主界面,另一個是作者和版本信息界面,第2個界面通過撥碼開關(guān)向上撥動來調(diào)出,此時主界面會被隱藏,撥碼開關(guān)撥下來之后回到主界面。由于字符均為16×16大小,因此每次讀取16 bit,內(nèi)部維護(hù)一個計(jì)數(shù)器,從0開始計(jì)數(shù),當(dāng)記到15的時候地址就加1,就取下一個ROM里面的16 bit的信息。
幀率、分辨率、亮度比的數(shù)值會隨著輸入信號的變化而變化,系統(tǒng)測試的時候可以看到亮度比的數(shù)值在不斷地跳動。針對視頻幀信息提取模塊輸入的亮度比等信息,若需要實(shí)現(xiàn)實(shí)時動態(tài)顯示,就必須對輸入進(jìn)行數(shù)值判斷。以亮度比(0~99%)為例,對亮度比進(jìn)行十位和個位數(shù)字的分離并針對2個數(shù)字分別進(jìn)行顯示。VerliogHDL中的除法都會取整,舍掉小數(shù),因此十位可以通過除以10來提取,即Brightness/10。同理,個位數(shù)字可以通過Brightness-Brightness/10*10來提取。
以直方圖的形式展示的灰度,會隨著輸入灰度值的不同而上下變化。和亮度比的數(shù)字一樣,這樣的設(shè)計(jì)會增加程序的動態(tài)感,不呆板,減輕用戶在使用過程中產(chǎn)生的視覺疲勞。各個區(qū)間內(nèi)灰度值的相對多少是由8段區(qū)間內(nèi)直方圖的顯示高度來反映的。直方圖是高度可以變化,寬度一定的矩形條,通過一個個像素點(diǎn)來顯示。在該設(shè)計(jì)中,在屏幕上顯示位置從左到右是灰度值由小到大,即從黑色到白色。程序內(nèi)部維護(hù)2個行列計(jì)數(shù)器,目的是對行列顯示的像素點(diǎn)進(jìn)行控制,字符使能信號如果為1,就輸出白點(diǎn),否則按原圖像輸出。
3.1測試環(huán)境的搭建
圖6和圖7分別給出了設(shè)計(jì)模塊前后的資源消耗對比,加入前總的邏輯資源使用率為6%,總的存儲資源使用率為5%,加入后為31%和37%。提取視頻幀信息、OSD的顯示以及字符的存儲等功能需要大約8 kbit的LE資源和150 kbit的存儲資源。
圖6 加入設(shè)計(jì)模塊前
圖7 加入設(shè)計(jì)模塊后
3.2測試過程的記錄
系統(tǒng)測試平臺實(shí)物如圖8所示。在測試過程中,顯示字符圖像穩(wěn)定,無閃爍感,和原圖像之間無干擾。背景透明度也比較適中,沒有因?yàn)镺SD界面色彩過深而遮擋圖像,也沒有因?yàn)檫^淺而降低源視頻和字符之間對比度,整體字符顯示清晰可見。亮度比的數(shù)值開始隨著視頻的播放而不斷跳變,灰度直方圖開始上下動態(tài)改變,其他的字符并沒有改變,圖9是某一幀的測試截圖。幀率顯示是60 frame/s,符合NTSC制式輸出的幀率。根據(jù)系統(tǒng)模塊設(shè)計(jì)部分對分辨率的討論,源視頻的行分辨率確實(shí)是720,列分辨率也確實(shí)是480。圖9中顯示此刻亮度比的值是51%,而該畫面多數(shù)區(qū)域呈亮色調(diào),兩者也有良好的一致性?;叶戎狈綀D顯示畫面中取0~255中間灰度值的像素相對多些,兩邊相對少些,符合該圖片的分布情況。
程序中設(shè)計(jì)了撥碼開關(guān)可用來切換OSD菜單界面。撥碼開關(guān)SW17向上撥動,顯示程序作者和版本信息;撥碼開向下?lián)軇?顯示如圖9的幀信息界面,即主界面。
圖8 實(shí)際系統(tǒng)
圖9 測試界面
本文介紹了一種視頻幀圖像信息提取及OSD程序設(shè)計(jì)的解決方案,并用DE2作為測試平臺來進(jìn)行了驗(yàn)證。實(shí)現(xiàn)了對圖像信息的準(zhǔn)確提取、屏幕上OSD菜單字符穩(wěn)定實(shí)時顯示的功能,并且對高分辨率和高幀率具有良好的兼容性。在以后進(jìn)一步的研究中還可以繼續(xù)改進(jìn)ROM存儲和調(diào)用接口,并在OSD的顯示方面加入手動調(diào)節(jié)透明度的功能等。
參考文獻(xiàn):
[1]田明,王群生.實(shí)時有效的OSD系統(tǒng)結(jié)構(gòu)的建立與分析[J].電視技術(shù),2003(9):56-58.
[2]黃燕群,李利品,王爽英.基于FPGA的OSD設(shè)計(jì)[J].液晶與顯示,2010(3):429-433.
[3]劉科,張生才,史在峰,等.基于改進(jìn)型二步索引算法OSD電路的FPGA實(shí)現(xiàn)[J].電子測量技術(shù),2007(7):28.
[4]袁奮杰,周曉,丁軍,等.基于FPGA的RGB和HSV色空間轉(zhuǎn)換算法實(shí)現(xiàn)[J].電子器件,2010,33(4):493-497.
[5]沈建于,湯勇明,王保平.運(yùn)動自適應(yīng)去隔行算法的研究[J].電子器件,2003(6):177-180.
[6]陳自龍,湯勇明.基于PLD的VGA顯示器字符顯示實(shí)驗(yàn)設(shè)計(jì)[J].電氣電子教學(xué)學(xué)報(bào),2013(1):62-65.
[7]曾德瑞,普玉偉,楊明武.數(shù)字視頻ASIC中OSD系統(tǒng)的實(shí)現(xiàn)[J].電視技術(shù),2011,35(23):36-39.
蔣健(1990-),男,漢族,江蘇省常熟市人,東南大學(xué)碩士研究生,研究方向?yàn)殡娐放c系統(tǒng),296112470@qq.com;
湯勇明(1973-),男,漢族,江蘇省江都市人,東南大學(xué)研究員,主要研究方向?yàn)殡娮与娐吩O(shè)計(jì),tym@seu.edu.cn。
視頻圖像信息常用的有:分辨率,幀率,亮度比,灰度直方圖等?;趲囊曨l圖像信息具有很強(qiáng)的通用性,大多數(shù)視頻處理都要基于這些參數(shù)信息,通過對視頻圖像信息提取的獨(dú)立模塊化設(shè)計(jì),使之能夠嵌入其他已經(jīng)設(shè)計(jì)完成的系統(tǒng),并可以使用該系統(tǒng)進(jìn)行測試。OSD是On-Screen Display的簡稱,即在屏幕顯示,常用于菜單調(diào)整。一般是按Menu鍵后屏幕彈出的顯示器各項(xiàng)調(diào)節(jié)項(xiàng)目信息的矩形菜單。如電視機(jī)屏幕上所顯示的遙控器菜單字符或圖像[1]。早期的OSD字符疊加的平臺選擇主要是單片機(jī)和字符顯示芯片,但是單片機(jī)控制時序的能力較差,字符顯示芯片的靈活性不好。FPGA更適用于高分辨率視頻圖像應(yīng)用中進(jìn)行多字符和復(fù)雜圖像的疊加。早期的字符ROM設(shè)計(jì)使用的是逐字索引算法[2],后來出現(xiàn)的二步索引法[3]使得內(nèi)存的數(shù)據(jù)量得到精簡,而本設(shè)計(jì)使用單字緊密存儲提高了靈活性。
DesignoftheVideoFrameInformationDetectionandOSD
JIANGJian,TANGYongming*
(School of Electronic Science and Engineering,SoutheastUniversity,Nanjing 210096,China)
Abstract:Real-time video processing develops rapidly in recent years.Mostreal-time video signal processing algorithms are based upon the statistical information of the video stream.The design of a universal video frame information detection program module based onFPGA is presented.Specifically,it can detect information such as resolution,brightness ratio and gray histogram,and then display them on the screen(OSD).The results show that the detection of frame information is accurate and the OSD information updates real-timely.It also has good compatibility and runs stably.This design contains 8 kbit LE(Logic Element) resources and 150 kbit storage resources.
Key words:FPGA;video information detection;OSD display;real-time processing
doi:EEACC:726010.3969/j.issn.1005-9490.2014.05.008
中圖分類號:TN407
文獻(xiàn)標(biāo)識碼:A
文章編號:1005-9490(2014)05-0835-05
收稿日期:2013-09-10修改日期:2013-10-02