《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 視頻縮放在FPGA中的應(yīng)用和實(shí)現(xiàn)
視頻縮放在FPGA中的應(yīng)用和實(shí)現(xiàn)
2016年電子技術(shù)應(yīng)用第6期
張 梁,王景存,梅 鏢
武漢科技大學(xué) 信息科學(xué)與工程學(xué)院,湖北 武漢430081
摘要: 針對(duì)某顯示系統(tǒng)中監(jiān)控視頻控制器的實(shí)際需求,設(shè)計(jì)了一種可實(shí)現(xiàn)四路視頻信號(hào)實(shí)時(shí)縮放的電路架構(gòu)。通過權(quán)衡幾種常用圖像縮放算法的顯示質(zhì)量和硬件可行性,選擇用雙線性插值算法實(shí)現(xiàn)視頻的縮放,并在FPGA平臺(tái)上以雙口RAM資源構(gòu)建的線緩存作為算法硬件實(shí)現(xiàn),該算法主要由視頻數(shù)據(jù)緩沖模塊、插值系數(shù)產(chǎn)生模塊以及整體控制模塊構(gòu)成。本設(shè)計(jì)在滿足視頻縮放質(zhì)量要求的基礎(chǔ)上,避免了采用過于復(fù)雜算法而消耗過多的FPGA資源,有效地解決了視頻縮放時(shí)原始圖像信息量丟失導(dǎo)致圖像失真的問題。結(jié)果表明,該設(shè)計(jì)能夠?qū)崿F(xiàn)任意比例的視頻縮放,實(shí)時(shí)性高,應(yīng)用靈活,縮放后顯示效果良好,能夠滿足實(shí)際工程的要求。
中圖分類號(hào): TM930.9
文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.06.009
中文引用格式: 張梁,王景存,梅鏢. 視頻縮放在FPGA中的應(yīng)用和實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(6):34-37.
英文引用格式: Zhang Liang,Wang Jingcun,Mei Biao. Application and implementation of video scaling algorithm based on FPGA[J].Application of Electronic Technique,2016,42(6):34-37.
Application and implementation of video scaling algorithm based on FPGA
Zhang Liang,Wang Jingcun,Mei Biao
College of Information Science and Engineering,Wuhan University of Science and Technology,Wuhan 430081,China
Abstract: Focusing on the practical requirements of the monitoring video controller in some displaying systems, this paper introduces a circuit architecture which is designed for real time scale of four video signals. Through analyzing the display quality and hardware realizability of several scaling algorithms, selects implement video scaling by bilinear interpolation algorithm and uses line buffers architecture as the core of algorithms implementation based on FPGA. The design mainly consists of the data buffer module, the coefficient generation module and the integrated control module. To meet the quality requirements of video scaling, this design avoids selecting complex algorithms to cause FPGA resources to be consumed excessively, and effectively solves the problem of image distortion caused by the loss of the original image information. The result indicates that the system can realize arbitrary scaling, and its real-time,flexibility and display effect are good, which can meet the application requirements of the actual project.
Key words : video scaling;bilinear interpolation;line buffer;FPGA

0 引言

    隨著數(shù)字多媒體技術(shù)的不斷發(fā)展,數(shù)字圖像處理技術(shù)廣泛應(yīng)用于空間探測(cè)、生物醫(yī)學(xué)、監(jiān)控系統(tǒng)以及工業(yè)檢測(cè)等許多領(lǐng)域中。數(shù)字視頻處理則是基于對(duì)視頻中每幀圖像的處理來實(shí)現(xiàn)的。數(shù)字視頻圖像的縮放是視頻處理中的一個(gè)重要組成部分。

    目前視頻縮放系統(tǒng)大多采用視頻縮放的專業(yè)芯片設(shè)計(jì),應(yīng)用單一、靈活性差且成本較高[1]。本設(shè)計(jì)是在FPGA的平臺(tái)上,利用雙口RAM資源構(gòu)建兩個(gè)線緩存,在視頻圖像的垂直和水平兩個(gè)方向上依次進(jìn)行實(shí)時(shí)雙線性插值運(yùn)算,實(shí)現(xiàn)視頻圖像的任意比例縮放,具有實(shí)時(shí)性好、處理速度快、應(yīng)用靈活等特點(diǎn)。

1 縮放算法的硬件可行性

1.1 縮放算法的選取

    目前,圖像縮放算法大致可以分為兩大類[2],一類是基于邊緣的圖像縮放算法,它利用了圖像的邊緣信息,能夠很好地還原原始圖像,但該算法計(jì)算復(fù)雜,運(yùn)算速度慢,硬件上難以實(shí)現(xiàn);另一類是基于插值的圖像縮放算法,它的算法實(shí)現(xiàn)相對(duì)簡單,但縮放后可能會(huì)產(chǎn)生細(xì)節(jié)丟失、輪廓模糊等現(xiàn)象。其中,不同的插值算法有不同的精度,插值算法的好壞也直接影響著圖像的失真程度。最常用的插值算法有3種:最近鄰插值、雙線性插值、立方卷積插值,使用立方卷積插值達(dá)到的效果是最佳的。考慮到最終算法需要在FPGA上完成,算法的復(fù)雜度直接影響FPGA內(nèi)部的邏輯資源和存儲(chǔ)塊的消耗量,以及處理每個(gè)實(shí)時(shí)像素值所消耗的時(shí)鐘周期,本設(shè)計(jì)選用雙線性插值來完成視頻圖像的縮放。

1.2 雙線性插值算法的原理

    雙線性插值,又稱為雙線性內(nèi)插。在數(shù)學(xué)上,雙線性插值是由兩個(gè)變量插值函數(shù)的線性插值擴(kuò)展,利用了需要處理的原始圖像像素點(diǎn)周圍4個(gè)像素點(diǎn)的相關(guān)性,通過雙線性算法計(jì)算而得出[3]

    若用(x,y)表示期望位置,用Q(x,y)表示期望輸出的像素值,I(x,y)表示輸入像素值,與位置(x,y)相鄰的4個(gè)點(diǎn)為(x1,y1)、(x1,y2)、(x2,y1)、(x2,y2),如圖1所示。先在x方向上進(jìn)行線性插值,得到:

    wdz1-gs1-2.gif

wdz1-t1.gif

式中:I(R1)和I(R2)是4個(gè)像素值中兩兩在水平方向上的插值結(jié)果。

    再對(duì)式(1)和式(2)得到的兩個(gè)在水平方向上的插值結(jié)果進(jìn)行垂直方向上的插值

    wdz1-gs3-4.gif

    這樣Q(x,y)就是期望位置所要的像素值,雙線性插值法計(jì)算量大,但縮放后的圖像質(zhì)量高,由于雙線性插值具有低通濾波器的性質(zhì),使高頻信號(hào)受損,可能會(huì)使圖像在輪廓上有一定的模糊。

    考慮到FPGA內(nèi)部豐富的存儲(chǔ)塊,設(shè)計(jì)將視頻數(shù)據(jù)以行為單位交替寫入兩個(gè)由雙口RAM構(gòu)成的線緩存中,通過縮放比例合理控制讀寫地址,先進(jìn)行相鄰4個(gè)像素的垂直線性插值,然后對(duì)得到的兩個(gè)結(jié)果進(jìn)行水平方向插值。

2 FPGA實(shí)現(xiàn)

2.1 功能模塊的劃分

    FPGA選用的是ALTERA公司的Cyclone IV系列EP4CE30F23C6,共有28 848個(gè)Les,66個(gè)M9K,132個(gè)9位乘法器,完全滿足設(shè)計(jì)需要。整個(gè)系統(tǒng)主要由視頻數(shù)據(jù)的采集、剪切、旋轉(zhuǎn)、基于ddr2的數(shù)據(jù)緩沖、縮放、拼接以及視頻的輸出構(gòu)成。整個(gè)監(jiān)控系統(tǒng)的實(shí)現(xiàn)框圖如圖2所示。

wdz1-t2.gif

    監(jiān)控系統(tǒng)是將4個(gè)裝載在特定位置的170°廣角攝像頭采集的實(shí)時(shí)圖像進(jìn)行翻轉(zhuǎn)、剪切、縮放、拼接成一幅實(shí)時(shí)的監(jiān)控畫面。4個(gè)模擬攝像頭采集的PAL復(fù)合視頻信號(hào)經(jīng)TW2867采樣輸出為108 M的4路復(fù)用總線的數(shù)字信號(hào)BT.656,在FPGA中根據(jù)每個(gè)視頻不同的ID號(hào)分解出4路后,經(jīng)過適當(dāng)?shù)募舨?,將奇偶場交叉存?chǔ)在ddr2的4個(gè)物理區(qū)域,實(shí)現(xiàn)視頻的去隔行功能,得到逐行排列的視頻流,便于后續(xù)模塊的處理。其中左攝像頭采集的視頻需要順時(shí)針旋轉(zhuǎn)90°、右攝像頭采集的視頻需要逆時(shí)針旋轉(zhuǎn)90°,實(shí)現(xiàn)的方法是把一幀圖像分解為若干小塊,以塊為單位,從ddr2中突發(fā)讀出旋轉(zhuǎn)前的視頻數(shù)據(jù),進(jìn)行旋轉(zhuǎn)排列,然后再以塊為單位突發(fā)寫入ddr2的另外一塊區(qū)域,直至整幀圖像處理完畢。存儲(chǔ)在外部Flash中的圖片菜單等資源會(huì)在上電完成后自動(dòng)寫入ddr2的某一區(qū)域,供后續(xù)模塊調(diào)用。

    輸出時(shí),從對(duì)應(yīng)的ddr2區(qū)域中讀出視頻數(shù)據(jù),存入線緩存后經(jīng)過雙線性插值縮放模塊,與ddr2中讀出的圖片菜單拼接成一幅實(shí)時(shí)監(jiān)控畫面??紤]到后續(xù)ADV7171的輸入是BT.656格式的視頻數(shù)據(jù),前面存儲(chǔ)到ddr2時(shí)已通過幀存機(jī)制實(shí)現(xiàn)了去隔行功能,這里需將處理后的逐行視頻流隔行處理[4],為后續(xù)轉(zhuǎn)換做好準(zhǔn)備。具體做法是以27 M(位寬16 bit)的速率從拼接模塊中讀取數(shù)據(jù),每幀圖像取出所有奇數(shù)行(或者所有偶數(shù)行),下一幀圖像取出所有偶數(shù)行(或者所有奇數(shù)行),交替進(jìn)行,將取出的奇偶行以27 M(位寬8 bit)的速率給輸出模塊,輸出模塊將奇偶場的YUV422有效視頻數(shù)據(jù)加上必要的消隱組成標(biāo)準(zhǔn)的BT.656格式視頻數(shù)據(jù),經(jīng)ADV7171編碼成復(fù)合視頻輸出至顯示屏。 

    由于篇幅有限,本文只對(duì)整體架構(gòu)流程粗略介紹,下文將著重對(duì)縮放算法的實(shí)現(xiàn)過程進(jìn)行描述。

2.2 縮放算法的硬件實(shí)現(xiàn)

    雙線性插值縮放算法硬件實(shí)現(xiàn)總體框圖如圖3所示,該設(shè)計(jì)主要包括3大部分,分別為數(shù)據(jù)緩沖、系數(shù)與像素值的計(jì)算以及整體控制。

wdz1-t3.gif

2.2.1 數(shù)據(jù)緩沖

    縮放模塊與ddr2之間采用FIFO的數(shù)據(jù)交互方式。由于該算法至少需要兩行數(shù)據(jù)才能進(jìn)行運(yùn)算,因此首先將輸入的視頻數(shù)據(jù)進(jìn)行緩存,且需緩存兩行視頻數(shù)據(jù)。設(shè)計(jì)采用兩個(gè)線緩存來緩存兩行數(shù)據(jù),每個(gè)線緩存由3個(gè)雙口RAM組成,由于輸入的數(shù)據(jù)是YUV422格式的,所以第一個(gè)雙口RAM存儲(chǔ)Y分量,每行有720 B,深度為1 024;第二個(gè)和第三個(gè)雙口RAM交替存儲(chǔ)UV分量,U和V都是360 B,故深度選為512。設(shè)計(jì)中采用兩個(gè)狀態(tài)機(jī)分別控制數(shù)據(jù)流入和流出線緩存,始終保證一個(gè)線緩存中有一行完整的數(shù)據(jù),另一個(gè)線緩存的寫地址大于讀地址,確保將要處理的像素值提前寫入線緩存。

    從線緩存讀數(shù)據(jù)時(shí),每個(gè)像素值由3個(gè)雙口RAM的輸出拼接,也就是UV分量的同一值會(huì)被讀取兩次,實(shí)現(xiàn)了YUV422到Y(jié)UV444的轉(zhuǎn)換,方便后續(xù)模塊的處理。

2.2.2 插值系數(shù)的產(chǎn)生

    在進(jìn)行縮放計(jì)算時(shí),首先需要確定期望輸出的視頻分辨率,通過原始輸入和期望輸出的分辨率確定縮放的比例,如下式所示:

    wdz1-gs5.gif

    式中,xscaler是水平方向縮放比例,yscaler是垂直方向縮放比例,t_width和t_heigth分別表示期望輸出圖像的水平和垂直方向上的像素點(diǎn)個(gè)數(shù);s_width和s_height分別表示原始輸入圖像的水平和垂直方向上的像素點(diǎn)個(gè)數(shù)。

    假設(shè)待插值點(diǎn)在縮放后的圖像中的坐標(biāo)為(m,n),雙線性插值算法的計(jì)算公式如下:

     wdz1-gs6.gif

wdz1-t4.gif    式中,a、b、c、d分別相鄰4個(gè)像素點(diǎn)(左上、右上、左下、右下)的像素值。由于FPGA無法處理浮點(diǎn)數(shù),故在代碼中需將水平和垂直縮放比例乘以256倍,最終得到的y需要向右移位8位,即為插值的期望像素值。

2.2.3 整體控制

    縮放算法的整體控制流程如圖4所示,由于縮放模塊的前后數(shù)據(jù)流是跨時(shí)鐘域的,設(shè)計(jì)采用FIFO進(jìn)行交互,確保兩端的FIFO不會(huì)超過設(shè)定的閾值即可保證數(shù)據(jù)的正常傳輸。兩個(gè)線緩存具有相同的讀寫地址,對(duì)其進(jìn)行寫操作時(shí)利用片選信號(hào),實(shí)現(xiàn)兩個(gè)線緩存的乒乓操作,可以保證讀取到的視頻數(shù)據(jù)為同一行的數(shù)據(jù)[5]

    當(dāng)線緩存的寫地址至少領(lǐng)先讀地址10個(gè)單位時(shí),后續(xù)模塊會(huì)讀取線緩存中的值并計(jì)算,在讀的過程中會(huì)實(shí)現(xiàn)坐標(biāo)的轉(zhuǎn)換。比如原始圖像一行是720個(gè)像素值,期望輸出的圖像一行是800個(gè)像素點(diǎn),每讀取一個(gè)數(shù)據(jù),讀取地址累加一次,當(dāng)每讀完9個(gè)數(shù)據(jù)時(shí),地址不變,重復(fù)讀取第9個(gè)數(shù)據(jù),這樣就實(shí)現(xiàn)了列坐標(biāo)的轉(zhuǎn)換。行坐標(biāo)的轉(zhuǎn)換類似,比如期望輸出的行數(shù)少于原始圖像的行數(shù),根據(jù)縮小的比例,讀線緩存的使能信號(hào)會(huì)失能直到前置FIFO中的新一行的數(shù)據(jù)覆蓋掉線緩存中未被處理的一行數(shù)據(jù),實(shí)現(xiàn)了行坐標(biāo)的變換。

    由于一個(gè)時(shí)鐘無法完成過多的計(jì)算,且水平插值需要垂直插值的結(jié)果參與運(yùn)算,故采用流水線操作將公式分解為3步,如式(6)所示,每一步的計(jì)算過程完全一樣,設(shè)計(jì)中做成通用模塊,只需修改對(duì)應(yīng)的參數(shù),實(shí)例化即可。插值計(jì)算功能框圖如圖5所示,其中a,b是像素值輸入端口,如果是垂直插值模塊,指的是兩個(gè)線緩存的上下值;如果是水平插值,指的是垂直插值處理后相鄰的兩個(gè)輸出值。a_coff和b_coff分別是插值系數(shù),呈取反關(guān)系。scale_en_in是使能信號(hào),c是處理后的輸出值。

wdz1-t5.gif

3 仿真與驗(yàn)證

    本設(shè)計(jì)的解碼芯片為TW2867,編碼芯片為ADV7171,存儲(chǔ)器DDR2的型號(hào)是MT47H64M16,共兩片。在Quartus12.1開發(fā)平臺(tái)上使用Verilog HDL對(duì)各邏輯模塊進(jìn)行設(shè)計(jì)。

    經(jīng)驗(yàn)證得到本縮放模塊占用FPGA內(nèi)部主要邏輯資源情況如表1所示,其中Dedicated Logic指的是邏輯單元中實(shí)現(xiàn)寄存器,即時(shí)序邏輯所占的部分。

wdz1-b1.gif

    圖6為通過Quartus自帶的仿真工具SignalTap對(duì)分辨率為720×576的視頻放大為800×600進(jìn)行仿真得到的雙線性插值縮放算法的仿真圖。圖中, rdaddress是線緩存的讀地址,scale_col是期望輸出的行像素個(gè)數(shù),可以看到在每9個(gè)像素中,讀地址會(huì)在最后一個(gè)像素處保持不變。rd_not_read_data為低電平時(shí),線緩存的寫入和讀取是同時(shí)進(jìn)行的,wraddress是線緩存的寫地址,始終大于rdaddress。上面五行a、b、a_coff、b_coff、c分別對(duì)應(yīng)垂直插值的縱向像素值、插值系數(shù)及輸出,下面五行對(duì)應(yīng)水平插值的各參數(shù)。 

wdz1-t6.gif

    圖7為拍攝的實(shí)物效果圖,圖7(a)是將4路攝像頭采集的實(shí)時(shí)圖像分別壓縮,水平方向和垂直方向各縮小一半后拼接而成。圖7(b)是將第二路攝像頭采集的圖像顯示出來,沒經(jīng)過縮放。由于攝像頭采用的是170°廣角攝像頭,圖像4角的黑色是正?,F(xiàn)象。通過效果圖可知,本設(shè)計(jì)方案測(cè)試效果良好,適合于實(shí)時(shí)監(jiān)控系統(tǒng)的圖像采集。

wdz1-t7.gif

參考文獻(xiàn)

[1] 趙艷軍,何其銳,施錫濤.基于DVI和FPGA的視頻疊加器設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(6):31-35.

[2] 張俊華,陳建華,王逍,等.基于邊緣移動(dòng)匹配法的圖像插值[J].計(jì)算機(jī)工程與應(yīng)用,2003,39(6):73-75,134.

[3] Donald Hearn,等.計(jì)算機(jī)圖形學(xué).蔡士杰等譯[M].北京:電子工業(yè)出版社,2007.

[4] 韓彬,于瀟宇,張雷鳴.FPGA設(shè)計(jì)技巧與案例開發(fā)詳解[M].北京:電子工業(yè)出版社,2014.

[5] 陳全兵,習(xí)友寶.基于雙線性內(nèi)插算法的多路視頻縮放設(shè)計(jì)[J].電視技術(shù),2015,39(1):43-46.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。