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