任文平,賈 贊,申東婭,李同宇
(云南大學(xué) 信息學(xué)院,云南 昆明650091)
隨著微電子技術(shù)的高速發(fā)展,數(shù)字圖像處理技術(shù)在電子通信領(lǐng)域和信息處理領(lǐng)域得到廣泛應(yīng)用,因此設(shè)計一種功能靈活、使用方便的圖像處理系統(tǒng)具有很大實(shí)用意義。傳統(tǒng)的圖像處理系統(tǒng)一般采用單片機(jī)或數(shù)字信號處理器開發(fā)設(shè)計,這種設(shè)計方式用于數(shù)據(jù)處理量大、實(shí)時性要求高的圖像處理時,就很難達(dá)到理想的設(shè)計要求。本文提出一種基于FPGA的設(shè)計方法,通過硬件電路軟件化的設(shè)計方式,在一片F(xiàn)PGA上完成圖像的采集、處理及顯示等功能。與傳統(tǒng)的設(shè)計方法相比較,不僅具有開發(fā)周期短、設(shè)計效率高、擴(kuò)展性和升級性良好、設(shè)計靈活等FPGA器件的開發(fā)特點(diǎn),而且由于采用硬件電路實(shí)現(xiàn),因此在圖像數(shù)據(jù)處理的速度上具有明顯優(yōu)勢。
本系統(tǒng)是一個基于FPGA的數(shù)字圖像處理顯示電路,可以實(shí)現(xiàn)圖像的灰階變換、邊緣檢測及圖像的壓縮等功能。系統(tǒng)框圖如圖1所示,F(xiàn)PGA中包含了以下5個功能模塊電路的開發(fā)設(shè)計。
(1)SDRAM控制模塊:控制SDRAM存儲器中圖像數(shù)據(jù)的讀出和寫入。
圖1 系統(tǒng)框圖
(2)圖像裁剪壓縮電路:將圖像進(jìn)行壓縮變換,使畫面寬高比達(dá)到不同的比例,例如 16:9、4:3等,以實(shí)現(xiàn)不同的視覺效果。
(3)圖像灰階變換模塊:對彩色圖像進(jìn)行黑白變化處理。
(4)圖像邊緣檢測模塊:對彩色圖像進(jìn)行邊緣檢測。
(5)顯示控制電路:根據(jù)VGA顯示屏的特點(diǎn),產(chǎn)生時序驅(qū)動信號,控制處理后的圖像數(shù)據(jù)顯示。
圖中灰階變換、邊緣檢測、圖像壓縮3個模塊輸出的圖像數(shù)據(jù),通過切換電路送入VGA顯示控制。
FPGA中本身自帶容量為4 KB的存儲器,但是考慮到圖像的大小及今后對動態(tài)圖像處理功能的擴(kuò)展,本設(shè)計選用了存儲容量為8 MB的外存SDRAM用于存儲圖像數(shù)據(jù)。SDRAM存儲的容量大,但是其內(nèi)部結(jié)構(gòu)較復(fù)雜,8 MB的SDRAM在存儲空間上劃分了4個BANK區(qū)塊,每個BANK有16 bit數(shù)據(jù)寬,因此對該器件的讀寫必須設(shè)計專門的控制器進(jìn)行控制操作。由于本設(shè)計采用的圖像色彩為 30 bit,RGB各 10 bit,顯然用一個 16 bit寬度BANK不能存儲一個像素,因此采用了2個BANK合并存儲像素。這樣,在SDRAM控制電路上需要仿真成4個虛擬的數(shù)據(jù)端口(2個寫端口+2個讀端口),在同一時刻將一個像素RGB從2個BANK中同時寫入或讀出,合并之后形成一個完整的數(shù)據(jù)。
SDRAM控制器的讀寫操作由2個子模塊完成:控制信號產(chǎn)生子模塊、狀態(tài)轉(zhuǎn)移控制子模塊??刂菩盘柈a(chǎn)生子模塊根據(jù)收到的信號產(chǎn)生各種控制信號,包括:清零操作、讀寫控制、地址遞增信號等。狀態(tài)轉(zhuǎn)移控制子模塊負(fù)責(zé)SDRAM控制器操作的狀態(tài)轉(zhuǎn)移及相應(yīng)數(shù)據(jù)的傳遞。
在圖像的壓縮處理上,本設(shè)計采用了抽取算法,通過直接丟棄部分原始數(shù)據(jù)達(dá)到分辨率的壓縮。例如將原來 640×480的分辨率變換為 320×240或 120×60的分辨率。這種算法雖然有圖像信息損失,但是通過實(shí)際測試,圖像顯示能夠滿足一定的要求。特別是由于此方法不需要數(shù)學(xué)運(yùn)算,所以數(shù)據(jù)處理速度快,尤其適用于一般要求的動態(tài)圖像的處理。
2.2.1 像素的抽取
采用抽取法實(shí)現(xiàn)分辨率的壓縮,必須丟棄行和列的部分像素。以變換320×240分辨率為例,具體的設(shè)計方法是,將分辨率為640×480的原圖像每隔一行進(jìn)行行標(biāo)記,在標(biāo)記的行里,每隔1個像素進(jìn)行列表記,最后將行列都被標(biāo)記過的像素取出,提供給顯示控制電路。
2.2.2 雙端口RAM控制模塊
根據(jù)VGA的顯示原理,VGA顯示器要求行像素讀取和顯示同步,由于抽取出來的行列像素在時序上是不連續(xù)的,電路必須加存儲器對提取的像素進(jìn)行緩存。數(shù)據(jù)緩存模塊可以選用任何存儲單元,根據(jù)像素存取的特點(diǎn),本設(shè)計選用了雙端口的RAM對有效像素進(jìn)行乒乓操作。雙端口RAM乒乓操作的原理如圖2所示。
圖2 乒乓操作的流程圖
在第N個周期,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩存模塊1”,與此同時,“數(shù)據(jù)緩存模塊2”中緩存的數(shù)據(jù)通過“輸出數(shù)據(jù)流選擇單元”的選擇,送到顯示電路。在第N+1個周期,將輸入的數(shù)據(jù)流緩存到“數(shù)據(jù)緩存模塊2”,與此同時,“數(shù)據(jù)緩存模塊1”中緩存的數(shù)據(jù)通過“輸出數(shù)據(jù)流選擇單元”的切換,送到顯示電路。乒乓操作的最大特點(diǎn)是:通過“輸入數(shù)據(jù)流選擇單元”和“輸出數(shù)據(jù)流選擇單元”按節(jié)拍相互配合切換,將經(jīng)過緩存的數(shù)據(jù)流不停頓地傳送到輸出端,因此非常適合對時序不連續(xù)像素進(jìn)行流水線式處理。
根據(jù)雙口RAM乒乓操作的原理,被抽取出來的像素,一行被緩存的同時,另一行則被順序讀取,保證了像素顯示的連續(xù)與同步。
圖像的灰階變換的處理上,有2種方案可選。一種是使用簡便公式:
第二種采用經(jīng)典公式:
2種方法相比,第一種方法雖然簡單易行,但是處理效果不是十分理想。本設(shè)計采用第2種方法,但是這種方法涉及到浮點(diǎn)運(yùn)算,而FPGA及硬件描述語言不能方便地處理浮點(diǎn)運(yùn)算。解決的辦法是對公式進(jìn)行變形:將整個運(yùn)算式進(jìn)行放大縮小處理。針對上式,先將算式左右兩邊放大 512倍,也就是 29,相當(dāng)于<<9,公式變形得:
最后將計算出的結(jié)果再縮小512倍,就得到了灰階的真實(shí)數(shù)據(jù)。
2.4.1 Soble邊緣檢測的原理
常用的邊緣檢測算法通過梯度算子來實(shí)現(xiàn),經(jīng)典的梯度算子有:Sobel模板、Kirsch模板、Prewitt模板、Roberts模板、Laplacian模板等,在求邊緣梯度時,需要對每個像素位置計算。在實(shí)際中常用小區(qū)域模板卷積來近似計算,模板采用N×N的權(quán)值方陣。在眾多的圖像邊緣檢測算法中,Soble算法具有計算簡便、檢測效果好等優(yōu)點(diǎn),是一種被廣泛應(yīng)用的算法。
Sobel算法依據(jù)圖像邊緣的灰度值會產(chǎn)生突變的原理,對像素的灰度值進(jìn)行處理。在圖3所示3×3像素窗中,P1-P9為相鄰的 9個像素,中間像素P5為待檢測像素,根據(jù)Sobel算法將對此像素窗中P5進(jìn)行灰度值濾波運(yùn)算。計算如公式(4)、公式(5)、公式(6)。
圖3 3×3像素
上式中 X、Y是兩組 3×3的 Sobel矩陣算子,分別為橫向及縱向的權(quán)值。A為像素窗中的9個相鄰的像素矩陣。Gx及Gy分別代表經(jīng)橫向及縱向邊緣檢測的亮度差分近似值。G為邊緣檢測值,若此幅值大于給定的某閾值,則可判定像素點(diǎn)P5為邊緣像素,否則為一般像素。邊緣檢測算法的實(shí)現(xiàn)涉及復(fù)雜的計算步驟,故對處理速度有較高要求。采用FPGA器件實(shí)現(xiàn)系統(tǒng)設(shè)計是一種純硬件的解決方案,該方案可以使系統(tǒng)具備較高的實(shí)時性,能比較好地解決處理速度問題。
2.4.2 圖像的邊緣檢測的實(shí)現(xiàn)
根據(jù) sobel算法,對于像素 P5點(diǎn)的邊緣檢測,利用公式(6)計算完成,計算的關(guān)鍵是獲得P5像素的8個相鄰像素。這8個像素由下面2個模塊電路獲取:(1)像素窗接收模塊,作用是將像素劃分成3行成為一個像素處理窗;(2)像素窗數(shù)據(jù)刷新模塊,電路如圖4所示,作用是將接收的串行像素并行輸出,并隨著時鐘的節(jié)拍,將每個數(shù)據(jù)向下一列傳遞,即進(jìn)行數(shù)據(jù)的更新。
圖4 像素窗數(shù)據(jù)刷新電路
從圖4可以看出,經(jīng)過上面的電路處理后,可以同時獲得與P5相鄰的8個有效像素,調(diào)用FPGA內(nèi)的乘加運(yùn)算、平方運(yùn)算及平方根運(yùn)算等電路模塊,就可方便地計算出梯度G的大小,并通過與閾值比較來決定此像素是否為邊緣像素。
圖5 VGA的控制模塊輸出信號的仿真波形
顯示控制器主要用于輸出VGA顯示器所需要的RGB數(shù)據(jù)信號和控制信號,根據(jù)輸入時鐘,顯示控制器可以產(chǎn)生VGA所需要的控制信號,包括場同步、行同步和復(fù)合消隱信號等。輸出像素則與輸入像素相同。
本設(shè)計通過綜合、仿真、下載后對預(yù)存在SDRAM中的圖像進(jìn)行了相應(yīng)處理,處理后的圖像清晰,達(dá)到了較好的處理效果。
本設(shè)計采用了基于FPGA的EDA設(shè)計,通過硬件電路軟件化的設(shè)計,在一片F(xiàn)PGA上完成圖像的壓縮、邊緣檢測、灰階變換及顯示等所有功能。實(shí)測表明,各模塊電路不僅對圖像實(shí)現(xiàn)了較好的處理效果,而且充分體現(xiàn)了硬件電路的速度優(yōu)勢,這是傳統(tǒng)的設(shè)計方法所不能比擬的。
[1]張志剛.FPGA與SOPC設(shè)計教程[M].西安:西安電子科技大學(xué)出版,2006.
[2]薛明星.基于 FPGA器件的 Sobel算法實(shí)現(xiàn).電子元器件應(yīng)用.2008(10).
[3]蕭鴻森.如何 REAL TIME產(chǎn)生灰階影像.http://www.cm.blogs.com.
[4]ALTERA公司.NIOS2嵌入式處理器設(shè)計大賽-2006年優(yōu)秀作品選.西安:西安電子科大出版,2007.
[5]李國剛,余俊.基于 FPGA的圖像 VGA圖形控制器的實(shí)現(xiàn)方法[J].信息技術(shù),2006(7).