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