陳文明
(1.中航華東光電有限公司,安徽 蕪湖 241002;2.特種顯示技術(shù)國家工程實(shí)驗(yàn)室,安徽 蕪湖 241002)
目前,像增強(qiáng)器作為主流器件被用于微光夜視系統(tǒng)中,但是隨著CMOS 圖像處理器技術(shù)的不斷發(fā)展和進(jìn)步,尤其是SOI(絕緣襯底硅)、BSI(背照結(jié)構(gòu))等新技術(shù)的出現(xiàn),極大提升了CMOS 圖像處理器的光敏度和成像質(zhì)量。同時(shí),CMOS 技術(shù)兼容性高,具有低電壓驅(qū)動(dòng)、低功耗、高分辨率的特點(diǎn),在夜視系統(tǒng)中逐漸被應(yīng)用。但是由于CMOS 圖像處理器中的模擬電路較多,導(dǎo)致電路的一致性很難控制,因此成像圖像的均勻性較差,而且在低照度情況下,底噪聲嚴(yán)重。為了提升最終顯示圖像的效果,需要根據(jù)CMOS 圖像處理器在低照度下輸出圖像的特點(diǎn),針對(duì)性地進(jìn)行圖像處理[1]。本文采用現(xiàn)場(chǎng)可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)作為圖像處理的主控制器,實(shí)現(xiàn)CMOS 的驅(qū)動(dòng)、圖像的采集、壞點(diǎn)的矯正、噪聲的去除以及圖像增強(qiáng)等圖像處理操作,保證微光系統(tǒng)能夠輸出干凈、清晰、對(duì)比度高的視頻圖像。
微光圖像處理系統(tǒng)的硬件電路部分如圖1 所示,由CMOS 傳 感器、FPGA、SRAM、DVI 編碼器、通信接口以及各個(gè)電源模塊組成。CMOS 傳感器是微光視頻的采集終端,對(duì)微弱的光信號(hào)進(jìn)行采集、放大、數(shù)模轉(zhuǎn)化及讀出等操作,實(shí)現(xiàn)光電轉(zhuǎn)化的功能,并將采集的視頻按一定的視頻格式傳輸給FPGA,以進(jìn)行下一步的處理和控制[2]。FPGA 是主控制模塊,負(fù)責(zé)電路的總體控制、視頻接口的實(shí)現(xiàn)以及針對(duì)視頻數(shù)據(jù)進(jìn)行降噪、增強(qiáng)處理;SRAM 是視頻數(shù)據(jù)的存儲(chǔ)模塊,配合相應(yīng)的視頻處理算法,實(shí)現(xiàn)需要數(shù)據(jù)的讀寫控制操作;DVI 編碼芯片負(fù)責(zé)數(shù)字視頻信號(hào)向DVI 信號(hào)的轉(zhuǎn)化,主要完成DVI 編碼;通信方式采用RS-422 接口,主要完成對(duì)微光夜視儀的控制以及工作狀態(tài)的反饋。
圖1 電路整體框圖
本文采用的CMOS 圖像傳感器的分辨率為1 920×1 080,需要處理的數(shù)據(jù)量非常大,而且要求具有實(shí)時(shí)顯示的功能,通過軟件中斷很難實(shí)現(xiàn)。而FPGA 是一種并行架構(gòu),通過Verilog DHL 或者VHDL 語言描述的電路,被編譯成具體的數(shù)字電路在FPGA 內(nèi)部并行運(yùn)行,所以使用FPGA 來處理數(shù)字圖像,具有吞吐量大、處理速度快的特點(diǎn)。因此,本文的夜視圖像處理系統(tǒng)的主控制器選用的是Xilinx 公司的Artix 7 系列FPGA。FPGA 主要實(shí)現(xiàn)的功能有采集移動(dòng)產(chǎn)業(yè)處理器接口(Mobile Industry Processor Interface,MIPI)信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)以便后續(xù)模塊的處理,由于CMOS 圖像傳感器以MIPI接口輸出視頻信號(hào),通過FPGA 的LVDS 接口搭配外圍的電阻網(wǎng)絡(luò)將MIPI 信號(hào)進(jìn)行轉(zhuǎn)化;CMOS 上電后需要對(duì)其內(nèi)部寄存器進(jìn)行配置,使其進(jìn)入正常的工作模式,同時(shí)在使用過程中,需要根據(jù)環(huán)境調(diào)整相關(guān)參數(shù),來使CMOS 適應(yīng)外部環(huán)境,使其工作在最佳狀態(tài)。CMOS 輸入的信號(hào)在照度極低的情況下會(huì)產(chǎn)生嚴(yán)重的噪聲,通過相應(yīng)的算法將其去除;由于低照度圖像的灰度較低,圖像總體的對(duì)比度較低,不易于人眼識(shí)別,所以要對(duì)去噪后的圖像進(jìn)行灰度拉升,提升對(duì)比度,即增強(qiáng)處理[3]。FPGA 內(nèi)部主要的功能框圖如圖2 所示。
圖2 FPGA 內(nèi)部功能模塊
2.2.1 壞點(diǎn)矯正
CMOS 圖像傳感器上有呈陣列排列的像素點(diǎn)。每個(gè)像素點(diǎn)是一個(gè)感光單元,根據(jù)光強(qiáng)將光信號(hào)轉(zhuǎn)化為電信號(hào),被像素下的采樣電路接收和轉(zhuǎn)化。由于像素陣列在制作過程中存在工藝上的差異,或者在光信號(hào)轉(zhuǎn)化電信號(hào)的過程中出現(xiàn)錯(cuò)誤,都會(huì)造成輸出圖像上的像素信息出現(xiàn)錯(cuò)誤。直觀的表現(xiàn)是壞點(diǎn)的灰度與周圍的像素點(diǎn)不一致,存在很大的差別,一般為亮點(diǎn)或是暗點(diǎn),這樣的點(diǎn)就被稱作壞點(diǎn)。在壞點(diǎn)尺寸不是很大的情況下,可以通過算法對(duì)圖像進(jìn)行修復(fù)[4]。
以圖3 所示的壞點(diǎn)矯正區(qū)域?yàn)槔?,?×3 的區(qū)域內(nèi),通過比較算出區(qū)域中最大值Pmax,次大值Pmax1,最小值Pmin,第二小值Pmin1以及此區(qū)域的平均亮度Pyav。根據(jù)數(shù)據(jù)之間的關(guān)系,判斷當(dāng)前點(diǎn)是否為壞點(diǎn)。如果是,就用區(qū)域內(nèi)相互差異最小的兩個(gè)點(diǎn)的均值來替代壞點(diǎn)的值。壞點(diǎn)矯正分為3 種情況。
圖3 壞點(diǎn)矯正3×3 區(qū)域
(1)對(duì)于亮點(diǎn)的矯正。當(dāng)同時(shí)滿足|Pmax-P11|≥Th,|Pmax1-P11|≥Th,|4×(Pmax-Pmax1)|<|Pmax1-Pyav|。
(2)對(duì)于暗點(diǎn)的矯正。當(dāng)同時(shí)滿足|P11-Pmin|≥Th,|P11-Pmin1|≥Th,|4×(Pmin1-Pmin)|<|Pyav-Pmin1|。
(3)如果P11是壞點(diǎn),就要用3×3 區(qū)域內(nèi)差異最小的兩個(gè)點(diǎn)的均值來替代;否者,輸出P11。
壞點(diǎn)校正模塊框圖如圖4 所示,其中l(wèi)ine_sram模塊是行緩存器,3 個(gè)line_sram 一起得到一個(gè)3×3 區(qū)域。badpix_control 模塊對(duì)3×3 個(gè)數(shù)據(jù)進(jìn)行判斷和運(yùn)算,判斷當(dāng)前數(shù)據(jù)是否為壞點(diǎn)。如果是,用計(jì)算數(shù)值替代,反之,直接輸出[5]。
圖4 壞點(diǎn)校正模塊框圖
2.2.2 視頻去噪
CMOS 圖像傳感器由于其自身特點(diǎn),在低照度成像難免會(huì)出現(xiàn)各種噪聲,主要包括暗電流散射的噪聲、暗電流復(fù)位噪聲、放大器噪聲以及光散射噪聲等。這些噪聲讓圖像處理變得異常復(fù)雜,所以在進(jìn)行進(jìn)一步處理之前要對(duì)視頻圖像進(jìn)行去噪。常見的去噪方式有中值濾波、均值濾波以及高斯濾波,還有機(jī)遇時(shí)間域的幀間平均濾波。結(jié)合夜視圖像的噪聲特點(diǎn),本文設(shè)計(jì)一種改進(jìn)的雙邊濾波算法,能夠有效地去除夜視圖像的噪聲,對(duì)圖像的邊緣和細(xì)節(jié)保護(hù),而且不需要延時(shí),實(shí)時(shí)性好。
雙邊濾波的數(shù)學(xué)表達(dá)式為:
式中:g(x,y)表示處理后數(shù)據(jù),f(i,j)表示原始圖像,ω(i,j)為加權(quán)系數(shù),ωs(i,j)為距離對(duì)應(yīng)的加權(quán)系數(shù),ωr(i,j)為數(shù)值對(duì)應(yīng)的加權(quán)系數(shù)。
考慮到算法的實(shí)時(shí)性和FPGA 的運(yùn)行速率,以上電路采用流水線方式實(shí)現(xiàn),在各個(gè)運(yùn)算節(jié)點(diǎn)處需要插入觸發(fā)器,注意ω(i,j)結(jié)束時(shí)間和f*w 的時(shí)間不在同一時(shí)刻,需要對(duì)ω(i,j)輸出進(jìn)行相應(yīng)延時(shí)以和f*w 匹配。f*w 與ω(i,j)經(jīng)過FPGA 自帶的除法器計(jì)算,得到此區(qū)域的濾波后數(shù)據(jù)。算法效果如圖6 所示,圖像中的噪聲部分被濾除,線條的邊緣銳度變化較小。
圖5 算法計(jì)算電路
圖6 算法效果對(duì)比圖
2.2.3 視頻增強(qiáng)
夜視圖像的灰度級(jí)都集中在較小的區(qū)間,而正常亮度下的圖像灰度值在直方圖中呈現(xiàn)均勻分布的狀態(tài)。為了提升圖像的對(duì)比度,需要對(duì)其進(jìn)行增強(qiáng)處理。自適應(yīng)直方圖均衡(Adaptive Histgram Equalization,AHE)是一種比較適合在FPGA 中實(shí)現(xiàn)的算法。本文采用此算法進(jìn)行圖像的增強(qiáng)處理,來達(dá)到擴(kuò)大局部對(duì)比度、平滑區(qū)域細(xì)節(jié)的作用。直方圖均衡化的數(shù)學(xué)表達(dá)式為其中,k為灰度級(jí),N為一幅圖像的像素總點(diǎn)數(shù)。
在FPGA 中實(shí)現(xiàn)自適應(yīng)直方圖均衡,需要進(jìn)行兩步操作。首先,對(duì)整幅圖像中的灰度進(jìn)行統(tǒng)計(jì),計(jì)算其出現(xiàn)的概率;然后計(jì)算每一個(gè)灰度級(jí)的累積分布函數(shù);最后在下一幀通過累積分布函數(shù)計(jì)算輸入圖像的值,實(shí)現(xiàn)圖像的增強(qiáng)。
如圖7 所示,自適應(yīng)直方圖均衡模塊由fifo、雙口ram1、雙口ram2、SRAM_CTRL 以及CDF_cal 控制模塊組成。電路工作過程如下。
圖7 自適應(yīng)直方圖均衡電路
當(dāng)檢測(cè)到VS 信號(hào)下降沿,對(duì)fifo 進(jìn)行復(fù)位,同時(shí)啟動(dòng)對(duì)his_ram1 內(nèi)部數(shù)據(jù)的清零。因?yàn)樾碌囊粠瑘D像的直方圖數(shù)據(jù)會(huì)有差異,需要清零,重新記錄。雙口his_ram1 的端口A 為數(shù)據(jù)寫入端,端口B 為數(shù)據(jù)讀出端。直方圖計(jì)算需要先從對(duì)應(yīng)的地址讀出數(shù)據(jù),再將數(shù)據(jù)自增1,并寫回his_ram1 的原地址。也就是說,一個(gè)新像素的直方圖計(jì)算至少要3 個(gè)像素時(shí)鐘。為了保證數(shù)據(jù)流的連續(xù)性,需要在輸入視頻數(shù)據(jù)和直方圖計(jì)算模塊之間加入緩存。本文采用fifo 進(jìn)行緩存。當(dāng)新的一幀視頻數(shù)據(jù)輸入后,在像素時(shí)鐘和DEN 信號(hào)的控制下,將數(shù)據(jù)寫入到fifo 中進(jìn)行緩存。直方圖計(jì)算模塊監(jiān)控到fifo 的empty 信號(hào)為0 時(shí),從fifo 讀出數(shù)據(jù),讀出時(shí)鐘頻率是像素時(shí)鐘的3 倍。整個(gè)控制流程的狀態(tài)轉(zhuǎn)化如圖8 所示。
圖8 直方圖計(jì)算的狀態(tài)轉(zhuǎn)換圖
上電后,程序首先進(jìn)入Idle 狀態(tài),當(dāng)vs 信號(hào)出現(xiàn)低電平時(shí)vs_neg=’1’,狀態(tài)跳轉(zhuǎn)到ini_ram,在此狀態(tài)現(xiàn)實(shí)對(duì)雙口ram 的清零,地址從0 ~255 自增,對(duì)應(yīng)地址的數(shù)據(jù)為0。當(dāng)?shù)刂穉ddr=255 時(shí),ram 清零完成,狀態(tài)切換到wait_data 狀態(tài)。在wait_data狀態(tài)監(jiān)控fifo 的empty 信號(hào)狀態(tài),當(dāng)empty=’0’,從fifo 讀取數(shù)據(jù),并跳轉(zhuǎn)到rd_his 狀態(tài)。在rd_his狀態(tài),以從fifo 讀到的數(shù)據(jù)作為ram 的讀地址,從此地址讀取數(shù)據(jù),并且將數(shù)據(jù)加1,同時(shí)跳轉(zhuǎn)到wr_his狀態(tài)。在wr_his 狀態(tài)將自增后的數(shù)據(jù)寫回到讀出地址,并回到wait_data 狀態(tài),這樣就完成了一個(gè)像素的統(tǒng)計(jì)。如此循環(huán)往復(fù),直到一幀數(shù)據(jù)全部統(tǒng)計(jì)完,在wait_data 狀態(tài)同時(shí)滿足empty=’1’和field_over =’1’,完成一幀數(shù)據(jù)統(tǒng)計(jì),返回到idle 狀態(tài),等待新一幀數(shù)據(jù)的統(tǒng)計(jì)。
完成一幀數(shù)據(jù)的直方圖統(tǒng)計(jì)之后,開始計(jì)算這一幀的CDF 值。計(jì)算方式與直方圖計(jì)算類似,從his_ram1 循環(huán)讀取0 ~255 地址的數(shù)據(jù),并將當(dāng)前地址的數(shù)據(jù)與其前所有地址的數(shù)據(jù)相加,將相加結(jié)果寫到his_ram2 對(duì)應(yīng)的地址,直到地址達(dá)到255,計(jì)算完成。
由于直方圖統(tǒng)計(jì)需要對(duì)一幀的所有數(shù)據(jù)進(jìn)行統(tǒng)計(jì),為了將計(jì)算的結(jié)果與對(duì)應(yīng)的統(tǒng)計(jì)幀對(duì)應(yīng)起來,需要將統(tǒng)計(jì)幀進(jìn)行緩存,等計(jì)算繼續(xù)后,在下一幀統(tǒng)計(jì)的過程中,按一定視頻時(shí)序從SRAM 中取出,并在his_ram2 中進(jìn)行查表,得到增強(qiáng)后的像素值??紤]到計(jì)算的方便,在最后輸出視頻的時(shí)候,對(duì)數(shù)據(jù)進(jìn)行固定除數(shù)(除數(shù)為一幀圖像的總點(diǎn)數(shù))的除法計(jì)算,商即為最終輸出像素?cái)?shù)據(jù)。采用以上方法得到的圖像增強(qiáng)效果如圖9 所示。
圖9 自適應(yīng)直方圖均衡后對(duì)比
為了驗(yàn)證夜視圖像處理的效果,改進(jìn)現(xiàn)有微光相機(jī)的FPGA 代碼,增加了壞點(diǎn)校正、視頻去噪以及視頻增強(qiáng)算法。在夜晚環(huán)境照度5.4×10-4lx 下,對(duì)同一地點(diǎn)進(jìn)行拍攝,通過監(jiān)視器觀察顯示效果如圖10 所示。其中,左邊為原始效果,右邊為處理后的效果??梢钥闯?,處理后的圖像清晰,邊緣輪廓分明,對(duì)比度范圍寬。總體而言,經(jīng)過本文算法聯(lián)合處理后,夜視視頻圖像的質(zhì)量得到明顯改善,圖像中的細(xì)節(jié)清晰,所含噪聲較少,同時(shí),視頻圖像的總體亮度有提升,灰度之間的差異被拉開。對(duì)比度提升,能明顯識(shí)別感興趣區(qū)域,而且處理后視頻更適合人眼的視覺觀察效果。
圖10 夜視視頻圖像處理前后效果對(duì)比
本文針對(duì)夜視CMOS 圖像傳感器的特點(diǎn),研究了針對(duì)其圖像質(zhì)量提升的方法。首先對(duì)微光夜視系統(tǒng)的硬件組成進(jìn)行介紹,進(jìn)一步分析了基于FPGA的圖像處理的架構(gòu),并且對(duì)具體的處理模塊進(jìn)行了詳細(xì)的介紹,在理論分析的基礎(chǔ)上,介紹了其在FPGA 中的詳細(xì)實(shí)現(xiàn)過程和具體電路。本文主要論述了CMOS 圖像傳感器的壞點(diǎn)矯正、視頻圖像的噪聲去除以及視頻圖像增強(qiáng)算法的FPGA 實(shí)現(xiàn)。最后通過夜晚戶外實(shí)驗(yàn)來檢驗(yàn)算法的有效性。通過實(shí)驗(yàn)對(duì)比,結(jié)果表明本文的算法能夠有效改善夜視視頻圖像質(zhì)量,能夠提升圖像細(xì)節(jié),減少噪聲,提升對(duì)比度,使得處理后的視頻更適合人眼觀察。