徐 曉,謝時(shí)岳
(華南理工大學(xué)理學(xué)院,廣東廣州 510641)
面向視頻流的畸變矯正算法的FPGA實(shí)現(xiàn)
徐 曉,謝時(shí)岳
(華南理工大學(xué)理學(xué)院,廣東廣州 510641)
本設(shè)計(jì)用一款中低端的FPGA——Altera公司的EP3C40來實(shí)現(xiàn)一種通用的畸變矯正算法,主要用于對成本要求低、實(shí)時(shí)性要求高的視頻流圖像處理系統(tǒng)中的前端處理部分。FPGA具有強(qiáng)大的并行處理性能,因此相比PC處理平臺或者DSP處理平臺,F(xiàn)PGA更能保證視頻流的實(shí)時(shí)性。經(jīng)實(shí)際驗(yàn)證,該方法能達(dá)到畸變矯正的實(shí)時(shí)性要求。
FPGA;畸變矯正;實(shí)時(shí)性
【本文獻(xiàn)信息】徐曉,謝時(shí)岳.面向視頻流的畸變矯正算法的FPGA實(shí)現(xiàn)[J].電視技術(shù),2013,37(13).
理論上定義的攝像機(jī)透鏡是不引入任何畸變的,然而在現(xiàn)實(shí)生活中,不可能制造出完美的透鏡,這主要是制造上的原因,因?yàn)橹谱饕粋€(gè)“球形”透鏡比制作一個(gè)數(shù)學(xué)上理想的透鏡更容易。攝像機(jī)鏡頭畸變會導(dǎo)致攝像機(jī)成像面(即投影平面)上的坐標(biāo)失準(zhǔn),直觀上看就是拍攝出來的物體會有變形,而圖像坐標(biāo)準(zhǔn)確性會直接影響圖像的配準(zhǔn)以及三維坐標(biāo)重建等問題[1]。如今對于圖像畸變矯正主要還是對于單幅或多幅靜態(tài)圖片的畸變矯正,而對于視頻圖像的畸變矯正方案較少。視頻流圖像矯正是基于靜態(tài)圖像畸變矯正的方法,加入了對圖像處理實(shí)時(shí)性的要求和大數(shù)據(jù)量搬運(yùn)和存儲的要求,尤其對于高清視頻流的矯正,實(shí)時(shí)處理的數(shù)據(jù)量非常大。目前市場上通常會選擇用DSP或者FPGA為核心的圖像處理系統(tǒng)來完成對視頻流畸變的矯正。FPGA以其強(qiáng)大的并行處理能力著稱,內(nèi)部擁有非常豐富的時(shí)序邏輯單元[2],非常適合處理一些并行性強(qiáng),但復(fù)雜度不高的簡單算法,因此是處理視頻流畸變矯正這種簡單并行算法的最佳選擇。對此,本文提供了一種使用目前市場上中低端FPGA產(chǎn)品Altera公司的EP3C40來進(jìn)行視頻流的圖像畸變矯正方案。
如圖1所示,基于FPGA的畸變矯正硬件系統(tǒng)主要由以下3個(gè)主要模塊組成:1)視頻數(shù)據(jù)編解碼模塊;2)DDR2存儲器控制模塊;3)畸變矯正模塊。
圖1 畸變矯正系統(tǒng)硬件電路原理框圖
CCD攝像機(jī)輸出的彩色電視信號經(jīng)過視頻解碼器后以8 bit BT656(4∶2∶2)YCbCr SDTV(標(biāo)清)數(shù)字視頻信號格式存入DDR2存儲器,當(dāng)DDR2內(nèi)存滿一幀圖像后(一幀圖像共576行有效視頻數(shù)據(jù)),畸變矯正模塊開始從DDR2存儲器中讀取數(shù)據(jù)進(jìn)行矯正工作,一次矯正一行有效視頻數(shù)據(jù),矯正后的一行圖像數(shù)據(jù)存儲在雙口RAM(DPRAM)中作為緩存,最后DPRAM中的數(shù)據(jù)通過視頻編碼器后轉(zhuǎn)化成PAL制式的電視信號在顯示終端上輸出[3]。
視頻編解碼模塊主要由I2C控制模塊和有效視頻信號采集模塊組成。視頻編解碼器分別通過I2C總線進(jìn)行內(nèi)部模式寄存器的配置,設(shè)置上電后的參數(shù)。
在本方案中,視頻解碼器TVP5150采用8 bit的BT656(4∶2∶2)YCbCr格式輸入數(shù)字視頻信號。電視信號采用隔行PAL制式。圖像幀的圖像分辨率為720×576。每場數(shù)據(jù)由288行行數(shù)據(jù)組成,每行數(shù)據(jù)包括EAV,SAV,行消隱信號和有效視頻信號數(shù)據(jù)4個(gè)部分,具體格式如表1所示。
?
每行有效視頻數(shù)據(jù)包含1 440 byte的Y,Cb,Cr數(shù)據(jù),其中,亮度信號Y占720 byte,色度信號Cb,Cr各占360 byte。而每幀的有效視頻數(shù)據(jù)為576行×1 440 byte共829 440 byte(810 kbyte),是本系統(tǒng)要進(jìn)行存儲和處理的一幀原始有效視頻圖像。
本系統(tǒng)用FPGA構(gòu)建有效視頻信號采集模塊,目的是把每一幀的有效視頻提取出來,以供畸變矯正模塊使用。
視頻數(shù)據(jù)編解碼模塊的子模塊中的有效視頻信號采集子模塊能夠準(zhǔn)確地從TVP5150的輸出端提取每一行的有效視頻數(shù)據(jù),時(shí)鐘頻率為27 MHz,同時(shí)給頂層的畸變矯正模塊輸出1個(gè)1位的信號ActiveVideo_flag,這個(gè)信號在解碼器輸出有效視頻數(shù)據(jù)時(shí)為高電平,在輸出非有效視頻數(shù)據(jù)(例如EAV,SAV,場消隱信號等)時(shí)為低電平。視頻編碼器ADV7179內(nèi)部設(shè)置了把SAV和EAV編碼作為同步信息的軟同步方式,因此ADV7179的同步信號輸出管腳HSYNC,F(xiàn)IELD/VSYNC和BLANK懸空即可。有效視頻信號采集子模塊也采用了軟同步的方式對有效視頻數(shù)據(jù)的行進(jìn)行了跟蹤,即需要找到幀頭并設(shè)置1位幀頭標(biāo)記,并把這1位幀頭標(biāo)記保存在FPGA內(nèi)部的寄存器中,同時(shí)設(shè)置一個(gè)行計(jì)數(shù)器,從遇到幀頭標(biāo)記開始計(jì)為第0行,以后每遇到一個(gè)新的有效視頻行的時(shí)候,計(jì)數(shù)器加1,共計(jì)數(shù)576行,循環(huán)計(jì)數(shù),這樣就可以控制FPGA對每一幀中特定行進(jìn)行操作。找到幀頭的具體方法是每當(dāng)SAV編碼為FF 00 00 AB,且下一個(gè)EAV的編碼為FF 00 00 9D時(shí),此時(shí)刻即可設(shè)置一個(gè)幀頭標(biāo)記。
本系統(tǒng)使用DDR2 SDRAM High Performance Controller v9.0 IP核來對2片外掛的DDR2存儲器MT47H64M16進(jìn)行配置,DDR2存儲器負(fù)責(zé)將每一幀的原始圖像數(shù)據(jù)保存下來,供畸變矯正模塊使用。主要配置參數(shù)是存儲器時(shí)鐘周期為200 MHz,數(shù)據(jù)讀寫時(shí)鐘為100 MHz,數(shù)據(jù)位寬為32 bit,地址寬度為26 bit,其中Bank address width為3 bit,Row address width 為 13 bit,Column address width 為10 bit。傳輸模式采用突發(fā)傳輸模式,拍數(shù)為4拍,突發(fā)傳輸方式為連續(xù)型,因此實(shí)際一次讀寫32 bit×4=128 bit數(shù)據(jù)。CAS Latency設(shè)為3個(gè)時(shí)鐘周期,刷新間隔為7.8 μs。參數(shù)的配置均遵照MT47H64M16的器件手冊以及Altera公司關(guān)于DDR2控制器的IP核用戶手冊進(jìn)行配置,硬件測試DDR2讀寫正常。
攝像機(jī)畸變矯正是在求解出相機(jī)投影矩陣的前提下,利用畸變模型(變換函數(shù))將實(shí)際的圖像點(diǎn)平面映射到理想圖像點(diǎn)平面。核心的問題是選擇一個(gè)合適的畸變模型并求解出畸變模型的各項(xiàng)參數(shù)。其中對成像影響最大的是透鏡的徑向畸變和切向畸變。要求取攝像機(jī)的投影矩陣和畸變參數(shù),首先需要進(jìn)行攝像機(jī)標(biāo)定。
攝像機(jī)標(biāo)定[4](Camera Calibration)的過程簡單來說就是給攝像機(jī)建模的過程,用數(shù)學(xué)的方法來建立攝像機(jī)的自然單位(像素)和物理世界單位(米)的關(guān)系。過程中能得到攝像機(jī)的幾何模型和透鏡的畸變模型,這兩個(gè)模型共同定義了攝像機(jī)的內(nèi)參數(shù)。因?yàn)閷τ谀骋粋€(gè)特定的攝像機(jī),幾何模型和畸變模型是不會改變的,因此可以利用計(jì)算機(jī)計(jì)算出該攝像機(jī)的內(nèi)參數(shù)(幾何模型的參數(shù))和畸變參數(shù)(畸變模型的參數(shù)),然后再使用這些內(nèi)參數(shù)通過FPGA的畸變矯正模塊來對攝像機(jī)透鏡畸變進(jìn)行矯正。
對于攝像機(jī)標(biāo)定的具體過程的研究,本文不作論述。正如上節(jié)所說,攝像機(jī)的標(biāo)定工作最后會得出攝像機(jī)的幾何模型和畸變模型,標(biāo)定工作在PC上完成,軟件環(huán)境是Visual C++6.0,主要運(yùn)用到的庫是OpenCV庫,OpenCV是Intel開源計(jì)算機(jī)視覺庫。對于本系統(tǒng)中用到的攝像機(jī)求取的內(nèi)參數(shù)和畸變參數(shù)的結(jié)果如下,攝像機(jī)的型號是奧德麗公司的OCC-3105。
相機(jī)內(nèi)參數(shù)矩陣:
畸變系數(shù):
利用上一節(jié)中的攝像機(jī)的內(nèi)參數(shù)矩陣和畸變系數(shù)來計(jì)算畸變矯正坐標(biāo),由于計(jì)算出攝像機(jī)的內(nèi)參數(shù)和畸變參數(shù)都是浮點(diǎn)數(shù),切向畸變系數(shù)甚至只有104數(shù)量級的大小,因此計(jì)算畸變坐標(biāo)時(shí)應(yīng)全部用浮點(diǎn)計(jì)算來保證計(jì)算精度。本系統(tǒng)用到的是Altera公司Cyclone III系列的FPGA EP3C40C8,畸變矯正模塊中運(yùn)用的所有浮點(diǎn)計(jì)算單元的時(shí)鐘頻率均為100 MHz,小于Cyclone III器件浮點(diǎn)加減法模塊的最高時(shí)鐘頻率150 MHz,因此完全在合理時(shí)鐘頻率范圍之內(nèi)。
由于計(jì)算出的畸變矯正坐標(biāo)點(diǎn)并不一定落在原始圖像的像素點(diǎn)上(大部分情況是落在原始圖像4個(gè)像素點(diǎn)的中間),因此還要通過一定手段計(jì)算出畸變矯正坐標(biāo)點(diǎn)的灰度值,常用的算法有最近鄰點(diǎn)法,三次卷積法和雙線性內(nèi)插法[5]。本系統(tǒng)是為了驗(yàn)證引入畸變矯正算法在FPGA中的可行性,因此選用了較簡單的最近鄰點(diǎn)法。最近鄰點(diǎn)法是用畸變矯正坐標(biāo)點(diǎn)周圍4個(gè)原始像素點(diǎn)中最靠近畸變矯正坐標(biāo)的點(diǎn)的灰度值來作為畸變矯正坐標(biāo)點(diǎn)的灰度值[6],顯然該方法會引入最大半個(gè)像素的誤差。
有了每一行的畸變矯正坐標(biāo)后,就可以通過讀取DDR2存儲器中最靠近矯正坐標(biāo)的像素點(diǎn)的地址(最近鄰點(diǎn)法),來完成畸變矯正的工作。對于每一個(gè)畸變坐標(biāo)對應(yīng)的DDR2存儲器中的原始像素點(diǎn)的地址,可以通過一個(gè)DDR2地址計(jì)算子模塊來完成,原理圖如圖2所示。
圖2 DDR2地址計(jì)算子模塊原理圖
如上節(jié)所說,本系統(tǒng)中DDR2的讀寫數(shù)據(jù)總線寬度為32 bit,傳輸模式為突發(fā)傳輸模式,突發(fā)傳輸長度為4,因此在FPGA內(nèi)部給DDR2存儲器控制模塊定義的數(shù)據(jù)寬度為32 bit×4=128 bit,傳輸時(shí)鐘設(shè)為有效視頻采集子模塊時(shí)鐘的4倍,由于有效視頻采集子模塊一個(gè)時(shí)鐘輸出8 bit給FPGA,因此FPGA給DDR2傳輸數(shù)據(jù)的速度是有效視頻采集速度的(128/8)×4=64倍,給畸變矯正部分留下了非常大的時(shí)間裕量。為了一次采集一行有效視頻數(shù)據(jù)進(jìn)行處理,有效視頻數(shù)據(jù)采集子模塊將未矯正的原始有效視頻數(shù)據(jù)以行為單位存儲到畸變矯正模塊中定義的一個(gè)深度為4 096的DPRAM(雙向端口RAM)中,這個(gè)DPRAM的容量可以存儲兩行的有效視頻數(shù)據(jù),可以用乒乓讀寫來使速度提高一倍。
計(jì)算出一個(gè)原始圖像點(diǎn)的矯正坐標(biāo)的頻率為50 MHz,時(shí)間為1/50 MHz=20 ns,因此得到一行的矯正坐標(biāo)的時(shí)間為720×20 ns=14 400 ns,此時(shí)間小于傳輸一行有效視頻數(shù)據(jù)的時(shí)間((1/27 MHz)×1 440=53 333.333 ns),因此可以達(dá)到邊傳輸原始圖像,邊計(jì)算矯正坐標(biāo)的效果。利用上面提到的DPRAM乒乓讀寫思想,建立3個(gè)深度為2 048的DPRAM來存儲每次矯正計(jì)算需要從DDR2存儲器中讀取的行、列和位區(qū)間信息。
本系統(tǒng)將DDR2作為幀緩存器,存儲當(dāng)前幀有效視頻數(shù)據(jù)的同時(shí)在DDR2內(nèi)部緩存了上一幀的有效視頻數(shù)據(jù),畸變矯正模塊用DDR2緩存的上一幀的數(shù)據(jù)來進(jìn)行圖像算法處理,這樣實(shí)際上就引入了一幀的延時(shí)。PAL制式標(biāo)準(zhǔn)的全電視信號1 s能傳輸30幀圖像,即延時(shí)為33 ms,滿足實(shí)時(shí)性的要求。圖3為Quartus II 9.0軟件自帶邏輯分析儀測試波形圖,可以看到在有效視頻數(shù)據(jù)傳輸?shù)钠陂g(即ActiveVideo_flag為高電平的時(shí)候),畸變矯正模塊將矯正后的一行圖像輸出到輸出視頻緩存DPRAM(ram_40962)中,視頻編碼器同時(shí)讀取DPRAM中的內(nèi)容輸出到顯示器上。
圖3 Quartus II 9.0內(nèi)置邏輯分析儀SignalTap II實(shí)時(shí)測試波形(截圖)
本系統(tǒng)驗(yàn)證了一種畸變矯正算法在市場中低端FPGA平臺中的實(shí)現(xiàn),合理利用和優(yōu)化FPGA內(nèi)部的邏輯單元和內(nèi)存BLOCK RAM資源,提出了一種可用的滿足實(shí)時(shí)性的、小成本的面向視頻流的畸變矯正解決方案,可作為圖像配準(zhǔn),三維坐標(biāo)重建等復(fù)雜圖像處理工作的基礎(chǔ)。
:
[1]張靜,秦文健,賈亮.攝像機(jī)畸變矯正研究的綜述[J].科技創(chuàng)新導(dǎo)報(bào),2011(7):5-7.
[2]吳繼華,王誠.Altera FPGA/CPLD設(shè)計(jì)(高級篇)[M].北京:人民郵電出版社,2005.
[3]王德勝,康令州.基于FPGA的實(shí)時(shí)圖像采集與預(yù)處理[J].電視技術(shù),2011,35(3):32-35.
[4]崔莉娟,朱洪俊,王金鵬.基于畸變校正的雙目立體攝像機(jī)線性標(biāo)定[J].測控技術(shù)與儀器儀表,2011,37(1):84-87.
[5]牛建軍,劉尚乾,姚榮輝,等.高準(zhǔn)確度光電成像測量系統(tǒng)圖像畸變校正算法[J].光子學(xué)報(bào),2006,35(9):1317-1320.
[6]宋玲玲,謝洪波,陳曉冬,等.基于FPGA的MEE畸變實(shí)時(shí)校正系統(tǒng)設(shè)計(jì)[J].儀器儀表學(xué)報(bào),2003,24(4):371-372.
Realization of Distortion Correction Algorithms for Streaming Video Based on FPGA
XU Xiao,XIE Shiyue
(School of Science,South China University of Technology,Guangzhou 510641,China)
It uses Altera’s FPGA EP3C40 to achieve a common correction algorithm for distortion effects,mainly used in the front-end processing part of video streaming image processing system which has requirements of low cost and real-time.Compared to the PC processing platform or DSP processing platform,F(xiàn)PGA can better ensure real-time video streaming because it has powerful parallel processing performance.By experimental tests,this method can achieve real-time requirements of the distortion correction.
FPGA;distortion correction;real-time requirement
TN911.73
A
徐 曉,碩士生導(dǎo)師,主要從事光電技術(shù)與住處技術(shù)方面的研究、工程開發(fā)和教學(xué)工作;
謝時(shí)岳,碩士生,主要從事FPGA平臺下圖像處理算法的研究工作。
責(zé)任編輯:魏雨博
2013-05-24