陸申陽,冉 峰,郭愛英,沈華明
(1.上海大學微電子研究與開發中心,上海200444;2.上海大學新型顯示技術及應用集成教育部重點實驗室,上海200444;3.上海大學機電工程與自動化學院,上海200444)
低照度夜視系統主要用于夜視成像、汽車駕駛輔助、安防監控等領域,是一種非常重要的圖像增強技術,在軍事和民用方面都被廣泛應用.但是,在低照度環境中理想的光照條件和曝光度往往難以得到滿足,攝像頭捕獲到的視頻圖像存在亮度低、噪聲大、對比度低等缺點,直接影響到后續的圖像處理質量.針對低照度視頻圖像的處理需求,圖像增強技術應運而生.傳統的圖像增強技術,如直方圖均衡化、伽馬校正、色調映射等,往往存在圖像曝光過度、暗區細節丟失、整體對比度低等缺點[1-3].目前由于廣泛使用的經過優化的直方圖均衡化技術、暗通道算法、神經網絡算法、Rtinex算法等過于復雜,計算量過大,故不宜于硬件實現.
為了克服上述圖像增強技術的缺點,學者們主要展開了如下2個方向的研究.
(1)改進圖像增強算法[4-9].例如,文獻[4]的動態直方圖均衡(dynamic histogram equalization,DHE)算法是根據極大值或極小值割直方圖后再分別均衡.此算法自適應性強,能有效拉伸集中在低灰度區域的灰度級,但該算法在尋找極小值時容易出錯.文獻[9]中的反距離加權插值自適應圖像直方圖均衡化算法(inverse distance weighted interpolation adaptive histogram equalization,IDWIAHE),該算法在非重疊子塊直方圖均衡化方法的基礎上,綜合運用每個像素點周邊的灰度信息,消除不同子塊之間的塊效應,較好地保存了圖像的細節信息.但是該算法結構非常復雜,難以在硬件上實現.
(2)基于硬件平臺設計和優化硬件電路[10-15].文獻[10]針對640×480大小的圖像在現場可編程邏輯門陣列(field programmable gate array,FPGA)上實現了直方圖均衡化電路設計,得到了畫面清晰、細節完整的圖像,但是由于設計中圖像尺寸固定,故難以推廣應用.文獻[11]在FPGA上以譯碼器和計數器為基礎實現了一個直方圖均衡化電路,從而提高了處理速度.但是,由于每個灰度級都需要一個計數器,故當處理高灰度級圖像時計數器的個數將倍增;此外,該算法在低灰度區域存在大量的灰度合并現象,導致對比度等級無法區分,畫面細節丟失嚴重.文獻[12]也在FPGA上設計實現了直方圖均衡化電路,該方法采用乒乓操作,可實現高速連續的圖像處理,但是該算法未考慮數字顯示與模擬顯示的不同,在硬件平臺上處理得到的圖像嚴重失真,畫面模糊,圖像細節全部丟失.
針對上述算法性能和硬件實現無法平衡的問題,本工作提出了一種用于自適應直方圖均衡化的硬件加速器(hardware accelerator,HA)的設計方法.首先,針對過度增強、噪聲放大、暗區細節丟失、自適應算法復雜等問題對均衡算法做了基于自適應的對比度改進;其次,采用乒乓和對比度策略,將改進型自適應直方圖均衡化算法進行基于FPGA的硬件加速器設計;最后,基于實驗室和真實場景的實驗結果表明,本硬件加速器能夠平衡算法性能和硬件實現之間的矛盾,達到了適度提升亮度、對比度,保留圖像細節的效果.
灰度級直方圖描述的是一幅圖像的灰度分布情況,即圖像中每一灰度與該灰度級出現的頻數之間的統計關系.經直方圖均衡化處理后,圖像亮度和對比度得到明顯提高,但是增強過程中容易產生過度增強和灰度合并現象,導致噪聲放大、圖像細節丟失等問題.為了克服傳統直方圖算法的不足,本工作提出了改進的自適應直方圖均衡算法.
直方圖灰度級范圍為[0,L?1],其中8位灰度圖像L為256.首先根據式(1)計算出每個灰度級對應的像素數量H(rk),其中k=0,1,···,L?1;rk為第K個灰度級;nk為一幀圖像中第k個灰度級對應的像素數量,通過累加計算得到

同時得到每個灰度級的概率密度函數

式中:N為圖像的總像素數.
由式(2)的統計結果計算圖像灰度級的累積概率密度函數(cumulate density function,CDF)

根據式(3)可以推導出CDF(rL?1)為1,可見圖像均衡前后總灰度值不改變.用映射函數S(rk)來描述輸入像素與輸出像素的關系,

式中:rk為輸入的第k級灰度值,S(rk)為輸出的第k級灰度值,rL?1為最大灰度值.
分析式(3)可知,當ni較大時,會導致概率密度函數顯著增大,進而導致式(4)中對應輸出值及后續輸出值普遍偏大,產生過增強、噪聲放大現象.當ni的值較小時,會導致概率密度函數只發生微量變化,進而導致式(4)中多個輸入rk只對應同一個輸出值S,即多個輸入灰度值映射出同一個輸出灰度值,產生灰度合并現象,導致圖像細節丟失、畫面模糊.式(3)中的ni來源于式(1)中的nk,對于一幅低照度圖像大部分像素點集中在低灰度區域,高灰度區域的像素點個數較少,即低灰度區域nk值較大,高灰度區域nk值較小(見圖1(a)),橫坐標為灰度級,縱坐標為對應灰度級的像素點個數.因此HE算法會產生大量的灰度合并現象和過增強現象,主要表現為圖像模糊不清、細節丟失、偏亮等.
針對HE算法的上述缺點,本工作引入了閾值T和增量V來調整每個灰度級對應的像素點個數nk,實現自適應地限制對比度拉伸程度,抑制灰度合并現象,構建出一種新的改進型自適應直方圖均衡化(interpolation adaptive histogram equalization,IAHE)算法.閾值T的引入減少了低灰度區域的像素點個數,而增量V的引入增加了高灰度區域的像素點個數,使得像素點分布更加均勻.此外,在檢測峰值前剔除了直方圖中的零分量,保證了閾值T計算的科學性和準確性.增量V的引入確保了直方圖總面積不變,即在計算概率密度函數時分母N仍然是圖像總像素個數,在算法性能提升的同時其計算復雜度未增加.具體改進方法如下.
IAHE算法將HE衡算法中的式(1)替換為

式中:HF(j)為原直方圖中的非零分量.

式中:k=0,1,···,L ? 1;j=0,1,···,l,l為直方圖中非零分量個數.
閾值T由剔除零分量之后的直方圖的峰值確定,其表達式為

式中:HF(m)為檢測到的局部極大值;M為極大值的個數.
增量V由大于閾值T的直方圖分量確定,其表達式為

式(1)替換為式(5)就是對原始直方圖自適應調整,其過程如圖1所示.

圖1 直方圖自適應調整過程Fig.1 Adaptive adjustment process of histogram
適用于IAHE算法的硬件加速器的實現能提升圖像增強的處理速度和增強效果.針對HE算法的硬件實現通常包括3個步驟:統計、累加和映射.這種設計結構精煉、算法簡單,在資源面積上占有一定優勢,但是過增強和灰度合并現象嚴重,進而會導致圖像增強效果不理想.本工作從增強效果和硬件實現的雙需求出發,提出了一種自適應IAHE算法的硬件加速器設計結構,其總體結構如圖2所示.
該結構的核心可以分為5個主要部分:控制模塊(control module,CM)、緩存控制模塊(ache control module,ACM)、統計控制模塊(statistical control module,SCM)、自適應調整模塊(adaptive adjustment module,AAM)和映射控制模塊(mapping control module,MCM).
(1)控制模塊主要負責算法的條件判斷和信號控制,如累加計算條件的判斷信號、使能信號、起始與結束信號的控制等,該模塊利用有限狀態機(finite-state machine,FSM)實現.
(2)緩存控制模塊主要負責存儲原始圖像信息,用于映射輸入,主要利用一塊RAM和相應的讀寫時序控制模塊實現.
(3)統計控制模塊主要負責原始圖像的直方圖統計,具體是利用一塊RAM和相應的累加計算、讀寫時序模塊實現.
(4)自適應調整模塊負責直方圖的自適應調整,主要包括閾值T計算模塊(T calculation module,TCM)、增量V計算模塊(V calculation module,VCM)、直方圖調整模塊(histogram adjustment module,HAM)和均衡化模塊(equalization module,EM)這4個子模塊,其中直方圖調整模塊利用了乘法器、除法器、RAM和相應的讀寫時序控制模塊實現.
(5)映射控制模塊負責增強后的圖像映射輸出,主要利用RAM和查找表來實現.其余模塊負責時鐘信號的分頻、數據的傳輸與顯示等.如開發板的系統時鐘頻率為27 M,顯示器所用掃描時鐘頻率為74.25 M,且直方圖統計模塊使用了倍頻操作,因此鎖相環(phase locoed loop,PLL)模塊產生的2個時鐘信號clk1,clk2分別為74.25,148.50 M.

圖2 IAHE的硬件加速器設計結構Fig.2 Hardware accelerator design structure of IAHE
控制模塊主要用于控制各個模塊的工作狀態,產生控制各模塊的信號并以并行的方式傳輸給各個模塊.圖3為控制模塊的FSM實現.
首先,在圖像增強過程開始之前將初始值設置為0,初始狀態設為S _wait的空閑等待狀態.當開始圖像數據輸入時,增強過程開始,此時完成圖像數據的緩存以及統計;之后,根據統計出的原始直方圖計算出調整參數閾值T和增量V,反饋到原始直方圖上對其進行自適應調整,并且完成均衡化操作得到映射查找表.最后用緩存的圖像數據通過查找表將輸出結果映射并顯示出來.

圖3 控制模塊的FSM實現Fig.3 FSM implementation of the control module

圖4 緩存控制模塊結構Fig.4 Structure of cache control module

圖5 統計控制模塊結構Fig.5 Structure of statistical control module
在進行緩存控制和統計控制模塊設計時,充分利用FPGA強大的并行性能,緩存和統計操作可以同時進行;另外,緩存與統計過程采用乒乓操作,可以將速度降低一半.緩存控制模塊主要用于初始階段原始圖像數據的緩存和最終階段原始圖像數據的輸出,該模塊由一個RAM和相應的讀寫模塊完成 (見圖4).RAM1中數據地址位為18 bit,存儲為512×512(像素)的圖像,位寬為8 bit,存儲256級灰度值.圖像數據din[7:0]作為RAM1的輸入數據,數據伴隨信號dva控制產生讀寫控制信號和寫地址,完成緩存后等待映射控制信號.統計控制模塊主要用于初始階段在圖像數據到來時,對圖像數據進行直方圖統計,該模塊主要利用一個累加計算模塊、一個RAM和相應的讀寫模塊完成(見圖5).RAM2中數據地址位為8 bit,對應256級灰度,將灰度值相同的像素點累加儲存在相應的地址上,數據位寬為19 bit.圖像數據din[7:0]作為RAM2地址尋找相同灰度級數據位置,數據伴隨信號dva控制產生讀寫控制信號,當完成統計后將統計數據輸出,并且產生控制信號ctl _1.
自適應調整模塊包括提取非零分量、檢測峰值、計算T和V、調整直方圖和均衡化運算等子模塊.自適應調整模塊主要負責直方圖的自適應調整和均衡化運算,其結構如圖6所示.
首先,輸入的原始直方圖數據存入RAM3中,同時進行提取非零分量、檢測峰值和計算閾值T操作.之后完成閾值T的計算后輸出RAM3中的數據并計算增量V,再利用T和V調整直方圖.最后,將上一步得到的直方圖通過乘法器和相應的運算得到映射數據,存入RAM4中作為查找表.該過程中RAM3地址位寬為8 bit,用于存儲直方圖數據;RAM4地址位寬為8 bit,用于存儲均衡化后得到的映射數據作為查找表.完成以上操作后進入等待狀態,其中提取非零分量、檢測峰值和計算閾值T同時進行.當完成提取非零分量后,檢測峰值和計算非零閾值T也隨之完成,所耗時間約為256個時鐘周期.計算增量V時需要對每一個灰度級進行操作,也需要256個時鐘周期.T,V調整、累加和均衡所耗時間同樣約為256個時鐘周期.

圖6 自適應調整模塊結構Fig.6 Structure of adaptive adjustment module
映射控制模塊主要用于產生RAM1的讀地址和讀控制信號.將原始圖像數據讀出,作為RAM4的讀地址,查詢相應灰度級對應的灰度值,從而映射出均衡化后的圖像數據.該模塊內部結構如圖7所示.
基于改進型自適應直方圖均衡算法的硬件加速器驗證分為算法功能驗證和硬件加速器性能驗證2個部分.
(1)在PC機上進行自適應算法的能和性能驗證.PC機的配置參數為Intel(R)Core(TM)i7-6500@2.5 GHz與4 G內存.仿真軟件為Matlab R2016a.
(2)在FPGA開發板上對硬件加速器的性能驗證.開發板為AV150 FPGA,核心處理MCU為XC6SLX150.開發軟件為ISE14.7,ModelSim SE-64 10.1c.
為了驗證算法是否能限制圖像對比度拉伸、減弱圖像增強程度、保留暗部圖像細節等功能及性能,使用OV5640攝像頭在一天中的6,9,12,15,18,21點等不同光照條件下,對學校以及學校周邊的不同環境采集了1 200幅圖像,并做了相關系列實驗.圖8為其中一組低照度圖像的實驗結果,該圖是夜間居民樓旁的白色汽車圖像,圖像大小為512×512(像素).圖8(a)整體偏暗,車窗及墻均不清晰;(b)為采用HE算法處理后的圖像,圖像整體偏白,成功地提高了圖像的對比度,但是圖像過亮存在“過增強”現象;(c)為采用本算法處理后的圖像,對比度得到適度拉伸,亮度適中,圖像細節保留完整.

圖7 映射控制模塊結構Fig.7 Structure of map control module

圖8不同算法的增強效果Fig.8 Enhancement results of different algorithms
圖9 是該組圖像對應的直方圖,橫坐標為灰度級,縱坐標為像素點個數.表1統計了不同圖像增強算法處理后圖像及直方圖的特性參數,包括灰度級個數、平均灰度、標準差、過暗區域(灰度值<50)像素點個數占比、過亮區域(灰度值>200)像素點個數占比以及圖像的信息熵.
從表1中可以看出,經HE算法處理后的圖像有效灰度級從147降低到了68,說明發生了大量的灰度合并現象,導致圖像模糊、細節丟失;而IAHE算法的灰度級為97,有效抑制了這一現象.經HE算法處理后的圖像平均灰度由21提升到了129,導致圖像過亮;而IAHE算法僅提升到81,亮度適中.在標準差一欄中,IAHE算法低于HE算法,有效限制了對比度拉伸,得到的圖像較為柔和.研究表1中圖像過暗區域和過亮區域后可知,原始圖像大部分像素點集中在低灰度,為夜間的低照度圖像,大部分背景顏色為黑色,而經HE算法處理后的圖像過暗區域占20.44%,過亮區域占22.25%,圖像明顯偏亮;而本算法的圖像暗區占38.65%,亮區占0.57%,得到的圖像明亮適中.經IAHE算法處理得到的圖像熵值大于HE算法得到的圖像熵值,說明IAHE算法得到的圖像包含更多的信息.

圖9 不同算法直方圖對比Fig.9 Experiment histogram of different algorithms

表1 不同算法增強效果對比Table 1 Comparison of different algorithm enhancements
為了驗證硬件加速器的性能,本工作開發了圖像增強硬件實現驗證平臺,主要由代碼輸入與仿真調試窗口、核心處理和處理結果顯示這3個部分組成,其實物圖如圖10所示.圖中右側為代碼輸入與仿真調試窗口,左下為核心處理部分,左上為處理結果顯示部分.

圖10 圖像增強硬件實現驗證平臺Fig.10 Verification platform of image enhancement hardware implementation
在ISE14.7下,采用Verilog進行硬件加速器的設計,其仿真波形如圖11所示,圖中(a)為算法處理的部分計算過程,(b)為算法處理后的部分結果數據.
將結束仿真實驗的邏輯功能正確的硬件加速器設計文件,通過USB Cable下載器燒錄到FPGA里面.在針對測試集的圖像進行測試時,選出其中4組典型的夜間低照度圖像進行分析.為了方便查看處理效果,實驗中將處理前后的圖像同時顯示在顯示器上(見圖12),每組實驗結果均是左圖為原始圖像,右圖為經過本工作設計硬件加速器增強之后的圖像.每幅原始圖像大小為512×512(像素),顯示器分辨率為1 280×720(像素),未填充圖像的顯示器區域設置為黑色.第一組實驗結果中原始圖像僅能分辨出汽車輪廓和窗戶輪廓,而處理后的圖像車牌、鐵門、墻面、窗戶都非常清晰.在第二、三、四組實驗結果中,原始圖像都是僅有模糊的實物輪廓,幾乎被黑暗完全淹沒,難以分辨圖像內容,而處理后的圖像能明顯看出路面上的斑馬線和路標、樓房的天臺和窗戶、河邊的房子和橋.這表明,增強之后的圖像亮度和對比度都有了明顯的提升,圖像細節也保存得相當完好,噪聲和過度增強現象得到了較大的抑制,產生了更好更清晰的圖像.

圖11 基于ModelSim的算法仿真Fig.11 ModelSim-based algorithm simulation

圖12 基于FPGA的硬件加速器實驗結果Fig.12 Test result of hardware accelerator based on FPGA
另外,在進行實時圖像處理時,由于視頻圖像是連續的,故相鄰圖像具有很強的相似性.可以用上一幀統計的數據處理下一幀圖像,這樣既能滿足實時性的要求,又能達到較好的增強效果.當一幀圖像來臨時,首先在對其進行統計的同時對其進行映射,映射關系來自上一幀圖像,映射和統計同時完成;之后處理統計的結果形成下一幀的映射關系.至此,圖像處理時間為原始直方圖提取非零分量、計算增量V以及灰度級計算所用的時間,分別表示為T1,T2,T3,統計和緩存不再占用處理時間.處理時間可以表示為

由于直方圖灰度級為256,提取非零分量時需要256個時鐘周期,故T1約為256個時鐘周期;計算增量V時需要對每個灰度級對應的像素點個數進行減法操作,需要256個時鐘周期,故T2約為256個時鐘周期;在映射函數值計算時需要對256個統計數值進行操作,也即需要256個時鐘周期,故T3約為256個時鐘周期.本實驗使用的時鐘頻率為74.25 MHz,圖像處理時間約為

表2統計了不同算法在硬件上實現的處理時間,其中本算法低于文獻[9]中的多子直方圖算法和文獻[12]中的直方圖均衡化算法,可見本工作設計的硬件加速器具有較好的性能.

表2 不同算法硬件處理時間Table 2 Hardware processing time of different algorithms
本工作設計了一種用于自適應直方圖均衡算法的硬件加速器,平衡了算法性能和硬件實現之間的矛盾.首先,該加速器改進了自適應直方圖均衡算法,使之能夠利用自適應閾值有效限制對比度拉伸,克服了過度增強、噪聲放大、丟失細節等缺點,且優化算法使之易于在硬件平臺上實現;其次,該硬件加速器在FPGA硬件平臺進行了測試,能夠產生更好、更清晰的圖像,達到了預期的增強效果,驗證了其實用性和正確性.