基于FPGA的圖像裁剪電路的設(shè)計與實現(xiàn)
2 設(shè)計實現(xiàn)
2.1 SDRAM控制模塊的設(shè)計
預(yù)處理的圖像需要放在存儲器中,對于大部分的FPGA來說器件內(nèi)部都含有4k的內(nèi)存,但考慮到圖像的容量及今后對動態(tài)圖像處理功能的擴展,本設(shè)計選用了存儲容量為8M外存的SDRAM。8M的SDRAM在存儲空間上劃分了4個BANK區(qū)塊,每個BANK有16位數(shù)據(jù)寬。SDRAM雖然存儲的容量大,但是其內(nèi)部結(jié)構(gòu)復(fù)雜,對該器件的讀寫使用必須設(shè)計專門的控制器進行控制操作。由于本設(shè)計采用的圖像色彩為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鄰域采樣加權(quán)產(chǎn)生新像素:
第二種為抽取算法,即通過變換分辨率的方法實現(xiàn),例如將原來的640×480的分辨率變換為320×240或120×60的分辨率,這樣圖像的寬高比近似為4:3或16:8。比較兩種算法,第二種算法通過直接丟棄部分原始數(shù)據(jù)達到分辨率的壓縮,雖然有圖像信息損失,但在圖像顯示滿足要求的前提下,這種電路的實現(xiàn)更加便捷、方便,因此本設(shè)計采用了第二種算法。
2.2.1 像素的抽取
根據(jù)VGA的顯示原理,儲存在SDRAM中的640×480個像素,受顯示控制電路中行同步信號的控制,每個行周期讀出640個像素,并同步顯示。采用抽取法實現(xiàn)分辨率的壓縮,必須丟棄行和列的部分像素。以變換320×240分辨率為例,具體的設(shè)計方法是,將分辨率為640×480的原圖像每隔一行進行行標(biāo)記,在標(biāo)記的行里,每隔1個像素進行列標(biāo)記,最后將行列都被標(biāo)記過的像素取出,提供給顯示控制電路。
由于SDRAM存儲器本身具有逐行讀取、讀取顯示同步的特點,為了達到對行像素的隔行提取,本設(shè)計采用快讀慢顯的方式。例如原640× 480的分辨率采用25MHz的頻率作為SDRAM數(shù)據(jù)讀取頻率和VGA的像素顯示頻率,現(xiàn)在采用50MHz作為SDRAM數(shù)據(jù)讀取頻率,VGA的像素顯示頻率仍然采用25MHz,即讀取兩行,保存一行并顯示。在提取的行像素里每隔1個像素對列像素進行提取,則得到所需要的行列像素。
DIY機械鍵盤相關(guān)社區(qū):機械鍵盤DIY
評論