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