《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 視頻圖像灰度信號(hào)直方圖均衡的FPGA實(shí)現(xiàn)

視頻圖像灰度信號(hào)直方圖均衡的FPGA實(shí)現(xiàn)

2008-03-27
作者:魯恒

  摘 要: 介紹了視頻圖像" title="視頻圖像">視頻圖像灰度信號(hào)直方圖均衡" title="直方圖均衡">直方圖均衡實(shí)時(shí)處理" title="實(shí)時(shí)處理">實(shí)時(shí)處理的FPGA實(shí)現(xiàn),,重點(diǎn)介紹了灰度信號(hào)直方圖統(tǒng)計(jì)和SDRAM控制器實(shí)現(xiàn)的方案,。
  關(guān)鍵詞: 直方圖均衡 直方圖統(tǒng)計(jì) FPGA SDRAM控制器


  直方圖均衡作為一種基礎(chǔ)的圖像處理方法在很多領(lǐng)域得到應(yīng)用,但大多是通過(guò)DSP或者CPU編程實(shí)現(xiàn),,其優(yōu)點(diǎn)是靈活性比較高,,調(diào)試方便,最大的缺點(diǎn)是很難做到實(shí)時(shí)或者準(zhǔn)實(shí)時(shí)處理,,這在某些領(lǐng)域是不可接受的,。而使用FPGA實(shí)現(xiàn)可以很好地解決實(shí)時(shí)處理的難題,而且目前的FPGA資源容量已經(jīng)很豐富,,片內(nèi)的SRAM/PLL/邏輯資源已經(jīng)足以應(yīng)對(duì)一般圖像處理算法的需要,,同時(shí)隨著價(jià)格的不斷下降,客觀上使得FPGA成為圖像處理算法實(shí)現(xiàn)不錯(cuò)的選擇,。
  本文主要介紹在FPGA上實(shí)現(xiàn)直方圖均衡算法的總體結(jié)構(gòu)和最重要的兩個(gè)子模塊的實(shí)現(xiàn)細(xì)節(jié),,以及最終的實(shí)現(xiàn)結(jié)果。
1 直方圖均衡的理論基礎(chǔ)
  原始圖像灰度值r歸一化在0~1之間,,p(r)為原始圖像灰度分布的概率密度函數(shù),。直方圖均衡化處理實(shí)際上就是尋找一個(gè)灰度變換函數(shù)T,使得變化后的灰度值s=T(r), 其中,,s歸一化為0~1,即建立r與s之間的映射關(guān)系,,要求處理后圖像灰度分布的概率密度函數(shù)p(s)=1,期望所有灰度級(jí)出現(xiàn)概率相同,。
  對(duì)于數(shù)字圖像離散情況,,其直方圖均衡化處理的計(jì)算步驟如下:
  (1)統(tǒng)計(jì)原始圖像的直方圖
  
  式中,,rk是歸一化的輸入圖像灰度;nk是輸入圖像中歸一化灰度等于rk的像素個(gè)數(shù),;n是輸入圖像的像素總數(shù),。
  (2)計(jì)算直方圖累積分布曲線
  
  (3)用累積分布函數(shù)作變換函數(shù)進(jìn)行圖像灰度變換
  根據(jù)計(jì)算得到的累積分布函數(shù),建立輸入圖像與輸出圖像灰度之間的對(duì)應(yīng)關(guān)系,,最后要將變換后的灰度恢復(fù)成原先范圍。
2 FPGA實(shí)現(xiàn)的總體結(jié)構(gòu)
  從上面對(duì)直方圖均衡算法的描述可知,,在進(jìn)行直方圖均衡以前,,首先必須對(duì)圖像灰度進(jìn)行統(tǒng)計(jì),然后再計(jì)算輸出,。而要統(tǒng)計(jì)一幅圖像的全局灰度信息,,就不得不把整幅圖像先寫入緩存。雖然FPGA內(nèi)部的SRAM資源豐富,,但是仍然無(wú)法滿足整幅圖像存儲(chǔ)的需要,。因此,需要以SDRAM作為圖像緩存,,存儲(chǔ)前后兩場(chǎng)視頻圖像,,然后再計(jì)算輸出。SDRAM的容量,、速度都能滿足直方圖均衡算法的要求,,唯一的缺點(diǎn)是必須有相應(yīng)的SDRAM控制器控制SDRAM的讀寫和刷新操作。下面簡(jiǎn)要介紹總體實(shí)現(xiàn)的方案,,其實(shí)現(xiàn)框圖如圖1所示,。


  從圖1中可以看出,在輸入端,,模擬復(fù)合視頻數(shù)據(jù)經(jīng)過(guò)視頻圖像解碼進(jìn)入FPGA,,在FPGA里先對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,產(chǎn)生內(nèi)部使用的行同步信號(hào)/場(chǎng)同步信號(hào)/數(shù)據(jù)有效信號(hào)和16bit" title="16bit">16bit YUV4:2:2格式的視頻信號(hào),。然后,,灰度信息進(jìn)入灰度直方圖統(tǒng)計(jì)模塊對(duì)當(dāng)前灰度信息出現(xiàn)的頻率加以統(tǒng)計(jì),將統(tǒng)計(jì)信息以乒乓的方式存入SRAM,與此同時(shí)所有視頻數(shù)據(jù)通過(guò)“寫”控制模塊和SDRAM控制器存入SDRAM,;在輸出端,,在“讀”控制單元" title="控制單元">控制單元的控制下通過(guò)SDRAM控制模塊從SDRAM讀出上一場(chǎng)的數(shù)據(jù)進(jìn)入灰度變換模塊,根據(jù)存儲(chǔ)的上一場(chǎng)的灰度統(tǒng)計(jì)信息,,對(duì)數(shù)據(jù)進(jìn)行灰度變換,。這樣就完成了完整的灰度直方圖均衡變換。
  如果需要在顯示設(shè)備(如PC顯示器)上顯示,,還必須要有時(shí)序產(chǎn)生/圖像數(shù)據(jù)格式變換等模塊,。另外,,由于需要對(duì)某些內(nèi)部參數(shù)進(jìn)行調(diào)整(如SDRAM的Latency等),必須有一個(gè)控制接口和外部相連,,在這里使用了一個(gè)I2C協(xié)議接口,。
在所有模塊中最主要的實(shí)現(xiàn)單元主要有兩大部分,一個(gè)是直方圖統(tǒng)計(jì)和灰度變換模塊,,另一個(gè)是SDRAM控制器和讀寫控制單元,。下面將詳細(xì)介紹這兩部分。
3 直方圖統(tǒng)計(jì)的實(shí)現(xiàn)結(jié)構(gòu)
  直方圖統(tǒng)計(jì)是通過(guò)FPGA內(nèi)部?jī)蓧K雙端口SRAM的乒乓操作實(shí)現(xiàn)的,。其中每塊SRAM的地址反映了灰度值的大小,,而SRAM每個(gè)單元的數(shù)據(jù)寬度必須相應(yīng)于每場(chǎng)圖像的像素?cái)?shù)量。例如,,對(duì)于我國(guó)PAL制的電視圖像來(lái)說(shuō),,根據(jù)ITU-R BT.601/656數(shù)字視頻標(biāo)準(zhǔn)規(guī)定每一場(chǎng)數(shù)字化后的視頻圖像,它的有效數(shù)據(jù)是每行720個(gè)有效點(diǎn),,每場(chǎng)288個(gè)有效行,,每場(chǎng)總共207360個(gè)有效像素點(diǎn),平均每個(gè)點(diǎn)16bit的數(shù)據(jù)量,,其中有8bit灰度數(shù)據(jù),。所以在選取SRAM的大小時(shí),應(yīng)該選擇容量為256(2的8次方),、數(shù)據(jù)寬度為18位(207 360大于2的17次方)的SRAM,。但是為了擴(kuò)展的方便,實(shí)際使用中使用了容量為256,、數(shù)據(jù)寬度為22位的SRAM,,這樣可以對(duì)數(shù)據(jù)量更大的圖像加以處理。
  每當(dāng)一個(gè)新的圖像數(shù)據(jù)進(jìn)入統(tǒng)計(jì)模塊,,就將SRAM內(nèi)相應(yīng)地址的統(tǒng)計(jì)數(shù)據(jù)讀出,,累加后再存入該地址。由于前后數(shù)據(jù)可能是一樣的,,會(huì)造成對(duì)同一個(gè)SRAM地址同時(shí)讀寫而引起錯(cuò)誤,。這就需要一個(gè)模塊對(duì)整個(gè)過(guò)程加以控制?;镜乃悸肥牵簩?duì)前后數(shù)據(jù)進(jìn)行比較,,若前后數(shù)據(jù)相等就將計(jì)數(shù)器累加,直到發(fā)現(xiàn)數(shù)據(jù)不等才將統(tǒng)計(jì)數(shù)據(jù)寫入SRAM,,這樣就從根本上避免了讀寫同一個(gè)地址的可能性,。直方圖統(tǒng)計(jì)狀態(tài)機(jī)實(shí)現(xiàn)框圖如圖2所示。


  由于使用了乒乓模式(一塊SRAM用于當(dāng)前場(chǎng)的統(tǒng)計(jì),,另一塊用于前一場(chǎng)灰度均衡的計(jì)算),,狀態(tài)機(jī)在上電復(fù)位后首先需要將用于統(tǒng)計(jì)的SRAM清空,,這可以利用視頻的場(chǎng)消隱時(shí)間加以處理(相應(yīng)的狀態(tài)機(jī)狀態(tài)是CLEAR SRAM狀態(tài)),然后等待有效數(shù)據(jù)進(jìn)入(對(duì)應(yīng)于STBY狀態(tài)),,一旦有效灰度數(shù)據(jù)進(jìn)入,,狀態(tài)機(jī)就進(jìn)入統(tǒng)計(jì)狀態(tài)0(CALCULATION HISTOGRAM STEP0)。此時(shí),,首先讀出SRAM相應(yīng)于該灰度值的數(shù)據(jù),,同時(shí)將數(shù)據(jù)延遲并觀察前后數(shù)據(jù)是否相同,如相同則繼續(xù)停留在該狀態(tài),,將計(jì)數(shù)器加1,;否則進(jìn)入統(tǒng)計(jì)狀態(tài)1(CALCULATION HISTOGRAM STEP1)。進(jìn)入狀態(tài)1后,,計(jì)算上一個(gè)灰度值的統(tǒng)計(jì)數(shù)據(jù)(將從SRAM中讀出的值加上計(jì)數(shù)器的值再加1)存入SRAM,同時(shí)還要讀出SRAM里相應(yīng)于當(dāng)前灰度值的數(shù)據(jù),。此后的工作與狀態(tài)0相似,。以此類推,狀態(tài)不斷在狀態(tài)0和狀態(tài)1之間切換,,直到有效數(shù)據(jù)結(jié)束后進(jìn)入統(tǒng)計(jì)狀態(tài)2(CALCULATION HISTOGRAM STEP2),,狀態(tài)2 的作用是將這一行的最后一個(gè)灰度數(shù)據(jù)的統(tǒng)計(jì)信息寫入SRAM。隨后回到STBY狀態(tài),,等待下一行數(shù)據(jù),。當(dāng)所有有效行都統(tǒng)計(jì)完后,進(jìn)入狀態(tài)機(jī)的統(tǒng)計(jì)狀態(tài)3(CALCULATION HISTOGRAM STEP3),,重新將灰度統(tǒng)計(jì)數(shù)據(jù)累計(jì)后存入SRAM,。
4 SDRAM 控制器的實(shí)現(xiàn)結(jié)構(gòu)
  輸入輸出視頻圖像的速度(13.5MHz)遠(yuǎn)低于SDRAM的最高速度(143MHz),假如以單個(gè)數(shù)據(jù)對(duì)SDRAM讀寫(Single Write/Single Read),根本無(wú)法發(fā)揮SDRAM高速的優(yōu)勢(shì),,所以必須使用SDRAM的突發(fā)模式(BURST MODE),即一次讀出或者寫入多個(gè)數(shù)據(jù),。以美光公司(MICRON)MT48LC1M16A1S SDRAM為例,它支持1,、2,、4、8個(gè)字或者整頁(yè)(256個(gè)字)的讀寫,。由于屬于兩個(gè)時(shí)鐘域,,所以必須對(duì)寫入或者讀出SDRAM的數(shù)據(jù)緩存。在這里,,讀寫模塊分別使用兩個(gè)深度為64,、寬度為16bit的雙口SRAM以乒乓的方式加以實(shí)現(xiàn)。一次突發(fā)模式讀寫的數(shù)據(jù)量都是64個(gè)字,,因此選擇深度為64的SRAM是一種折衷的辦法,,數(shù)據(jù)過(guò)少無(wú)法發(fā)揮突發(fā)模式的優(yōu)勢(shì),,數(shù)據(jù)過(guò)大則需要更多的SRAM作為緩存,使開銷過(guò)高,。實(shí)踐證明一次讀寫64個(gè)數(shù)據(jù)比較合適,。
  由于SDRAM結(jié)構(gòu)的特殊性,它的讀寫刷新操作需要滿足一定的時(shí)序要求,,所以需要專門的控制器來(lái)維護(hù)對(duì)SDRAM的操作,。圖3是Hynix Electronics公司HY5DV641622AT 的SDRAM的狀態(tài)機(jī)框圖,該框圖包含SDRAM上電時(shí)序,、模式寄存器的設(shè)置,、讀寫控制、預(yù)充電和定時(shí)刷新等多個(gè)環(huán)節(jié),??刂破鞯木唧w實(shí)現(xiàn)可以參考Xillinx或者Altera公司相關(guān)文檔和各家DRAM廠商的資料。


  需要說(shuō)明的是對(duì)SDRAM的地址劃分問(wèn)題,。由于采用了乒乓模式,,SDRAM也自然被劃分為兩個(gè)部分,一部分用于當(dāng)前場(chǎng)的存儲(chǔ),,另一部分用于前一場(chǎng)的讀取,,也就是說(shuō)在存儲(chǔ)/統(tǒng)計(jì)當(dāng)前場(chǎng)的同時(shí),將前一場(chǎng)讀出并且計(jì)算灰度后輸出,。至于地址的具體劃分則要考慮到SDRAM容量大小和輸入視頻大小,。以MT48LC1M16A1S SDRAM為例,該SDRAM 的結(jié)構(gòu)是512K×16×2,,每塊SDRAM被分為兩個(gè)BANK,,每個(gè)BANK有2 048行,每行256個(gè)16bit的字,,總計(jì)1M字,。而PAL制電視以ITU656數(shù)字化后的單場(chǎng)數(shù)據(jù)大約是202K字,NTSC大約是170K字,,480P(YUV4:2:2格式)每幀大約是337K字,,所以可以考慮將SDRAM以BANK劃分,每個(gè)BANK存儲(chǔ)一場(chǎng)/一幀,。
  另外一個(gè)問(wèn)題牽涉到邏輯地址到物理地址的映射問(wèn)題,,即由于PAL制每行有720個(gè)點(diǎn),而SDRAM每行只有256個(gè)存儲(chǔ)單元,,所以一行圖像需要占據(jù)稍小于三行的SDRAM空間,,三行中的最后一行的最后一點(diǎn)空間不加利用。SDRAM讀寫控制單元的地址產(chǎn)生模塊需要注意這一點(diǎn),。SDRAM的具體劃分圖如圖4所示,。


5 實(shí)驗(yàn)結(jié)果與說(shuō)明
  實(shí)驗(yàn)結(jié)果如圖5,、圖6所示。從實(shí)驗(yàn)結(jié)果可以看出,,直方圖均衡后的圖像對(duì)比度得到了明顯的提高,。但是,直方圖均衡算法的缺點(diǎn)同樣明顯,,噪聲對(duì)直方圖均衡的影響非常大,。從對(duì)原圖的處理結(jié)果就可以看到,原圖的背景噪聲并不明顯,,但是經(jīng)過(guò)直方圖均衡后變得非常突出,。這就需要對(duì)算法進(jìn)行改進(jìn),例如對(duì)局部圖像進(jìn)行統(tǒng)計(jì),,然后和全局圖像統(tǒng)計(jì)數(shù)據(jù)進(jìn)行比較,,最后決定是否對(duì)該區(qū)域進(jìn)行均衡。但這超出了本文的論述范圍,。

?


參考文獻(xiàn)
1 Gonzalez R C. Digital image processing. 北京:電子工業(yè)出版社, 2003
2 XAPP 134(V3.4). Synthesizable high-performance SDRAM controllers. Xilinx公司,, 2005
3 SDR SDRAM controller white paper. Altera公司,2005
4 MT48LC1M16A1S data Sheet.Micron 公司,,1999
5 HY5DV641622 data sheet. Hynix Electronic公司,,2002

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。