用CPLD實現(xiàn)嵌入式平臺上的實時圖像增強
提出了在嵌入式平臺上用CPLD實現(xiàn)實時圖像增強算法的解決方案,并加以實現(xiàn)。重點討論了經(jīng)過改進(jìn)的圖像增強算法以及使用CPLD實現(xiàn)的具體方法,介紹了所采用的嵌入式平臺的總體結(jié)構(gòu)。
通常,在擁有DSP或FPGA的嵌入式平臺上,有關(guān)圖像信號處理的算法部分都由DSP和FPGA完成。但是相對于標(biāo)準(zhǔn)的PC平臺來說,嵌入式平臺的資源有限得多,而且由于成本的原因,中央處理器的速度也通常無法與PC相比。因此,在PC機上用軟件可以輕易實現(xiàn)的圖像處理算法,完全移植到嵌入式平臺上就要頗費一番周折了。
為了達(dá)到實時圖像處理的目的,除了最大限度地發(fā)揮中央處理器的圖像處理能力外,還需要合理地分配任務(wù)。DSP芯片的優(yōu)勢在于乘除運算的能力,由于其特殊的流水線結(jié)構(gòu)和處理單元,大部分DSP都能在單周期內(nèi)完成在PC上需若干個周期才能完成的乘法運算,所以在進(jìn)行諸如FFT、DCT等運算時優(yōu)勢明顯;相反在進(jìn)行簡單的加減運算時,由于時鐘頻率和總線寬度都無法與PC機相比,效率不高。因此,如果能用硬件實時實現(xiàn)這些相對簡單卻又繁瑣的運算,就可以大大提高系統(tǒng)的總體性能。
1 改進(jìn)的圖像增強算法
圖像增強是圖像處理中用于改善圖像質(zhì)量以及圖像視覺效果的一種方法。在DSP平臺上采用直方圖均衡實現(xiàn)實時圖像增強是一種常用的方法。對一幅連續(xù)圖像,其具有灰度G的閾值面積(所有輪廓線所包圍的面積)為A(G),則其直方圖H(G)定義為:
H(G)=lim[A(G+ΔG)-A(G)/ΔG=d/dcA(G),
ΔG→0
對于數(shù)字圖像,G為整數(shù),A(G)表示灰度值大于等于G的象素個數(shù),當(dāng)ΔG=1,H(G)=A(G+1)-A(G)。 [!--empirenews.page--]
如果對A(G)做一次系數(shù)為Gm/A0的比例變換,Gm表示灰度的最大值,A0表示圖像的面積(在數(shù)字圖像中為象素總數(shù))。這就是種線性直方圖均衡。這種直方圖均衡的具體實現(xiàn)如下:
(1)對于圖像{Pi,j|i=1,2,...,n;j=1,2,...,m},就灰度G,G=0,1,...255,求出直方圖H(G);
(2)由A(G+1)=A(G)+H(G)求出閾值面積A(G),G=1,2,...,255;
(3)求出變換后的灰度分度值hnew(G)=255 A(G)/A0,A0=nm;
(4)Pij=hnew(Pij)。
借助LUT,可使運算以最快速度實現(xiàn)。
考察直方圖均衡的實現(xiàn)過程可以發(fā)現(xiàn),這是一種有限區(qū)間內(nèi)的單調(diào)變換。從其頻域特性看,直方圖均衡改變了已有頻率成分的分布,使它們分布得更加均勻,但并不增加新的頻率成分。直方圖均衡對于彩色(灰度)值集中在低端的圖像,可起到較明顯的視覺改善作用。但對于那些色彩分布很不均勻、頻帶較窄,特別是整體偏亮的圖像,效果就不明顯了。
本文采用一種新的圖像增強方法,將對圖像的邊緣增強處理與均衡結(jié)合起來,并且這些運算最終可由硬件實現(xiàn)。 [!--empirenews.page--]
對于連續(xù)圖像P,其局部邊緣可由對應(yīng)空間梯度的幅值
,取其一階近似ΔPi,j=2Pi,j-Pi,j-Pi-1,j,可得圖像{Pi,j|i=1,2,...,n;j=1,2,...,m}在(i,j)的邊緣信息。
如果不計Pi,j的取值范圍,可直接對圖像{Pi,j|i=1,2,...,n;j=1,2,...,m}進(jìn)行修正:
P′i,j=Pi,j+ΔPi,j,
其中,P′i,j表示Pi,j修正后的值。顯然,圖像{Pi,j|i=1,2,...,n;j=1,2,...,m}按此規(guī)則修正后邊緣值的變化更為強烈,邊緣更為突出,可達(dá)到邊緣增強的效果。同時,由于在原圖像上疊加了梯度值,使得修正后的圖像的頻譜有一定的擴(kuò)展。但由于沒有對Pi,j的取值作約束, 這樣處理后的象素值可能會溢出,例如對于每個色彩通道為8位的圖像,處理后的數(shù)值可能會大于255或小于0。因此,通常要對其進(jìn)行歸一化處理,即:
Pnew=255%26;#215;(P′-P′min)/(P′max-P′min)。
但用硬件實現(xiàn)乘除運算可能會占用很多資源,上述公式即便以運算實現(xiàn)都是很不經(jīng)濟(jì)的。本文采用預(yù)拉伸加飽和/截止的方法,在不犧牲頻率特性的基礎(chǔ)上達(dá)到減少計算量的目的。
考察ΔPi,j與Pi,j的直方圖,分別取得它們的右峰值所對應(yīng)的橫座標(biāo),記為GΔ和G,并找到k,使得kGΔ+G=255,則修正公式變?yōu)镻′ i,j=Pi,j+kΔPi,j。其中kΔPi,j可以LUT實現(xiàn)。修正后的P′i,j可在[0,255]上進(jìn)行飽和/截止運算。
2 用CPLD實現(xiàn)實時的圖像增強
本文所采用的改進(jìn)圖像增強算法的主要成份是差分、累加以及飽和/截止。這些運算都是加減法及邏輯運算,都屬于ALU的簡單操作,適合硬件實現(xiàn)。本文采用 CPLD實現(xiàn)所提出的算法。以對具有30fps的1280 1024 RGB圖像計算ΔPi,j為例,每計算一點ΔPi,j需要4次加(減)運算,即總的需要1280 1024 5;3 30 4=471,895,200次加(減)運算。如果采用的DSP的速度是100MHz,且假定所有運算都是單周期的,則僅僅該運算就需要4.7s!所以采用 CPLD實現(xiàn)某些運算是必需的。
圖3 圖像增強算法的硬件實現(xiàn)結(jié)構(gòu)
采用CPLD實現(xiàn)運算(例如邊緣處理中涉及的求梯度運算),還需解決數(shù)據(jù)的暫存問題。本文以一片高速SRAM作為數(shù)據(jù)緩沖區(qū)。由于圖像數(shù)據(jù)的采樣輸入的頻率也很高,需要充分合理地安排好每一次操作的時序,充分利用已參與運算的數(shù)據(jù)及中間結(jié)果,減少數(shù)據(jù)進(jìn)出SRAM的次數(shù)。
2.1 基于E1-DSP的網(wǎng)絡(luò)圖像采集平臺
在分析具體實現(xiàn)方法前,先簡要介紹所采用的硬件平臺。該平臺主要用于遠(yuǎn)程圖像采集和以太網(wǎng)傳輸,其圖像通道結(jié)構(gòu)如圖1所示。
OV9620是CMOS的數(shù)字圖像傳感器,負(fù)責(zé)采集連續(xù)的數(shù)字圖像;中央處理器使用德國HYPERSTONE公司的E1系列RISC DSP,它集DSP和RISC于一身,可以加載OS,方便地實現(xiàn)任務(wù)調(diào)度、內(nèi)存管理等功能,大大提高系統(tǒng)的總體性能;CPLD的基本功能是作為E1總線接口控制模塊,本文還將用它實現(xiàn)圖像增強運算。
2.2 算法的總流程
為了實現(xiàn)實時的讀寫和運算,需要由外部電路產(chǎn)生24MHz%26;#215;4的時鐘EXCLK作為讀寫時鐘,所有時序都由CMOS時鐘和EXCLK控制,可以做到完全同步。具體流程如圖2所示。
(1)在CMOS時鐘到來時,從CMOS傳感器的數(shù)據(jù)輸出口采集Pi,j,并實現(xiàn)加法運算RESULT=Pi,j+Pi,j,同時用EXCLK的第0個時鐘向SRAM寫入P′i,j-1或P′i,m-1 (本行最后一個數(shù)據(jù),下一次操作應(yīng)換行);
(2)在EXCLK的第1個時鐘鎖存RUSELT,由SRAM讀入Pi-1,j,并做減法運算RESULT=RESULT-Pi-1,j;
(3)在EXCLK的第2個時鐘鎖存RUSELT,由SRAM讀入Pi,j-1,并做減法運算RESULT=RESULT-Pi,j-1;
(4)在EXCLK的第3個時鐘鎖存RUSELT,同時寫入Pi,j。 [!--empirenews.page--]
然后開始下一個點的運算。
2.3 硬件實現(xiàn)的邏輯結(jié)構(gòu)
用CPLD實現(xiàn)該算法所采用的邏輯結(jié)構(gòu)如圖3所示。
其中加模塊實現(xiàn)25;Pi,j運算,生成9位的運算結(jié)果交給減模塊;減模塊在EXCLK的第二和第三個時鐘分別讀入Pi-1,j和Pi,j-1進(jìn)行減法運算,并把結(jié)果存回result寄存器。由于兩次減法在時間上是錯開的,因此只需要一個減法器就夠了,節(jié)約了內(nèi)部資源。
圖3中的脈沖計數(shù)器是一個模4計數(shù)器,所有的讀寫時序和運算時序都由它控制。數(shù)據(jù)通道切換模塊控制流入result寄存器的數(shù)據(jù)流,在第一個EXCLK時鐘讓加法器的結(jié)果進(jìn)入result,其余的時間都讓減法器的結(jié)果進(jìn)入result。兩個選通邏輯模塊對EXCLK起門控作用,選通邏輯1允許第1個和第2 個時鐘通過,用來鎖存從SRAM讀入的數(shù)據(jù);選通邏輯2允許第1、2、3個時鐘通過,用來鎖存三次運算的結(jié)果。
SRAM的讀寫操作由地址發(fā)生器和讀寫控制模塊共同實現(xiàn)。由于四次讀寫操作的地址都不同,且不連續(xù),無法用普通的地址計數(shù)器實現(xiàn)。這里采用地址計數(shù)器加偏移的相對尋址法,具體結(jié)構(gòu)如圖4所示。
地址計數(shù)器中保存Pi,j的地址,它由cmos clk作為時鐘實現(xiàn)累加;偏移地址則由脈沖計數(shù)器模塊控制,分別選擇P′i,j-1、Pi-1,j、Pi,j-1和Pi,j的偏移地址;最后做減法運算得到絕對地址送到SRAM。
通過上述設(shè)計和優(yōu)化,完全可以在結(jié)構(gòu)和功能都比較簡單的CPLD上實現(xiàn)實時的圖像增強處理。
由于采用了改進(jìn)的圖像增強算法,在處理窄頻帶的圖像時收到了非常好的效果,部分測試結(jié)果如圖5所示。
與傳統(tǒng)的處理方法相比,改進(jìn)后的算法對圖像的均衡效果更為明顯一些,而且由于展寬了頻帶,圖像的細(xì)節(jié)更加豐富,圖像更加明艷和清晰。
以上算法都在CPLD上實現(xiàn),并沒有占用DSP的處理時間,因而節(jié)省了大量的運算時間。筆者做過一個實際測試,在100MHz主頻的E1 DSP上用C編程實現(xiàn)一幀640 480 RGB圖像的增強算法大約需要100ms(如果用匯編語言編程或?qū)Τ绦蜃鲀?yōu)化可使性能提高一些),而且要占用大量存儲資源。這樣的運算速度只適合靜止圖像的處理。所以,如果不做簡化處理或采用更高性能的DSP,根本無法做到實時處理。由此可見,采用硬件處理的方法可以極大地提高系統(tǒng)的總體性能。
綜上所述,在擁有DSP的嵌入式平臺上使用CPLD實現(xiàn)改進(jìn)的圖像增強算法是可行的,對于實時的圖像處理是一種高效的解決方法。