張振利,韓凌鋒
(江西理工大學(xué) 電氣工程與自動化學(xué)院,江西 贛州 341000)
隨著互聯(lián)網(wǎng)的普及以及日常生產(chǎn)生活中的需求,人們對實時視頻圖像質(zhì)量的要求越來越高。而高清實時性視頻的數(shù)據(jù)量質(zhì)量越好,所需要的數(shù)據(jù)量也越大,處理難度也越來越大。傳統(tǒng)的圖像視頻處理都傾向于用DSP作為主控模塊配合外部電路來完成工作需要,這方面的資料方案也很多,但是針對高清快速視頻圖像采集與顯示的需求,使用DSP作為主控模塊成本較高,代碼繁瑣,不容易進行維護。FPGA與DSP相比有很大的優(yōu)勢:DSP的硬件設(shè)計一旦確定,不能進行修改,而FPGA可以實現(xiàn)所有的數(shù)字電路以及可以根據(jù)客戶需求來定制自己所需的數(shù)字處理模塊,所以,F(xiàn)PGA更加靈活。另外,現(xiàn)在高端FPGA芯片上都集成了DSP處理器,這樣在FPGA上能夠?qū)崿F(xiàn)靈活設(shè)計,同時也節(jié)約了開發(fā)設(shè)計的周期和成本。
本文系統(tǒng)采用HDMI顯示視頻數(shù)據(jù),F(xiàn)PGA具有高速并行處理能力,可以處理1 080p高清視頻數(shù)據(jù)。二者結(jié)合可以很好地實現(xiàn)系統(tǒng)設(shè)計[1]。
該文系統(tǒng)是通過圖像傳感器采集高清視頻數(shù)據(jù),經(jīng)過Bayer轉(zhuǎn)RGB模塊,將Bayer圖像解碼成24位RGB數(shù)據(jù)送到FPGA主控模塊,視頻數(shù)據(jù)經(jīng)過圖像防止撕裂以及白平衡的算法模塊之后,通過AXI總線協(xié)議將處理后的視頻數(shù)據(jù)從緩存中取出,最后將取出的RGB圖像數(shù)據(jù)轉(zhuǎn)換成TMDS信號輸出到顯示器。整個硬件系統(tǒng)分成幾大模塊:圖像采集模塊、圖像處理模塊、圖像撕裂處理模塊、圖像色彩處理模塊、視頻數(shù)據(jù)讀/寫模塊、HDMI發(fā)送器設(shè)計模塊。系統(tǒng)總體結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)總體框架圖
圖像傳感器模塊采用索尼公司的IMX222圖像傳感器作為視頻采集工具,IMX222是一種對角線為6.4 mm(1/2.8型)CMOS有源像素型圖像傳感器,具有方形像素陣列和大約200萬有效像素。該芯片使用模擬2.7 V,數(shù)字A11.2 V和接口1.8 V三倍電源。采用R,G,B三種原色顏料鑲嵌濾光片,獲得高靈敏度、低暗電流、無污跡的效果。這個芯片用可變積分時間來模擬電子快門,通過SPI接口對IMX222的各個寄存器進行初始化配置,已達到所想要的狀態(tài)[2]。
通過IMX222圖像傳感器拍攝的圖像是Bayer格式,需要對它進行格式轉(zhuǎn)化,以易于在顯示器上顯示。通過彩色插值算法將它轉(zhuǎn)化為RGB格式。Bayer圖像的色彩濾波格式如圖2所示。
圖2 Bayer圖像色彩濾波格式
彩色插值算法介紹如下,Bayer模式下的每一個像素只取RGB顏色空間中一種顏色分量,奇數(shù)行包含G,B分量,偶數(shù)行包含R,G分量,奇數(shù)列包含G,R分量,偶數(shù)列包含B,G分量。具體操作就是先用寄存器存儲兩行像素值,再從DDR3內(nèi)存中讀出第三行像素值,并用下列公式進行運算,可得RGB圖像。計算公式如下所示。
由式(1)再結(jié)合Bayer圖像色彩濾波格式可以得到部分Verilog程序如下所示:
由上述內(nèi)容可以編寫出Bayertorgb模塊以及根據(jù)算法得到測試圖像,如圖3所示。
由圖3可以看出,同樣是800×800像素的圖片,經(jīng)過圖像處理模塊之后的顏色明顯比原圖看上去要直觀一點,經(jīng)過算法轉(zhuǎn)化的圖片比原圖要大一些,多出來的就是R,G,B三種顏色的分量。所以,從圖片效果上看,圖片處理模塊可以很好實現(xiàn)對視頻的處理[3]。
圖3 測試圖像
FPGA主控模塊選擇的是XILINK公司的ZYNQ-7000 SoC的芯片,它主要是用來進行數(shù)據(jù)的存儲與發(fā)送、數(shù)據(jù)處理,算法運算等。在本文系統(tǒng)中,為保證視頻的實時性,對于較復(fù)雜的計算過程采用流水線設(shè)計方法來提升運算速度。這種方法可以運用于各種設(shè)計,特別是大型的、對速度要求較高的系統(tǒng)設(shè)計。雖然采用流水線會增大資源的使用,但是其可降低寄存器間的傳播延時,保證系統(tǒng)維持高的系統(tǒng)時鐘速度[4]。
視頻撕裂處理模塊是由于視頻數(shù)據(jù)兩邊的幀數(shù)不統(tǒng)一所造成,本例中的圖像傳感器是30幀,顯示器是60幀,當(dāng)顯示器在進行顯示數(shù)據(jù)的時候,其速度很快,有時,顯示器會出現(xiàn)一條白線,上半部分顯示舊圖像,下部分顯示新圖像,給人造成的感覺就是視頻被撕裂了一樣,導(dǎo)致觀察效果不佳。家用的液晶電視有時候也會出現(xiàn)這種情況,所以必須要進行處理,使其達到能夠正常觀看的效果。首先,需要建立一個大的數(shù)據(jù)緩沖區(qū),把從圖像傳感器那邊采集來的視頻數(shù)據(jù)先存入緩沖區(qū),再從緩沖區(qū)輸出視頻數(shù)據(jù)去顯示設(shè)備,使其采集的數(shù)據(jù)與顯示的數(shù)據(jù)錯開,這樣可以有效地避免視頻撕裂的現(xiàn)象。
圖像白平衡是指“不管在任何光源下,都能將白色物體還原為白色”,當(dāng)特定光源下拍攝時出現(xiàn)的偏色現(xiàn)象時,可通過加強對應(yīng)的補色來進行補償,校準色溫的偏差,調(diào)整白平衡來達到想要的畫面效果。在此介紹一種灰度圖像算法來進行白平衡的校正,使圖像顯示為正常圖像顏色[5]。
灰度圖像算法介紹如下,先求出一幀圖像RGB像素的平均值Ravg,Bavg,Gavg,然后再求出RGB像素平均值的平均值,這個值稱為灰度平均值Kavg。再利用公式:
得到一個新的R分量的像素,對G和B做同樣運算。如果紅色分量Rnew的平均值大于255的話就會使得紅色分量Rnew等于255,如果不大于255,就保持原來的值,G和B同樣如此。這樣使得RGB分量趨近于灰度平均值,從而校正白平衡,使圖像還原成真實的顏色。
白平衡模塊具體實施方案:由上面公式可以看出要得到新的RGB分量必須做乘法和除法運算,在FPGA里面不能直接把數(shù)值進行乘法、除法運算,因為FPGA代碼的最底層由許多的門電路組成,運算起來比較復(fù)雜,尤其是除法運算,對于運算誤差比較大的數(shù)值不能直接來運算,必須調(diào)用內(nèi)部的乘法器、除法器來進行數(shù)值運算。首先,以Rnew為例,根據(jù)上面公式調(diào)用Zynq-7000內(nèi)部乘法器和除法器,然后再與255進行比較,得到Rnew數(shù)值,因為RGB都是8位,所以最大值為255,部分代碼如下:
高清晰度多媒體接口(High Definition Multimedia Interface,HDMI)[6]是一種數(shù)字化視頻/音頻接口技術(shù),其可同時傳送音頻和影像信號,最高數(shù)據(jù)傳輸速度為2.25 GB/s。HDMI使用的是由Silicon Image公司發(fā)明的最小化傳輸差分信號(Time Minimized Differential Signal,TMDS)傳輸技術(shù)。TMDS是一種微分信號機制,采用的是差分傳動方式。TMDS差分傳動技術(shù)是一種利用2個引腳間電壓差來傳送信號的技術(shù)。傳輸數(shù)據(jù)的數(shù)值由2個引腳間電壓正負極性和大小決定。每一個標準的HDMI連接,都包含了3個用于傳輸數(shù)據(jù)的TMDS數(shù)據(jù)傳輸通道HDMI_D_N和HDMI_D_P,還有1個獨立的TMDS時鐘通道HDMI_CLK_N和HDMI_CLK_P,以保證傳輸時所需的統(tǒng)一時序。在一個時鐘周期內(nèi),每個TMDS通道都能傳送10 bit的數(shù)據(jù)流。HDMI的數(shù)據(jù)傳輸有TMDS0,TMDS1,TMDS2三個通道,每個通道的傳輸流程都是一樣的。
HDMI顯示模塊的設(shè)計如下:經(jīng)過Bayer轉(zhuǎn)RGB算法模塊之后,圖像轉(zhuǎn)變?yōu)镽GB三種顏色,每種顏色位寬為8 bit,從DDR3內(nèi)存讀出之后,首先,由8/10 bit模塊將8 bit數(shù)據(jù)轉(zhuǎn)為10 bit數(shù)據(jù),再由并轉(zhuǎn)串模塊將10 bit數(shù)據(jù)轉(zhuǎn)化成串行的差分信號,并且輸出到引腳上。其中,8/10 bit模塊是用于保持直流平衡,使得發(fā)送的“0”,“1”數(shù)量保持基本一致,連續(xù)的“1”或“0”不超過5 bit,即每5個連續(xù)的“1”或“0”后必須插入一位“0”或“1”,從而保證信號直流平衡。在直流平衡的情況下,傳輸?shù)钠骄臑橐怀?shù)。實現(xiàn)直流平衡,將使得接收器的閾值設(shè)置變得簡單,常應(yīng)用于數(shù)據(jù)通信方面,增強電路的抗干擾能力。并轉(zhuǎn)串模塊以及將串行信號轉(zhuǎn)化成差分信號是利用XILINK官方提供的源語電路OSERDESE2和OBUFDS來共同實現(xiàn)的。具體步驟如圖4所示。
圖4 HDMI傳輸流程
由圖4步驟編寫如下部分代碼,以R分量為例,首先,對其進行8/10 bit,把10 bit信號進行串行化,完成傳輸信號轉(zhuǎn)換,再通過源語OSERDESE2和OBUFDS電路轉(zhuǎn)化成差分信號進行輸出,部分代碼如下所示:
實驗中使用視頻格式為1 920×1 080的圖像,如圖5所示,圖5a)為未進行白平衡校正前;圖5b)為進行白平衡以及防止視頻撕裂操作后的正常圖像。
圖5 視頻處理后的截圖
由圖5可以看出,兩張圖片的顏色明顯不一樣,原圖比較偏綠,這是因為人眼對綠色比較敏感,經(jīng)過白平衡的調(diào)節(jié)之后,圖片就顯示為正常圖像。所以無論視頻的顯示還是圖片的顯示,白平衡的調(diào)節(jié)是必不可少的。
該文系統(tǒng)具有體積小,實時處理速度快,穩(wěn)定,功能強大,代碼易于維護與調(diào)試等特點,它與傳統(tǒng)的DSP電路相比,可以進行二次改裝編寫,以適應(yīng)相應(yīng)的工作要求,代碼清晰易懂,硬件上可以節(jié)約相應(yīng)的成本等。本文系統(tǒng)還可以用于工業(yè)產(chǎn)品的檢測,也可以經(jīng)過改良用于公路實時情況觀察等場合。