王水魚(yú),景聰莉
(西安理工大學(xué) 自動(dòng)化與信息工程學(xué)院,陜西 西安 710048)
當(dāng)前基于軟核處理器的圖像系統(tǒng)已成為研究的熱點(diǎn),使用FPGA來(lái)構(gòu)建基于片上可編程系統(tǒng)(SoPC)的圖像處理系統(tǒng),已成為一種趨勢(shì)[1]。因此,本文采用 SoPC技術(shù),在A(yíng)ltera公司單片Cyclone系列FPGA上使用IP資源復(fù)用技術(shù)集成了NiosII軟核處理器及各種輸入輸出接口,完成了對(duì)視頻圖像的采集、預(yù)處理、存儲(chǔ)和顯示幾大功能。本系統(tǒng)對(duì)圖像進(jìn)行了灰度均衡化處理,使系統(tǒng)應(yīng)用更廣。由于直方圖均衡能直接從已知的圖像中提取信息,不需要額外的參數(shù)說(shuō)明,所以在軍用、航空、商業(yè)等領(lǐng)域,特別是紅外圖像增強(qiáng)領(lǐng)域[2]有實(shí)際的意義。SoPC是Altera公司提出來(lái)的一種靈活、高效的柔性設(shè)計(jì),不需要修改硬件[3],就可方便地?cái)U(kuò)展和修改嵌入式視頻采集功能。同時(shí),由于融入眾多的IP核,保證了設(shè)計(jì)的高效、快速。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
系統(tǒng)框圖如圖1所示。系統(tǒng)上電后,Nios II軟核中的I2C控制總線(xiàn)對(duì)視頻采集模塊SAA7113H進(jìn)行配置,F(xiàn)PGA依靠像素時(shí)鐘和行、場(chǎng)信號(hào)同步采集SAA7113H芯片輸出的視頻信號(hào)中的灰度視頻數(shù)據(jù),把采集到的灰度數(shù)據(jù)進(jìn)行灰度直方圖統(tǒng)計(jì)和灰度分布均衡化處理。Nios II軟核外部加一個(gè)延遲模塊,與灰度轉(zhuǎn)換模塊輸出的信號(hào)同步之后,視頻輸入模塊開(kāi)始工作,通過(guò)存儲(chǔ)控制、DMA控制器傳輸視頻信號(hào),LCD顯示控制等模塊顯示所采集的信號(hào)。所有處理都采用流水線(xiàn)操作,大大節(jié)省了系統(tǒng)的處理時(shí)間。
本系統(tǒng)中視頻解碼器的初始化配置由Nios II軟核處理器通過(guò)I2C總線(xiàn)完成,主要包括對(duì)視頻解碼器的工作模式,輸出行、場(chǎng)同步參考信號(hào)的時(shí)序關(guān)系以及輸出數(shù)字信號(hào)的格式等進(jìn)行設(shè)置。I2C總線(xiàn)是由Philips公司開(kāi)發(fā)的一種兩線(xiàn)制總線(xiàn),由一條串行數(shù)據(jù)線(xiàn)SDA和一條串行時(shí)鐘線(xiàn)SCL組成,可以實(shí)現(xiàn)數(shù)據(jù)通信,完成芯片配置。首先,I2C總線(xiàn)控制器發(fā)出一個(gè)數(shù)據(jù)傳輸?shù)钠鹗紬l件:SCL信號(hào)保持高電平、而SDA信號(hào)由高電平變?yōu)榈碗娖綍r(shí),開(kāi)始傳輸?shù)刂窋?shù)據(jù)流。起始條件滿(mǎn)足后,發(fā)出一個(gè)8 bit的設(shè)備從地址,所有的外圍設(shè)備開(kāi)始響應(yīng)起始條件并轉(zhuǎn)換下一個(gè)8 bit寄存器地址(7 bit地址+1 bit讀寫(xiě)位),由高位到低位依次傳輸。外圍設(shè)備識(shí)別出傳輸?shù)刂泛螅诘?個(gè)時(shí)鐘脈沖 (確認(rèn)位)把數(shù)據(jù)線(xiàn)變?yōu)榈碗娖?,然后開(kāi)始將8 bit數(shù)據(jù)寫(xiě)入或者讀出寄存器(讀寫(xiě)位決定了數(shù)據(jù)的傳輸方向)。當(dāng)時(shí)鐘線(xiàn)SCLK為高電平、而數(shù)據(jù)線(xiàn)SDA由低電平變?yōu)楦唠娖綍r(shí),表示一次數(shù)據(jù)傳輸完成,停止I2C總線(xiàn),等待下一次的傳輸開(kāi)始。圖2為I2C總線(xiàn)的數(shù)據(jù)傳輸時(shí)序圖。
圖2 I2C總線(xiàn)傳輸時(shí)序圖
從 SAA7113H的 4個(gè)模擬輸入端 AI11、AI12、AI21、AI22輸入的視頻圖像信號(hào),經(jīng)A/D轉(zhuǎn)換后產(chǎn)生數(shù)字色度信號(hào)和亮度信號(hào),分別進(jìn)行亮度信號(hào)處理和色度信號(hào)處理。亮度信號(hào)處理的結(jié)果送到色度信號(hào)處理器,進(jìn)行綜合處理,產(chǎn)生YUV信號(hào),經(jīng)格式轉(zhuǎn)化后從VPO(8位)輸出。所有這些功能均是在I2C總線(xiàn)控制下完成。SAA7113的寄存器配置通過(guò)I2C總線(xiàn)來(lái)進(jìn)行,遵從I2C總線(xiàn)協(xié)議。表1是SAA7113H寄存器的“寫(xiě)”操作格式。
表1 A/D寄存器寫(xiě)入格式
其中,S為起始位,條件是SCL為高電平、SDA有下降沿、ACK-s為從動(dòng)設(shè)備應(yīng)答位,P為終止位。在初始化過(guò)程中要注意:SAA7113H的節(jié)點(diǎn)地址 (Slave Address)上電、RTS0為高電平時(shí),其 I2C寫(xiě)地址為 48H,讀地址為49H;RTS0為低電平時(shí),其I2C寫(xiě)地址為 4AH,讀地址為4BH。
通過(guò)輸入系統(tǒng)獲取的圖像信息中含有各種各樣的噪聲與畸變,例如,光照度不夠均勻會(huì)造成圖像灰度過(guò)于集中,由CCD獲得的圖像經(jīng)過(guò)A/D轉(zhuǎn)換、線(xiàn)路傳送都會(huì)產(chǎn)生噪聲污染等,不可避免地會(huì)影響系統(tǒng)圖像的清晰程度,降低圖像質(zhì)量。但通過(guò)圖像增強(qiáng)可以改善圖像質(zhì)量。直方圖均衡化算法是空域圖像增強(qiáng)技術(shù)的重要算法,是圖像壓縮、圖像分割和圖像識(shí)別等后續(xù)圖像處理的基礎(chǔ)[2,4],在圖像預(yù)處理技術(shù)中有廣泛的應(yīng)用。
2.2.1 直方圖均衡化原理
直方圖均衡是以概率論為基礎(chǔ),運(yùn)用灰度點(diǎn)運(yùn)算來(lái)實(shí)現(xiàn)直方圖變換。原始圖像的直方圖包含了豐富的圖像信息,描述了圖像的灰度級(jí)內(nèi)容,反映了圖像的灰度分布情況。直方圖統(tǒng)計(jì)及均衡化的基本思想是對(duì)在圖像中像素個(gè)數(shù)多的灰度級(jí)進(jìn)行展寬,而對(duì)像素個(gè)數(shù)少的灰度級(jí)進(jìn)行縮減,從而達(dá)到清晰圖像的目的[5]。通過(guò)點(diǎn)運(yùn)算使輸入圖像轉(zhuǎn)換為在每一灰度級(jí)上都有相同的像素點(diǎn)的數(shù)目。在圖像增強(qiáng)處理中運(yùn)用如下公式:
式中,T 表示轉(zhuǎn)換算子,f(x,y)、g(x,y)表示轉(zhuǎn)換前后某一像素的灰度值。 通常以 u表示 f(x,y),s表示 g(x,y)。 在進(jìn)行均衡化處理時(shí),增強(qiáng)函數(shù)T必須滿(mǎn)足兩個(gè)條件:(1)增強(qiáng)函數(shù)T(u)在0≤u≤L-1的范圍內(nèi)是一個(gè)單調(diào)遞增函數(shù),這個(gè)條件保證了在增強(qiáng)處理時(shí)沒(méi)有打亂原始圖像的灰度排列次序;(2)對(duì)于 0≤u≤L-1應(yīng)當(dāng)有 0≤T(u)≤L-1(L表示為灰度值的級(jí)數(shù)),它保證了變換過(guò)程中灰度值的動(dòng)態(tài)范圍的一致性。
對(duì)于數(shù)字圖像離散情況,其直方圖均衡化處理的計(jì)算步驟如下:
(1)統(tǒng)計(jì)原始圖像的直方圖:
式中,uk是歸一化的輸入圖像灰度,nk是輸入圖像中歸一化灰度等于uk的像素個(gè)數(shù),n是輸入圖像的像素總數(shù),pu(uk)表示灰度分布的概率密度函數(shù),并要求pu(uk)=1。
(2)增強(qiáng)函數(shù)為:
(3)用累積分布函數(shù)作變換函數(shù)進(jìn)行圖像灰度變換。
2.2.2 基于FPGA的算法優(yōu)化及實(shí)現(xiàn)
算法的關(guān)鍵是在FPGA中實(shí)現(xiàn)直方圖統(tǒng)計(jì)和均衡后的映射關(guān)系表,本設(shè)計(jì)采用FPGA器件提供的Block RAM來(lái)存放直方圖和均衡后映射關(guān)系表。以雙端口RAM的數(shù)組結(jié)構(gòu)為核心,把整個(gè)算法分為兩個(gè)部分執(zhí)行:(1)統(tǒng)計(jì)原始圖像的各級(jí)灰度值,并存入灰度計(jì)數(shù)表RAM中;(2)對(duì)得到的灰度值做灰度映射,把映射后的結(jié)果存入到映射表RAM中,即生成均衡映射表。根據(jù)映射表就可以知道原始圖像某一灰度級(jí)經(jīng)過(guò)變換后的灰度級(jí)。經(jīng)過(guò)這樣的處理,就可以把原始圖像中密集分布的灰度值映射到經(jīng)過(guò)直方圖均衡化后的新的灰度級(jí)上。圖3為該算法的邏輯框圖。
圖3 灰度直方圖統(tǒng)計(jì)及均衡化
考慮到FPGA的硬件特點(diǎn),在接收?qǐng)D像數(shù)據(jù)、計(jì)算此場(chǎng)的直方圖時(shí),在FPGA內(nèi)實(shí)現(xiàn)浮點(diǎn)型數(shù)據(jù)運(yùn)算相對(duì)復(fù)雜且消耗較多邏輯資源,因此在對(duì)圖像進(jìn)行直方圖統(tǒng)計(jì)時(shí)將各灰度級(jí)像素點(diǎn)的個(gè)數(shù)作為直方圖數(shù)據(jù):pu(uk)=nk,以避免使用浮點(diǎn)型數(shù)據(jù)運(yùn)算。對(duì)直方圖進(jìn)行均衡化處理,得到原灰度到均衡化后灰度映射關(guān)系表。本設(shè)計(jì)中的直方圖均衡化的算法具體的狀態(tài)轉(zhuǎn)移圖如圖4所示。其具體的轉(zhuǎn)移條件:?jiǎn)?dòng)信號(hào)有效時(shí),由st1轉(zhuǎn)向st2;當(dāng)計(jì)數(shù)器 1計(jì)數(shù)到 255時(shí),跳轉(zhuǎn)到 st3;當(dāng)計(jì)數(shù)器 1沒(méi)有計(jì)數(shù)到圖像高度減1或者計(jì)數(shù)器2沒(méi)有計(jì)數(shù)到圖像寬度減 1時(shí),跳轉(zhuǎn)到st3;當(dāng)計(jì)數(shù)器1計(jì)數(shù)到圖像高度減1且計(jì)數(shù)器2計(jì)數(shù)到圖像寬度減1時(shí),跳轉(zhuǎn)到st5;當(dāng)計(jì)數(shù)器1沒(méi)有計(jì)數(shù)到255時(shí),跳轉(zhuǎn)到st6;當(dāng)計(jì)數(shù)器計(jì)數(shù)到255時(shí),跳轉(zhuǎn)到st7;當(dāng)計(jì)數(shù)器1計(jì)數(shù)到圖像高度減1且計(jì)數(shù)器2計(jì)數(shù)到圖像寬度減1時(shí),跳轉(zhuǎn)到st1狀態(tài);當(dāng)計(jì)數(shù)器1沒(méi)有計(jì)數(shù)到圖像高度減1或者計(jì)數(shù)器2沒(méi)有計(jì)數(shù)到圖像寬度減1時(shí),跳轉(zhuǎn)到st6。在進(jìn)行計(jì)數(shù)統(tǒng)計(jì)時(shí),計(jì)數(shù)器在檢測(cè)得到一個(gè)像素點(diǎn)的灰度之后,不僅要相應(yīng)地將計(jì)數(shù)器加1,而且對(duì)應(yīng)灰度值大于當(dāng)前灰度值的所有計(jì)數(shù)器都加1,這樣就能同時(shí)完成原始圖像各像素灰度值的統(tǒng)計(jì)和累積,減少了統(tǒng)計(jì)時(shí)間。
圖4 直方圖均衡硬件實(shí)現(xiàn)的狀態(tài)轉(zhuǎn)移圖
因?yàn)樵诨叶染馓幚磉^(guò)程中是以場(chǎng)為單位進(jìn)行的,在灰度均衡化處理完之后,要將場(chǎng)合并為幀。其操作是由Nios II軟核中的SDRAM控制器來(lái)完成奇偶場(chǎng)的合并?;叶染饣姆抡娼Y(jié)果圖如圖5所示。
視頻輸入模塊的結(jié)構(gòu)示意圖如圖6所示。經(jīng)過(guò)灰度變換YcrCb4:2:2格式視頻信號(hào)在像素時(shí)鐘控制下輸入FIFO緩沖器。彩條測(cè)試信號(hào)模塊在系統(tǒng)測(cè)試時(shí),給出一個(gè)非常簡(jiǎn)單的測(cè)試信號(hào),可以模擬為信號(hào)源,以方便系統(tǒng)的調(diào)試。色度轉(zhuǎn)換模塊將YCrCb格式轉(zhuǎn)換為RGB格式,并把其值寫(xiě)到FIFO緩沖器中。Avalon DMA把圖像數(shù)據(jù)寫(xiě)到系統(tǒng)存儲(chǔ)器(SDRAM)中,當(dāng)完成一幀圖像需寫(xiě)操作時(shí),給Nios II處理器一個(gè)中斷信號(hào)。
圖5 灰度均衡仿真結(jié)果圖
圖6 視頻輸入模塊結(jié)構(gòu)示意圖
在色度空間的轉(zhuǎn)換模塊中,采用FPGA片內(nèi)的資源,利用MegaCore構(gòu)造一個(gè)乘加器件完成運(yùn)算。根據(jù)轉(zhuǎn)換矩陣中YUV的比例關(guān)系,將信號(hào)放大一定的倍數(shù),使其接近一個(gè)整數(shù)值。YUV信號(hào)的最大值為255,但是10 bit DATA可以接收1 023亮度等級(jí)的調(diào)節(jié),所以這個(gè)比例可以放大4倍左右(如果超出1 023就按1 023的等級(jí)計(jì)算)。根據(jù)反復(fù)實(shí)驗(yàn)最后得出,按照如下的運(yùn)算規(guī)則最接近轉(zhuǎn)換矩陣:
用SoPC Builder可以進(jìn)行系統(tǒng)模塊硬件設(shè)計(jì)和底層軟件生成。進(jìn)行硬件模塊設(shè)計(jì)時(shí),SoPC Builder提供了圖形化配置界面,備有一些常用外設(shè)的IP模塊,如SDRAM、Flash RAM、UART、Interval timer、Parallel I/O 等 。Nios II軟核所含的組件如圖7所示。
圖7 SoPC中自定義組件
在SoPC Builder自帶的IP核庫(kù)中并沒(méi)有I2C配置模塊、視頻輸入模塊和LCD controller模塊的IP核,這些模塊是根據(jù)寄存器特點(diǎn)以及功能要求自行設(shè)計(jì)的,并以IP核的形式通過(guò)Avalon總線(xiàn)連接到SoPC系統(tǒng)上。在建立了基于Nios II處理器的SoPC系統(tǒng)后,需要進(jìn)行一些系統(tǒng)設(shè)置才能生成最終的Nios II系統(tǒng)。因此,系統(tǒng)配置除了對(duì)外設(shè)設(shè)置外,還包括啟動(dòng)程序、中斷向量表、系統(tǒng)啟動(dòng)地址等的設(shè)置。
本文介紹了基于SoPC技術(shù)的視頻采集方案以及對(duì)視頻信號(hào)進(jìn)行灰度直方圖統(tǒng)計(jì)及灰度均衡化的實(shí)現(xiàn)。該方案結(jié)合SoPC技術(shù)在軟硬件可裁剪、可升級(jí)、可擴(kuò)充等優(yōu)點(diǎn),大大縮短了系統(tǒng)整體設(shè)計(jì)周期,有很好的應(yīng)用前景和科研價(jià)值。
[1]王剛,張瀲.基于FPGA的SoPC嵌入式系統(tǒng)設(shè)計(jì)與典型實(shí)例[M].北京:電子工業(yè)出版社,2009.
[2]劉延,任永杰,李群偉,等.基于 FPGA的直方圖均衡實(shí)時(shí)并行算法及新架構(gòu)實(shí)現(xiàn)[J].紅外技術(shù),2010(3).
[3]李蘭英.NiosII嵌入式軟核SOPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[4]唐崇武,李會(huì)方,何俊婷,等.改進(jìn)的直方圖均衡圖像增強(qiáng)算法及實(shí)現(xiàn)[J].信息安全與通信保密,2009(12).
[5]魯恒.基于FPGA的實(shí)時(shí)圖像直方圖均衡增強(qiáng)設(shè)計(jì)[J].電子應(yīng)用技術(shù),2006,32(11).