基于FPGA的圖像裁剪電路的設(shè)計(jì)與實(shí)現(xiàn)
摘要:本文提出了一種基于FPGA的圖像裁剪電路的設(shè)計(jì)方法,利用像素的抽取改變圖像的分辨率,從而達(dá)到圖像裁剪的效果。與傳統(tǒng)的方法相比,這種方法簡(jiǎn)單易行,開(kāi)發(fā)成本低,圖像的清晰度能滿足一定的要求。此方法數(shù)據(jù)處理速度快,尤其適用于動(dòng)態(tài)圖像的處理。
關(guān)鍵詞:現(xiàn)場(chǎng)可編程門(mén)陣列:圖像裁剪;分辨率
0 概述
圖像處理電路是信息控制系統(tǒng)中必不可少的環(huán)節(jié),廣泛應(yīng)用于生產(chǎn)生活中,如住宅小區(qū)的安全監(jiān)控系統(tǒng)、生產(chǎn)線的質(zhì)量監(jiān)控系統(tǒng)、電視機(jī)的機(jī)頂盒等,因此圖像的處理電路的開(kāi)發(fā)受到了人們的重視。裁剪壓縮是圖像處理技術(shù)中一個(gè)重要的內(nèi)容,傳統(tǒng)的方法往往采用DSP芯片或插值算法來(lái)實(shí)現(xiàn)圖像的裁剪壓縮功能,這種方法存在電路設(shè)計(jì)復(fù)雜、開(kāi)發(fā)成本高的問(wèn)題。本文提出了一種基于FPGA的設(shè)計(jì)方法,利用像素的抽取改變圖像的分辨率,從而達(dá)到圖像裁剪的效果。這種設(shè)計(jì)方法簡(jiǎn)單易行,圖像的清晰度能滿足一定的要求。特別是由于不需要數(shù)學(xué)運(yùn)算,所以此方法數(shù)據(jù)處理速度快,尤其適用于一般要求的動(dòng)態(tài)圖像的處理。
1 電路設(shè)計(jì)方案
本設(shè)計(jì)是一個(gè)基于FPGA的數(shù)字圖像的裁剪電路,電路框圖如圖1所示。其中FPGA中包含了三個(gè)功能模塊電路的設(shè)計(jì):
(1)SDRAM的控制模塊:預(yù)處理的圖像存在SDRAM存儲(chǔ)器中,通過(guò)SDRAM的控制模塊,將圖像信息讀出并進(jìn)行相應(yīng)的處理,提供給下一個(gè)電路模塊使用。
(2)圖像裁剪電路:包括像素的抽取和緩存電路,采用改變圖像分辨率的方法,將有效的像素提取出來(lái)提供給顯示電路,使圖像進(jìn)行4:3或2:3等多比例變化,以達(dá)到不同的視覺(jué)效果。
(3)顯示控制電路:根據(jù)VGA顯示屏的特點(diǎn),產(chǎn)生時(shí)序驅(qū)動(dòng)信號(hào)控制圖像數(shù)據(jù)顯示。[!--empirenews.page--]
2 設(shè)計(jì)實(shí)現(xiàn)
2.1 SDRAM控制模塊的設(shè)計(jì)
預(yù)處理的圖像需要放在存儲(chǔ)器中,對(duì)于大部分的FPGA來(lái)說(shuō)器件內(nèi)部都含有4k的內(nèi)存,但考慮到圖像的容量及今后對(duì)動(dòng)態(tài)圖像處理功能的擴(kuò)展,本設(shè)計(jì)選用了存儲(chǔ)容量為8M外存的SDRAM。8M的SDRAM在存儲(chǔ)空間上劃分了4個(gè)BANK區(qū)塊,每個(gè)BANK有16位數(shù)據(jù)寬。SDRAM雖然存儲(chǔ)的容量大,但是其內(nèi)部結(jié)構(gòu)復(fù)雜,對(duì)該器件的讀寫(xiě)使用必須設(shè)計(jì)專(zhuān)門(mén)的控制器進(jìn)行控制操作。由于本設(shè)計(jì)采用的圖像色彩為30位,RGB各10位,顯然用一個(gè)16位寬度BANK不能存儲(chǔ)一個(gè)像素,因此采用了2個(gè)BANK合并存儲(chǔ)像素,如圖2。這樣一來(lái),在SDRAM控制電路上需要仿真成四個(gè)虛擬的數(shù)據(jù)端口(兩個(gè)寫(xiě)端口+兩個(gè)讀端口),在同一時(shí)刻將一個(gè)像素RGB從兩個(gè)BANK中同時(shí)寫(xiě)入或讀出,合并之后形成一個(gè)完整的數(shù)據(jù)。
根據(jù)這樣的存取原則,一個(gè)具有640×480個(gè)像素、色彩為30位的圖像,就需要同時(shí)BANKl和BANK2中存入640×480個(gè)16位的信息,SDRAM控制模塊讀入數(shù)據(jù)的端口程序如下所示,讀出數(shù)據(jù)同理。
SDRAM_Control_4PortSDRAM0(
.WRl_DATA({R[9:0],G[9:5]}),
.WRl(E N),
.WRl_ADDR(0),----BANKl的地址
.WRl_MAX_ADDR(640*480),
.WRl_LENGTH(9'h100),
.WRl_LOAD(RST_0),
.WR1_CLK(P1X_CLK),
.WR2_DATA({G[4:0],B[9:0]}),
.WR2(E N),
.WR2_MAX_ADDR(22'h100000+640*480),
.WR2_LENGTH(9'hl00),
.WR2_LOAD(RST_0),
.WR2_CLK(PIX_CLK);
2.2 圖像裁剪模塊
在圖像的裁剪處理上,有兩種方案可選,第一種為線性插值算法。這是一種廣泛使用的圖像插值算法,通常使用8鄰域采樣加權(quán)產(chǎn)生新像素:
第二種為抽取算法,即通過(guò)變換分辨率的方法實(shí)現(xiàn),例如將原來(lái)的640×480的分辨率變換為320×240或120×60的分辨率,這樣圖像的寬高比近似為4:3或16:8。比較兩種算法,第二種算法通過(guò)直接丟棄部分原始數(shù)據(jù)達(dá)到分辨率的壓縮,雖然有圖像信息損失,但在圖像顯示滿足要求的前提下,這種電路的實(shí)現(xiàn)更加便捷、方便,因此本設(shè)計(jì)采用了第二種算法。
2.2.1 像素的抽取
根據(jù)VGA的顯示原理,儲(chǔ)存在SDRAM中的640×480個(gè)像素,受顯示控制電路中行同步信號(hào)的控制,每個(gè)行周期讀出640個(gè)像素,并同步顯示。采用抽取法實(shí)現(xiàn)分辨率的壓縮,必須丟棄行和列的部分像素。以變換320×240分辨率為例,具體的設(shè)計(jì)方法是,將分辨率為640×480的原圖像每隔一行進(jìn)行行標(biāo)記,在標(biāo)記的行里,每隔1個(gè)像素進(jìn)行列標(biāo)記,最后將行列都被標(biāo)記過(guò)的像素取出,提供給顯示控制電路。
由于SDRAM存儲(chǔ)器本身具有逐行讀取、讀取顯示同步的特點(diǎn),為了達(dá)到對(duì)行像素的隔行提取,本設(shè)計(jì)采用快讀慢顯的方式。例如原640× 480的分辨率采用25MHz的頻率作為SDRAM數(shù)據(jù)讀取頻率和VGA的像素顯示頻率,現(xiàn)在采用50MHz作為SDRAM數(shù)據(jù)讀取頻率,VGA的像素顯示頻率仍然采用25MHz,即讀取兩行,保存一行并顯示。在提取的行像素里每隔1個(gè)像素對(duì)列像素進(jìn)行提取,則得到所需要的行列像素。[!--empirenews.page--]
2.2.2 雙端口RAM控制模塊
VGA顯示器要求行像素讀取和顯示同步,由于抽取出來(lái)的行列像素在時(shí)序上是不連續(xù)的,電路必須加存儲(chǔ)器對(duì)提取的像素進(jìn)行緩存。數(shù)據(jù)緩存模塊可以選用任何存儲(chǔ)單元,根據(jù)像素存取的特點(diǎn),本設(shè)計(jì)選用了雙端口的RAM對(duì)有效像素進(jìn)行乒乓操作。雙端口RAM乒乓操作的原理如圖3所示。
在第N個(gè)周期,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩存模塊1”,與此同時(shí),“數(shù)據(jù)緩存模塊2”中緩存的數(shù)據(jù)通過(guò)“輸出數(shù)據(jù)流選擇單元”的選擇,送到顯示電路。在第N+1個(gè)周期,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩存模塊2”,與此同時(shí),“數(shù)據(jù)緩存模塊l”中緩存的數(shù)據(jù)通過(guò)“輸出數(shù)據(jù)流選擇單元”的切換,送到顯示電路。乒乓操作的最大特點(diǎn)是:通過(guò)“輸入數(shù)據(jù)流選擇單元”和“輸出數(shù)據(jù)流選擇單元”按節(jié)拍相互配合切換,將經(jīng)過(guò)緩存的數(shù)據(jù)流沒(méi)有時(shí)間停頓地傳送到輸出端,因此非常適合對(duì)時(shí)序不連續(xù)的像素進(jìn)行流水線式處理。
根據(jù)雙口RAM乒乓操作的原理,被抽取出來(lái)的像素,一行被緩存的同時(shí),另一行則被順序地讀取出來(lái),保證了像素顯示的連續(xù)與同步。雙端口RAM的輸入輸出信號(hào)的端口程序如下:
WIRE [29:0] DATA a,DATA b;
WIRE I_a=I;
WIRE I_b=~I(xiàn);
WIRE[9:0]COIANTER a=(I)?ADDRESSl:COUNlER;
WIRE[9:0]COUNTER b=(!I)?ADDRESSl:COUNTER;
RAM U2(
.DATA a (INDATA),
.WREN a (I a),
.ADDRESS a(COUNTER a),
.CLOCK A(CLK),
.Q a(DATA a),
.DATA b (INDATA),
.WREN b(I_b),
.ADDRESS b(COUNTER b,
.CLOCK B (CLK),
.Q_b(DATA_b));
2.3 VGA顯示控制模塊
顯示控制器主要用于輸出VGA顯示器所需要的RGB數(shù)據(jù)信號(hào)和控制信號(hào),根據(jù)輸入時(shí)鐘,顯示控制器可以產(chǎn)生VGA所需要的控制信號(hào),包括場(chǎng)同步、行同步和復(fù)合消隱信號(hào)等。輸出像素則與輸入像素相同。圖4為VGA的控制模塊的仿真波形。
3 電路調(diào)試結(jié)果與分析
圖5是分辨率為640×480的原圖像,圖6是分辨率為320×240,比例為4:3的圖像。從處理后的圖像效果可以看出,圖像清晰,信息量豐富,能夠滿足圖像的一般要求。
4 結(jié)論
本論文提出了一種基于FPGA的圖像裁剪電路的設(shè)計(jì)方法,通過(guò)改變圖像的分辨率達(dá)到壓縮圖像的效果。這種設(shè)計(jì)方法不僅具備了FPGA開(kāi)發(fā)電路所具有的開(kāi)發(fā)周期短、設(shè)計(jì)效率高、擴(kuò)展性和升級(jí)性良好、設(shè)計(jì)靈活等特點(diǎn),而且與通常所用的插值算法相比,電路結(jié)構(gòu)簡(jiǎn)單、設(shè)計(jì)簡(jiǎn)便,從測(cè)試的效果來(lái)看,圖像清晰,能夠滿足一般圖像的要求。