摘 要: 針對(duì)紅外圖像的特點(diǎn),提出了汽車夜視系統(tǒng)中圖像增強(qiáng)的預(yù)處理方案。給出了基于FPGA的視頻格式轉(zhuǎn)換、快速中值濾波、自適應(yīng)平臺(tái)直方圖雙向均衡化的原理、實(shí)現(xiàn)方法及仿真結(jié)果。仿真結(jié)果表明本方案較好地滿足了圖像處理效果和處理速度的要求。
關(guān)鍵詞: 汽車夜視系統(tǒng);FPGA;視頻格式轉(zhuǎn)換;中值濾波;自適應(yīng)平臺(tái)直方圖雙向均衡化
汽車紅外夜視系統(tǒng)作為輔助駕駛系統(tǒng)的一部分,在提高夜間駕駛的安全性方面起到了重要的作用。但由于受到紅外器件發(fā)展的限制,其成像效果不夠理想,影響了汽車紅外夜視系統(tǒng)在實(shí)際中的應(yīng)用。在系統(tǒng)中加入實(shí)時(shí)圖像處理功能是最為經(jīng)濟(jì)有效的方法[1]。
為保持圖像數(shù)據(jù)傳輸和處理的連續(xù)性,圖像數(shù)據(jù)的處理不能導(dǎo)致圖像數(shù)據(jù)傳輸?shù)淖枞?、中斷或圖像數(shù)據(jù)的丟失,因此實(shí)時(shí)圖像處理系統(tǒng)必須具有快速處理巨大數(shù)據(jù)量的能力。FPGA以其硬件并行性、編程靈活性等特點(diǎn),非常適合實(shí)時(shí)大數(shù)據(jù)量的處理。
1 FPGA圖像預(yù)處理功能設(shè)計(jì)
針對(duì)紅外圖像噪聲大、對(duì)比度低、圖像細(xì)節(jié)分辨能力差等特點(diǎn),采用了基于流水線方式的快速中值濾波方法濾除視頻圖像中的噪聲,采用自適應(yīng)平臺(tái)直方圖雙向均衡化方法增強(qiáng)視頻圖像的視覺效果。同時(shí)為便于視頻圖像的處理,在圖像處理前后對(duì)視頻圖像的格式進(jìn)行了轉(zhuǎn)換。
FPGA圖像預(yù)處理功能如圖1所示。
2 視頻格式的轉(zhuǎn)換
汽車紅外夜視系統(tǒng)中,視頻圖像采集部分的攝像機(jī)輸出的模擬信號(hào)經(jīng)AD轉(zhuǎn)換后變?yōu)榉螴TU-R BT.656標(biāo)準(zhǔn)的YUV422格式數(shù)字?jǐn)?shù)據(jù)流,其中行起始和結(jié)束標(biāo)志融合在數(shù)據(jù)流中。為了使視頻數(shù)據(jù)流的表示更加清晰,將其轉(zhuǎn)換為MHIVF(Mitth?觟gskolans Interlaced Video Format)格式。在圖像處理之后,再將其轉(zhuǎn)換回ITU-R BT.656標(biāo)準(zhǔn)數(shù)據(jù)格式進(jìn)行DA轉(zhuǎn)換輸出。ITU-R BT.656標(biāo)準(zhǔn)的YUV422格式數(shù)字視頻數(shù)據(jù)流[2]和MHIVF的時(shí)序關(guān)系分別如圖2和圖3所示。
圖2中Y表示亮度,Cb和Cr是色差信號(hào)。數(shù)據(jù)流中有兩個(gè)定時(shí)基準(zhǔn)信號(hào):一個(gè)在每個(gè)視頻數(shù)據(jù)塊的開始(Start of Active Video,SAV),另一個(gè)在每個(gè)視頻數(shù)據(jù)塊的結(jié)束(End of Active Video,EAV)。每個(gè)定時(shí)基準(zhǔn)信號(hào)由4個(gè)字的序列組成,格式如下:FF 00 00 XY(數(shù)值以16進(jìn)制表示,F(xiàn)F00保留僅供定時(shí)基準(zhǔn)信號(hào)用)。頭三個(gè)是固定前綴,第4個(gè)字包含奇偶場(chǎng)標(biāo)識(shí)、場(chǎng)消隱狀態(tài)和行消隱狀態(tài)的信息。定時(shí)基準(zhǔn)信號(hào)內(nèi)的比特分配如表1所示。
注:(1)MSB:Most Significant Bit(最高位);
LSB:Least Significant Bit(最低位)。
(2)F=0 第1場(chǎng);F=1 第2場(chǎng)。
V=1 場(chǎng)消隱期;V=0 其他處。
H=0 行起始處;H=1 行結(jié)束處。
(3)P0,P1,P2,P3為保護(hù)位,它們的狀態(tài)取決于F、V、H的狀態(tài)。在數(shù)據(jù)接收端,能夠進(jìn)行一位糾錯(cuò)和兩位檢錯(cuò)。
圖3中pclk為像素時(shí)鐘信號(hào);ofsync和efsync分別為奇場(chǎng)和偶場(chǎng)同步信號(hào),每場(chǎng)起始處第一個(gè)時(shí)鐘周期高電平;rsync為行同步信號(hào),行有效期間為高電平,行間至少一個(gè)時(shí)鐘周期;pdata為像素?cái)?shù)據(jù)。
2.1 ITU-R BT.656轉(zhuǎn)換為MHIVF的方法及實(shí)現(xiàn)
監(jiān)測(cè)到SAV標(biāo)志到來時(shí),rsync置1(維持一個(gè)時(shí)鐘周期),ofsync和efsync視XY的具體值決定是否置1。同時(shí)對(duì)像素個(gè)數(shù)進(jìn)行計(jì)數(shù),如果累計(jì)值達(dá)到了一行像素的個(gè)數(shù)上限,則rsync置0,ofsync或efsync也置為0。等待下一行開始信號(hào)的到來,如此反復(fù)。同時(shí)由于系統(tǒng)主要應(yīng)用在光照條件較弱的場(chǎng)合,采集黑白圖像即可,因此后續(xù)圖像處理只需要亮度信號(hào)即可,色差信號(hào)可以從數(shù)據(jù)流中去除。從視頻數(shù)據(jù)流的第二個(gè)數(shù)據(jù)開始每?jī)蓚€(gè)數(shù)取一個(gè)便分離出了亮度信號(hào),MHIVF中的像素時(shí)鐘可以從對(duì)工作時(shí)鐘的二分頻得到。整個(gè)模塊的功能在有限狀態(tài)機(jī)(FSM)的協(xié)調(diào)下完成。模塊結(jié)構(gòu)如圖4所示。
2.2 MHIVF轉(zhuǎn)換為ITU-R BT.656的方法及實(shí)現(xiàn)
要完成MHIVF到ITU-R BT.656的轉(zhuǎn)換,需要在視頻數(shù)據(jù)流每一行的起始和結(jié)束位置分別添加SAV和EAV標(biāo)志,同時(shí)應(yīng)添加色差信號(hào)Cb和Cr。為實(shí)現(xiàn)上述功能,設(shè)置了四個(gè)8位寄存器和一個(gè)二選一選擇器,由有限狀態(tài)機(jī)FSM協(xié)調(diào)工作。具體實(shí)現(xiàn)過程如下:模塊處于等待狀態(tài)直到ofsync或efsync和rsync到來,然后視頻數(shù)據(jù)輸入到4個(gè)8 bit串行寄存器的第一個(gè)。因?yàn)镾AV和EAV均為4 B,所以視頻數(shù)據(jù)依次通過4個(gè)寄存器就相當(dāng)于做了4個(gè)時(shí)鐘周期的延時(shí)。在這4個(gè)時(shí)鐘周期內(nèi)二選一選擇器選擇FSM產(chǎn)生的SAV或EAV標(biāo)志輸出,這樣就在數(shù)據(jù)流中加入了SAV和EAV標(biāo)志。在二選一選擇器和FSM之間設(shè)立握手信號(hào),在添加SAV或EAV標(biāo)志的同時(shí),如果rsync有效,則二選一選擇器選擇FSM產(chǎn)生的Cb和Cr信號(hào)輸出,同時(shí)改變握手信號(hào),這樣在下一個(gè)時(shí)鐘的上升沿,如果rsync有效,二選一選擇器會(huì)選擇從寄存器傳來的數(shù)據(jù)作為輸出。如此反復(fù),就實(shí)現(xiàn)了在數(shù)據(jù)流中添加色差信號(hào)Cb和Cr的功能。因?yàn)橄到y(tǒng)中使用的是黑白圖像,所以為了簡(jiǎn)化設(shè)計(jì),色差信號(hào)Cb和Cr的值均取十進(jìn)制值128。模塊結(jié)構(gòu)如圖5所示。
為了檢驗(yàn)?zāi)K功能的正確性,將格式相互轉(zhuǎn)換的兩個(gè)子模塊綜合進(jìn)行了仿真,得到了預(yù)期的波形,說明模塊正確完成了預(yù)定的功能。仿真波形圖6所示。
3 流水線快速中值濾波
3.1 快速中值濾波的原理
中值濾波[3-4]是一種非線性濾波技術(shù),它能有效抑制圖像噪聲、提高信噪比而保持圖像邊緣。它是一種鄰域運(yùn)算,把鄰域中的像素按灰度級(jí)進(jìn)行排序,然后選擇該組的中間值作為輸出像素值。如果采用3×3模板,則中值為窗口內(nèi)排第五位的像素值。由于只需要取出中值,所以沒有必要對(duì)窗口內(nèi)的像素值進(jìn)行全部排序。
將3×3窗口內(nèi)的各個(gè)像素分別定義為P1、P2、P3、P4、P5、P6、P7、P8、P9,像素排列如表2所示。
在3×3窗口中共有9個(gè)數(shù)據(jù),中值的特點(diǎn)是窗口中至多有4個(gè)數(shù)比它本身大,至多有4個(gè)數(shù)比它本身小。算法思想是逐步淘汰,整個(gè)過程中如果有兩個(gè)數(shù)據(jù)相等,算法不受影響。具體過程如下:第一步將各行數(shù)據(jù)從小到大分別進(jìn)行排序,并從小到大存放;第二步對(duì)三列數(shù)據(jù)分別進(jìn)行排序。在第一列數(shù)據(jù)中取出最大值,第一列中的另外兩個(gè)數(shù)至少有5個(gè)數(shù)比它們本身大,不可能為中值。在第二列數(shù)據(jù)中取出中值。對(duì)于第二列數(shù)據(jù)的最小值,至少有5個(gè)數(shù)比它本身大(本列中另外兩個(gè)數(shù)和第三列中的三個(gè)數(shù)),不可能為中值;對(duì)于第二列數(shù)據(jù)的最大值,至少有5個(gè)數(shù)比它本身?。ū玖兄辛硗鈨蓚€(gè)數(shù)和第一列中的三個(gè)數(shù)),不可能為中值。在第三列數(shù)據(jù)中取出最小值,第三列中的另外兩個(gè)數(shù)至少有5個(gè)數(shù)比它們本身小,不可能為中值。這樣窗口中值的可能取值只剩下三種可能。對(duì)這三個(gè)數(shù)排序取中值即為窗口的中值。比較過程如圖7所示。
本算法第一步的三行排序可以并行,第二步的三列排序也可以并行,整個(gè)過程只需要3個(gè)時(shí)鐘周期。由于中值濾波要選取3×3的模板才能完成一個(gè)像素點(diǎn)的運(yùn)算,所以對(duì)于一幅圖像中的最外面一圈像素,無法生成3×3的模板。真正能夠處理的像素點(diǎn)是從第二行第二列的像素點(diǎn)開始的。對(duì)于未覆蓋的區(qū)域,本系統(tǒng)中采取的方法是用模板的中心值代替。
3.2 快速中值濾波的流水線實(shí)現(xiàn)
為了完成中值濾波功能,設(shè)置了三個(gè)模塊:行列計(jì)數(shù)器模塊、3×3模板生成模塊、中值濾波模塊。模塊結(jié)構(gòu)框圖如圖8所示。
行列計(jì)數(shù)器模塊根據(jù)ofsync、efsync、rsync,利用模塊內(nèi)嵌入的計(jì)數(shù)器對(duì)當(dāng)前像素所處的行數(shù)和列數(shù)進(jìn)行標(biāo)識(shí)。3×3模板生成模塊對(duì)串行輸入的圖像數(shù)據(jù)流進(jìn)行緩存,然后根據(jù)當(dāng)前像素所處的位置調(diào)整模板中的數(shù)據(jù)輸出。在模板和圖像的相對(duì)滑動(dòng)方面,本文采用固定模板滑動(dòng)圖像的方法,并針對(duì)此方法提出了一種緩存方案:利用FPGA內(nèi)部的BlockRAM開辟兩行加三個(gè)像素的緩存區(qū)域R,如果一行像素的個(gè)數(shù)為W,則R所占空間為2W+3(地址范圍為[0,2W+2])。當(dāng)有新像素輸入時(shí),R(2W+1)~R(0)依次賦值給R(2W+2)~R(1),新像素值存入R(0)。這種方法的優(yōu)點(diǎn)是3×3模板的9個(gè)數(shù)與R中元素的對(duì)應(yīng)位置固定不變,給操作帶來了極大的方便。由于每個(gè)時(shí)鐘周期都輸出一組模板數(shù)據(jù),如果中值濾波模塊采用串行單次排序的方法,則在完成一次排序之前又會(huì)有兩組數(shù)據(jù)到達(dá),這就會(huì)造成數(shù)據(jù)的大量丟失,直接影響圖像的質(zhì)量;如果讓模板生成模塊每3個(gè)周期輸出一組數(shù)據(jù)則會(huì)降低系統(tǒng)的運(yùn)行速度。本文采用3級(jí)流水線處理方法,當(dāng)流水線滿負(fù)荷運(yùn)轉(zhuǎn)時(shí),每個(gè)時(shí)鐘周期都可以輸出中值濾波的結(jié)果,極大地提高了吞吐量。
流水操作的中值濾波模塊的仿真結(jié)果如圖9所示。
采用TEXTIO方法讀入由單幀圖像生成的測(cè)試數(shù)據(jù)進(jìn)行仿真。中值濾波前后的效果如圖10和圖11所示。
4 自適應(yīng)平臺(tái)直方圖雙向均衡化
4.1 自適應(yīng)平臺(tái)直方圖雙向均衡化的原理
自適應(yīng)平臺(tái)直方圖雙向均衡化是在直方圖統(tǒng)計(jì)的基礎(chǔ)上,通過尋找統(tǒng)計(jì)直方圖中的局部最大值和整體最大值得出適當(dāng)?shù)钠脚_(tái)閾值,然后利用此閾值修正統(tǒng)計(jì)直方圖,進(jìn)而在灰度等級(jí)和灰度級(jí)間距兩方面對(duì)直方圖進(jìn)行均衡化[3]的一個(gè)過程。算法原理如下:
首先統(tǒng)計(jì)圖像的直方圖,在統(tǒng)計(jì)圖像直方圖時(shí)為落在某一個(gè)灰度級(jí)上的像素點(diǎn)數(shù)設(shè)置一個(gè)合適的上限閾值(即平臺(tái)值T),適度限制占有像素?cái)?shù)較多的灰度級(jí)的空間拉伸。當(dāng)某一灰度級(jí)的像素?cái)?shù)大于平臺(tái)值T,則統(tǒng)計(jì)的像素?cái)?shù)置為T;當(dāng)某一灰度級(jí)的像素?cái)?shù)小于平臺(tái)值T,則統(tǒng)計(jì)的像素?cái)?shù)為實(shí)際值。因而統(tǒng)計(jì)直方圖變?yōu)椋?nbsp;
其中,m為表示圖像灰度級(jí)的位數(shù);k表示圖像的灰度級(jí),對(duì)于8位的灰度圖像,0≤k≤255;T是平臺(tái)閾值;P(k)是圖像中第k個(gè)灰度級(jí)的像素?cái)?shù);PT(k)是圖像的平臺(tái)直方圖。當(dāng)選取的平臺(tái)值T大于直方圖的主峰值時(shí),平臺(tái)直方圖均衡化演化為經(jīng)典平臺(tái)直方圖均衡化;當(dāng)選取的平臺(tái)值過小時(shí),增強(qiáng)圖像細(xì)節(jié)的同時(shí)又會(huì)增強(qiáng)圖像的背景和噪聲,達(dá)不到預(yù)期的效果;因此選擇的平臺(tái)值必須小于統(tǒng)計(jì)直方圖的主峰值而大于等于直方圖中對(duì)應(yīng)于目標(biāo)的峰值。本文采用一種自適應(yīng)求取平臺(tái)值的算法,大大增強(qiáng)了系統(tǒng)的靈活性和適用性。
自適應(yīng)求取平臺(tái)值的具體算法[5]如下:
(1)統(tǒng)計(jì)原圖像的直方圖P(k),0≤k≤M,對(duì)P(k)進(jìn)行3鄰域一維中值濾波;然后選取直方圖中的非零單元,構(gòu)成集合{F(l)|0≤l≤L},L為P(k)中非零單元的個(gè)數(shù);
(2)找出F(l)的局部最大值和整體最大值。對(duì)非零單元進(jìn)行一階差分運(yùn)算:
F(1)(m)=F(m)-F(m-1)
其中,1≤m≤L。找出F(l)中滿足下列條件的F(li):
F(1)(m-1)>0,F(xiàn)(1)(m)≥0,F(xiàn)(1)(m+1)<0
即F(1)(m)的符號(hào)在m處發(fā)生了變化(由正變負(fù)),則F(li)為局部最大值,其中0≤li≤L,0≤i≤N,N為局部最大值的個(gè)數(shù)。然后,由F(li)求出整體最大值F(lk)。
(3)求出子集{F(li)|k≤i≤N}中的均值F(lk),F(xiàn)(lk)即為估計(jì)的平臺(tái)閾值。此處取子集{F(li)|k≤i≤N}的中值效果會(huì)更好一些,但考慮到子集中數(shù)據(jù)的個(gè)數(shù)根據(jù)圖像的不同而不同,所以要實(shí)現(xiàn)排序非常繁瑣,不利于實(shí)時(shí)實(shí)現(xiàn)。用均值代替中值,加快了運(yùn)算速度,同時(shí)也取得了令人滿意的圖像效果。
計(jì)算出平臺(tái)閾值得到平臺(tái)直方圖后,對(duì)灰度級(jí)數(shù)目進(jìn)行統(tǒng)計(jì)。假設(shè)平臺(tái)直方圖的存儲(chǔ)單元為S,灰度級(jí)數(shù)目為M,令M0=0,則:
上式完成對(duì)灰度范圍內(nèi)不為零的灰度級(jí)進(jìn)行累加計(jì)算,從而獲得有效的實(shí)際灰度級(jí)數(shù)。Mk表示累積直方圖中第k級(jí)灰度之前(包括k)的灰度級(jí)數(shù)目,M2m-1即為處理后圖像的實(shí)際灰度級(jí)數(shù)。
然后對(duì)這些有效灰度級(jí)進(jìn)行重新排序,在整個(gè)灰度范圍內(nèi)作等間距排列,變換函數(shù)為:
Tk表示第k級(jí)灰度在新直方圖中的灰度值,也即灰度值k經(jīng)平臺(tái)直方圖雙向均衡后要顯示的新灰度值。
4.2 自適應(yīng)平臺(tái)直方圖雙向均衡化算法的FPGA實(shí)現(xiàn)
自適應(yīng)平臺(tái)直方圖雙向均衡化的硬件實(shí)現(xiàn)主要由直方圖統(tǒng)計(jì)模塊、平臺(tái)值計(jì)算模塊、平臺(tái)直方圖灰度級(jí)統(tǒng)計(jì)模塊、灰度間距計(jì)算模塊、灰度映射模塊、控制模塊組成,如圖12所示。
平臺(tái)值計(jì)算模塊的結(jié)構(gòu)框圖如圖13所示。
輸入圖像數(shù)據(jù)在讀入的同時(shí)進(jìn)行直方圖統(tǒng)計(jì),直方圖數(shù)據(jù)存入由FPGA內(nèi)部BlockRam后DistributedRam構(gòu)成的ram1中,然后根據(jù)平臺(tái)值計(jì)算模塊計(jì)算出的平臺(tái)值對(duì)統(tǒng)計(jì)直方圖進(jìn)行修正得到平臺(tái)直方圖,存放于ram2中。結(jié)束后,從ram2中讀取數(shù)據(jù)統(tǒng)計(jì)實(shí)際的灰度級(jí)數(shù),然后將這些灰度級(jí)均勻分布在要顯示的灰度級(jí)上,從而減少了灰度冗余,使呈現(xiàn)圖像更具層次感。最后進(jìn)行灰度映射將映射關(guān)系存于ram3中,輸入數(shù)據(jù)可根據(jù)灰度值查表輸出。這樣就完成了對(duì)圖像的增強(qiáng)工作。其中灰度間距計(jì)算模塊采用查表法,以灰度級(jí)數(shù)做為輸入,將把這些灰度級(jí)均勻分布在256級(jí)灰度上的間距提前存入表中。查表只需一個(gè)時(shí)鐘周期,較除法運(yùn)算,速度大大提高。
采用TEXTIO方法讀入由單幀圖像生成的測(cè)試數(shù)據(jù)進(jìn)行仿真。處理前后圖像的效果及直方圖如圖14~圖17所示。
快速中值濾波方法有效去除了圖像中的噪聲,而且很好地保持了圖像的邊緣,其流水線方式的實(shí)現(xiàn)極大地提高了系統(tǒng)的吞吐量。自適應(yīng)平臺(tái)直方圖雙向均衡化可根據(jù)圖像的不同自動(dòng)調(diào)整用以修正直方圖的平臺(tái)值,增強(qiáng)了圖像對(duì)比度且保證了圖像過渡自然。視頻格式的轉(zhuǎn)換使得這兩種操作更加方便。圖像的預(yù)處理將使得汽車夜視系統(tǒng)的成像效果得到極大的改善。
參考文獻(xiàn)
[1] 韓寶玲,黃貞華,何煒.新型汽車紅外夜視系統(tǒng)的研究與開發(fā)[J].計(jì)算機(jī)測(cè)量與控制,2004(9):874-876.
[2] 俞斯樂.電視原理(第6版)[M].北京:國(guó)防工業(yè)出版社,2005:95-145.
[3] RAFAEL C.Gonzalez Richard E.Woods.數(shù)字圖像處理(第二版)[M].北京:電子工業(yè)出版社,2003:59-112.
[4] 李雷鳴,張煥春,張波.一種基于FPGA的圖像中值濾波器的硬件實(shí)現(xiàn)[J].電子工程師,2004(2):48-50.
[5] 王炳健,劉上乾,拜麗萍.紅外圖像實(shí)時(shí)增強(qiáng)的新算法[J].光電工程,2006(1):46-49