周文彬
(西安電子科技大學(xué)電子工程學(xué)院,陜西西安 710071)
隨著高清數(shù)字視頻的發(fā)展,人們對視頻清晰度的要求也不斷提高,隔行掃描帶來的虛影、閃爍,以及快速運(yùn)動時(shí)的鋸齒現(xiàn)象等問題也變得越來越突出,從而影響了視覺觀感。解決上述問題的關(guān)鍵就在于去隔行技術(shù)。
所謂去隔行技術(shù)就是將隔行掃描的視頻轉(zhuǎn)換成逐行掃描的視頻。由于隔行掃描中,每場只傳送一幀中的1/2數(shù)據(jù),所以采用算法補(bǔ)齊缺失的另1/2數(shù)據(jù)組成完整一幀,是去隔行算法的關(guān)鍵。目前存在以下幾種方法:單場插值法、場合并法、運(yùn)動自適應(yīng)算法。單場插值法就是利用本場數(shù)據(jù),直接通過復(fù)制本場前一行的數(shù)據(jù)或者兩行的平均值來填充缺失行。但此方法會使圖像變得柔和。場合并法即是將當(dāng)前場和前一場的數(shù)據(jù)直接進(jìn)行合并得到一幀,這種方法對靜圖像效果較好,但對于運(yùn)動圖像則會出現(xiàn)鋸齒現(xiàn)象。運(yùn)動自適應(yīng)算法則是根據(jù)點(diǎn)是否運(yùn)動來確定最后結(jié)果,此方法效果良好,得到了廣泛應(yīng)用[1]。
文中結(jié)合FPGA的優(yōu)勢,提出了一種運(yùn)動檢測算法,該算法對傳統(tǒng)算法進(jìn)行了改進(jìn),對運(yùn)動點(diǎn)的檢測更為細(xì)致。該算法將圖像區(qū)分為運(yùn)動點(diǎn)和靜止點(diǎn),分別采用增強(qiáng)ELA算法插值的結(jié)果及前場數(shù)據(jù)值進(jìn)行去隔行。最后將該算法在FPGA上得以實(shí)現(xiàn),得到了較為理想的實(shí)際效果。
系統(tǒng)的設(shè)計(jì)目標(biāo)是為了使輸入的隔行視頻,通過用FPGA實(shí)現(xiàn)去隔行算法,對隔行視頻進(jìn)行處理,從而組成完整的一幀并顯示。
圖1為系統(tǒng)的總體結(jié)構(gòu),視頻前端數(shù)據(jù)采集由攝像頭的數(shù)據(jù)經(jīng)過A/D采集,并且經(jīng)過BT656解碼模塊得到最終數(shù)據(jù)。因?yàn)橐獙σ曨l數(shù)據(jù)進(jìn)行4場緩存,所以數(shù)據(jù)緩存采用一塊DDR2 SDRAM。中間過程則是在FPGA內(nèi)部用程序?qū)崿F(xiàn)的去隔行算法并得到結(jié)果。對于顯示去隔行的結(jié)果,按照Cameralink協(xié)議送給后端的Cameralink轉(zhuǎn)VGA模塊進(jìn)行輸出顯示,在VGA的顯示器上查看最終的去隔行效果。
圖1 系統(tǒng)總體結(jié)構(gòu)
圖1給出了去隔行的FPGA實(shí)現(xiàn)及顯示的模塊框圖,以及各個(gè)模塊的聯(lián)系及數(shù)據(jù)走向。系統(tǒng)采用Altera公司Cyclone III實(shí)現(xiàn),為了提高設(shè)計(jì)的效果,本系統(tǒng)調(diào)用了其自帶的DDR2控制器IP核,以下對每部分的實(shí)現(xiàn)將做具體說明。
BT656是一種標(biāo)準(zhǔn)的視頻數(shù)據(jù)格式,完整的一幀圖像數(shù)據(jù)是由一個(gè)625行、每行1728個(gè)字節(jié)的數(shù)據(jù)塊組成。其中,23~311行是偶場視頻數(shù)據(jù),336~624行是奇場視頻數(shù)據(jù),其余行為垂直控制信號。為了后續(xù)去隔行的方便運(yùn)用,在這里對于攝像頭輸入的BT656格式的視頻數(shù)據(jù),編寫了BT656解碼模塊,將原本一幀的數(shù)據(jù)拆分成奇偶場的數(shù)據(jù)進(jìn)行輸出給后端,并給出了相應(yīng)的指示奇偶信號及行列計(jì)數(shù)器,以便后端進(jìn)行采樣[2]。
因?yàn)槿ジ粜械倪\(yùn)動檢測需要采用4場的數(shù)據(jù)進(jìn)行操作,所以本模塊的主要功能是對進(jìn)來的視頻數(shù)據(jù)進(jìn)行緩存處理。由圖1可知,在DDR2 SDRAM中需要開辟4場視頻區(qū)域的大小。并且由于視頻數(shù)據(jù)是不斷進(jìn)入的,所以需要不斷地往DDR2中寫入數(shù)據(jù)。同時(shí)后端去隔行模塊也要不斷讀取DDR2 SDRAM中的4場數(shù)據(jù)。這樣 1進(jìn) 4出,并且每個(gè)并行塊對 DDR2 SDRAM的訪問均為獨(dú)占方式,就有可能出現(xiàn)資源沖突。所以總線仲裁就是本模塊的關(guān)鍵,在對 DDR2 SDRAM的工作頻率和數(shù)據(jù)率,以及視頻數(shù)據(jù)進(jìn)入的頻率評估后,設(shè)計(jì)出了底層DDR2的控制模塊對寫入和讀出之間的協(xié)調(diào)。在寫操作時(shí),先用FPGA內(nèi)部的FIFO進(jìn)行緩存,在其沒有達(dá)到一次突發(fā)寫長度時(shí),讀狀態(tài)機(jī)依次將總線交給讀取 Fn-1、Fn-2、Fn-3、Fn-4中的4個(gè)讀模塊,并且在此期間,不斷檢查寫是否滿足突發(fā)長度,若寫滿足了一次突發(fā)時(shí),則將內(nèi)部緩存數(shù)據(jù)一次性寫入DDR2 SDRAM中。這樣非寫即讀的方式,則可以較好地完成對去隔行模塊的數(shù)據(jù)支持[3]。
去隔行模塊是系統(tǒng)的核心。它主要分為:運(yùn)動檢測部分,增強(qiáng)型ELA算法和結(jié)果選擇部分。
2.3.1 增強(qiáng)型ELA部分
為保護(hù)邊緣及消除鋸齒,對于完全運(yùn)動的點(diǎn),采用增強(qiáng)型ELA算法[4]。該算法的主要思想如下
圖2 增強(qiáng)ELA點(diǎn)示意圖
以黑點(diǎn)為要求取的結(jié)果點(diǎn)X,白點(diǎn)為當(dāng)前場上下兩行的點(diǎn),則X為
此算法實(shí)質(zhì)是將當(dāng)前場上下兩行緩存后,按上述步驟取出相關(guān)點(diǎn)進(jìn)行計(jì)算,從而得到丟失場的對應(yīng)點(diǎn)。此模塊的結(jié)果需要在FPGA內(nèi)部進(jìn)行一定行數(shù)的緩存,因其既要作為最終結(jié)果輸出,又要被運(yùn)動檢測所用。
2.3.2 運(yùn)動檢測部分
運(yùn)動檢測部分是去隔行算法的關(guān)鍵,運(yùn)動檢測好,則最終效果較好。本去隔行算法主要采用5×5領(lǐng)域內(nèi)的所有點(diǎn)進(jìn)行相關(guān)統(tǒng)計(jì)來完成運(yùn)動檢測,這樣取的點(diǎn)更多,雖然硬件上更為復(fù)雜,但是可以取得更好的效果。具體步驟如下:首先將 Fn-1,F(xiàn)n-2組成幀 1,然后將 Fn-3,F(xiàn)n-4組成幀 2,然后兩幀相減,以某點(diǎn)為中心,取5×5鄰域的所有點(diǎn)進(jìn)行統(tǒng)計(jì),得到結(jié)果d1,然后與預(yù)先設(shè)定好的閾值進(jìn)行比較,若其大于或等于閾值,則判定為運(yùn)動點(diǎn),若其小于閾值則判定為非運(yùn)動點(diǎn)。這里的閾值,是通過在軟件上對大量實(shí)際圖像數(shù)據(jù)進(jìn)行相關(guān)過程的仿真后,從而得出的一個(gè)綜合值
傳統(tǒng)算法一般只進(jìn)行了第一步的運(yùn)動檢測,這樣硬件上實(shí)現(xiàn)雖簡單,但此時(shí)僅用兩幀的信息進(jìn)行判定運(yùn)動點(diǎn),若有高于幀頻的運(yùn)動,則可能無法檢出。所以在第一步的基礎(chǔ)之上,增加了第二步ELA運(yùn)動檢測。即通過增強(qiáng)ELA插值出來的丟失場,再次和前場的圖像進(jìn)行相減得到結(jié)果d2,并且和閾值進(jìn)行比較,這樣將兩次的運(yùn)動檢測相或,就能夠檢出第一步未檢出的運(yùn)動點(diǎn),從而更好地完成運(yùn)動檢測,其中1為運(yùn)動點(diǎn),0為靜止點(diǎn)[4-6]
2.3.3 結(jié)果選擇部分
該模塊完成的主要功能是對數(shù)據(jù)進(jìn)行選擇性輸出。因?yàn)橐暾剌敵鲆粠瑘D像,所以當(dāng)前場的圖像便直接進(jìn)行輸出即可。而對于要補(bǔ)充的缺失場,則根據(jù)運(yùn)動檢測結(jié)果進(jìn)行輸出。若運(yùn)動檢測為靜止點(diǎn),則將前一場的像素點(diǎn)進(jìn)行輸出;若運(yùn)動檢測為運(yùn)動點(diǎn),則將ELA插值得到的結(jié)果輸出。這就完成了整個(gè)去隔行結(jié)果。
上述模塊設(shè)計(jì)難點(diǎn)在于要用到多個(gè)數(shù)據(jù)點(diǎn),而且所采用數(shù)據(jù)點(diǎn)的分布是呈窗狀的,所以要使用FPGA內(nèi)部多條RAM塊進(jìn)行數(shù)據(jù)緩存和交替切換。同時(shí)為了保持?jǐn)?shù)據(jù)的處理速度,爭取一個(gè)周期出一個(gè)數(shù),使用了流水線技術(shù)進(jìn)行計(jì)算,從而得到所需結(jié)果。下面結(jié)合實(shí)例對RAM條操作:因需對5×5的窗狀數(shù)據(jù)進(jìn)行統(tǒng)計(jì),將從底層DDR2模塊取出的兩行數(shù)據(jù)減后,存入第一條RAM,依次存入到第5條的第5個(gè)數(shù)據(jù)時(shí),便己達(dá)到5×5的鄰域點(diǎn),可以進(jìn)行相關(guān)統(tǒng)計(jì),在下一個(gè)數(shù)存入RAM前,將寄存的5×5數(shù)據(jù)的第一列丟棄,后4列依次前向寄存。同時(shí)將下一列數(shù)據(jù)從RAM中取出,和寄存的前4列又組成一個(gè)新的鄰域進(jìn)行統(tǒng)計(jì)。當(dāng)?shù)?行數(shù)據(jù)進(jìn)來時(shí),相當(dāng)于對第一條RAM進(jìn)行覆蓋寫入,這時(shí)鄰域窗的第5行則等同于第一條RAM的數(shù),依次類推,完成對RAM的操作。
本模塊的主要功能是將去隔行產(chǎn)生的數(shù)據(jù)結(jié)果按照Cameralink數(shù)字時(shí)序送給后端的Cameralink轉(zhuǎn)VGA模塊,以便在VGA上進(jìn)行顯示,Cameralink時(shí)序如圖3所示。
圖3 Cameralink時(shí)序圖
圖中,cam_fe為幀同步信號;cam_le為行同步信號;cam_de為數(shù)據(jù)同步信號;cam_data即為送給后端的去隔行的結(jié)果。其中行同步信號和數(shù)據(jù)同步一致,有效數(shù)據(jù)必須在cam_de為高電平時(shí)輸出。后端Cameralink轉(zhuǎn)VGA屬于另一系統(tǒng),這里不做詳述。
圖4 組合幀結(jié)果
圖5 單場內(nèi)插結(jié)果
圖6 本文算法結(jié)果
從實(shí)際結(jié)果可以看出,組合幀方法對靜止圖像效果良好,但只要運(yùn)動就會有鋸齒的出現(xiàn);而單場插值的結(jié)果對運(yùn)動沒有鋸齒,但圖像較為模糊,清晰度不夠。本文去隔行實(shí)現(xiàn)的效果較為有效地克服了鋸齒、模糊等現(xiàn)象,使圖像質(zhì)量得到了明顯提高。
在對現(xiàn)有的去隔行算法的分析基礎(chǔ)之上,提出了改進(jìn)的方法,得到了一種新的去隔行算法。使用FPGA在實(shí)際的硬件平臺上加以實(shí)現(xiàn),實(shí)際效果表明,該系統(tǒng)能較好的去除隔行掃描帶來的細(xì)節(jié)模糊以及運(yùn)動鋸齒等現(xiàn)象,適用于工程實(shí)踐。
[1]Altera Conpration.使用FPGA實(shí)現(xiàn)高清晰去隔行功能白皮書[M].San Jose:Altera Conpration,2009.
[2]李娟.基于FPGA的圖像預(yù)處理及顯示系統(tǒng)設(shè)計(jì)[D].長春:中國科學(xué)院長春光學(xué)精密機(jī)械與物理研究所,2011.
[3]Altera Conpration.DDR and DDR2 SDRAM controller compiler user guide[M].San Jose:Altera Conpration,2009.
[4]蔡玉強(qiáng),楊剛,蔣泉,等.一種新型去隔行算法的FPGA實(shí)現(xiàn)[J].現(xiàn)代顯示,2010(1):51-56.
[5]周津,姚素英,柳崎峰.一種基于全局運(yùn)動統(tǒng)計(jì)和邊緣平滑濾波的視頻去隔行方法[J].電子技術(shù)應(yīng)用,2008,34(8):126-129.
[6]黃敏敏.去隔行算法研究及其FPGA實(shí)現(xiàn)[D].廈門:廈門大學(xué),2006.