一種改進(jìn)型surendra背景更新算法的FPGA實(shí)現(xiàn)
運(yùn)動(dòng)目標(biāo)檢測是通過找到圖像序列中的運(yùn)動(dòng)像素點(diǎn)和靜止像素點(diǎn),從而找到前景中的變化區(qū)域,進(jìn)而將運(yùn)動(dòng)的目標(biāo)物體從背景圖像中提取出來?,F(xiàn)有的運(yùn)動(dòng)目標(biāo)檢測方法主要有光流法、幀差法、背景圖像差分法[1]和邊緣檢測算法。光流法運(yùn)算公式復(fù)雜、計(jì)算量大,不適用于適時(shí)性要求很高的場合。幀差法和背景圖像差分法相比光流法更簡單、易于實(shí)時(shí)操作 ,且應(yīng)用廣泛。由于背景圖像差分法對(duì)由于光照引起的動(dòng)態(tài)場景變化非常敏感,隨著時(shí)間的推移,如實(shí)際光線、環(huán)境的變化或背景中固定對(duì)象的移動(dòng)都會(huì)使得背景圖像發(fā)生變化。向海霞、王衛(wèi)星[2]提出一種利用卡爾曼濾波對(duì)背景進(jìn)行預(yù)測與更新算法;張彥[3]等人提出一種將基于特征點(diǎn)的方法和基于像素點(diǎn)的背景建模方法相結(jié)合的背景更新算法。但這些算法復(fù)雜,難以在硬件上實(shí)現(xiàn),只適合利用軟件方式實(shí)現(xiàn),很難提高速度,達(dá)到實(shí)時(shí)性要求。而2009年徐方明、盧官明[4]提出基于改進(jìn)surendra型背景更新算法的運(yùn)動(dòng)目標(biāo)檢測算法,通過改變靜態(tài)閾值為動(dòng)態(tài)閾值,利用動(dòng)態(tài)閾值更新背景模型,再將當(dāng)前圖像和當(dāng)前更新背景做差運(yùn)算之后產(chǎn)生差分圖像。該算法在有運(yùn)動(dòng)目標(biāo)存在的情況下提取出可靠的背景模型,并且能夠自適應(yīng)地對(duì)背景模型進(jìn)行較為精確的更新,更新速度較快。但所采用的是軟件方式實(shí)現(xiàn),執(zhí)行速度不高。本文采用改進(jìn)的surendra背景更新算法,針對(duì)該算法的特點(diǎn)進(jìn)行硬件結(jié)構(gòu)分析,利用FPGA流水線任務(wù)處理技術(shù)以及并行處理的優(yōu)點(diǎn),采用硬件方式對(duì)動(dòng)態(tài)背景下運(yùn)動(dòng)目標(biāo)的提取進(jìn)行實(shí)時(shí)檢測。
1 改進(jìn)型surendra背景更新算法原理
改進(jìn)surendra型背景更新算法的基本思想是事先將背景圖像儲(chǔ)存下來,利用當(dāng)前幀圖像減去背景圖像,從而比較得出運(yùn)動(dòng)目標(biāo)。由于周圍環(huán)境的變化造成圖像背景的變化,采用傳統(tǒng)靜態(tài)閾值更新背景將不能很好地適應(yīng)環(huán)境的變化,需要?jiǎng)討B(tài)閾值實(shí)時(shí)更新背景,以便更好地分割前景和背景。這里采用基于灰度直方圖中圖像最大灰度值與最小值灰度值的均值作為圖像的分割閾值。總體實(shí)現(xiàn)分為四個(gè)步驟:初始幀圖像的建立、動(dòng)態(tài)閾值的求取、背景幀圖像的更新和差值圖像的求取。改進(jìn)型surendra背景更新算法結(jié)構(gòu)如圖1所示。
(1)背景圖像的建立
將采集到的最初M幀圖像數(shù)據(jù)進(jìn)行平均,以這M幀圖像的均值圖像作為最起始的背景圖像。這樣初始背景圖像為最真實(shí)的背景圖像,減小了以單幀作為起始背景圖像時(shí),因外界環(huán)境的突變而帶來的背景圖像不準(zhǔn)確的可能性。其描述如下:
2 改進(jìn)型surendra背景更新算法硬件實(shí)現(xiàn)特點(diǎn)分析
(1)初始背景幀圖像的建立。為了能客觀地反映原始背景圖像的特點(diǎn),需要將最開始的M幀圖像進(jìn)行存儲(chǔ)再求平均,所以需要采用雙端口RAM[5,6]對(duì)M幀圖像進(jìn)行存儲(chǔ)。這里綜合考慮圖像速度和所占用資源情況,COUNTER計(jì)數(shù)用于將前M幀圖像進(jìn)行存儲(chǔ)再求平均作為初始幀的背景圖像。在求平均時(shí),需要用到除法,可以通過移位方式求平均,減小資源的占用。初始背景幀圖像原理如圖2所示。
(2)背景幀和當(dāng)前幀圖像的存儲(chǔ)。因需要對(duì)圖像背景幀更新后再進(jìn)行差分運(yùn)算,所以需要用RAM對(duì)背景幀和當(dāng)前幀圖像進(jìn)行存儲(chǔ)。由于要對(duì)背景幀和當(dāng)前幀進(jìn)行暫存,將暫存的當(dāng)前幀圖像和背景幀圖像輸出到更新模塊進(jìn)行背景更新運(yùn)算,同時(shí)將更新后的背景數(shù)據(jù)再次輸入到背景更新模塊之中,最后再將更新后的背景幀和當(dāng)前幀圖像同步輸出做差分運(yùn)算。因?yàn)橐粠行У谋尘皫彤?dāng)前幀要完成一次差分運(yùn)算需要一次寫入和兩次讀出RAM的操作,而采用2個(gè)傳統(tǒng)的雙端口RAM不能達(dá)到所要實(shí)現(xiàn)的功能,需要4個(gè)雙端口RAM才能實(shí)現(xiàn),占用的資源將多一倍,因此這里采用三端口RAM實(shí)現(xiàn)對(duì)背景幀和當(dāng)前幀圖像的存儲(chǔ),可以節(jié)省一半的RAM資源占用率。
(3)對(duì)圖像存儲(chǔ)的三端口RAM采用分時(shí)復(fù)用的方式,節(jié)約了資源占用率。同時(shí)將這兩個(gè)三端口RAM的數(shù)據(jù)并行處理,同步實(shí)現(xiàn)對(duì)背景圖像數(shù)據(jù)和當(dāng)前幀圖像數(shù)據(jù)的存取操作,并且將閾值模塊、更新算法模塊和差值模塊采用流水線技術(shù),可以大量節(jié)省對(duì)圖像數(shù)據(jù)的處理時(shí)間。
3 改進(jìn)型surendra背景更新算法的FPGA實(shí)現(xiàn)
(1)背景幀圖像的建立與存儲(chǔ)
總體硬件結(jié)構(gòu)如圖4所示。選擇模塊A是一個(gè)選擇開關(guān),用于控制前M幀的圖像數(shù)據(jù)和第M+1幀及以后圖像數(shù)據(jù)的輸入流向。在前M幀時(shí),選擇模塊A將其每一幀的數(shù)據(jù)輸入到均值模塊中,均值模塊將其每一幀圖像數(shù)據(jù)的對(duì)應(yīng)像素坐標(biāo)的像素值相加,存入到雙端口RAM A中,同時(shí)在下一幀圖像數(shù)據(jù)輸入到均值模塊時(shí)將雙端口RAM A中的圖像數(shù)據(jù)輸出,使其和下一幀對(duì)應(yīng)的圖像數(shù)據(jù)相加,并將結(jié)果重新存入RAM A中。當(dāng)?shù)贛幀圖像數(shù)據(jù)在均值模塊中相加時(shí),求對(duì)應(yīng)圖像像素坐標(biāo)的均值,并將其均值輸入到雙端口RAM A進(jìn)行鎖存,同時(shí)選擇模塊A將第M+1幀及其以后的圖像數(shù)據(jù)輸入到三端口RAM B中。
程序初始時(shí),將前面的4幀圖像數(shù)據(jù)(M=4)求均值。這里所采用的圖片尺寸是128×128,所以雙端口RAM A為存儲(chǔ)深度128×128,8 bit數(shù)據(jù)寬度。在第M幀有效數(shù)據(jù)輸入到RAM A中時(shí),即背景圖像B0存入到了RAM A中。如圖5所示。
(2)閾值T1選擇
在第M+1幀數(shù)據(jù)輸入到三端口RAM B中時(shí),RAM端口控制模塊在RAM B寫使能端WRB有效時(shí)啟動(dòng)RAM B 讀端口Qa的讀使能端RDBa有效,將第M+1幀數(shù)據(jù)讀出。分別定義兩個(gè)寄存器,將每個(gè)時(shí)鐘來的有效數(shù)據(jù)進(jìn)行比較,分別存儲(chǔ)最大像素值和最小像素值,求出最大值和最小值之后,將兩數(shù)相加并右移一位求取均值。此時(shí)選擇模塊B選通RAM A,RAM端口控制模塊使其RAM A的讀端口RDA有效。在第M+2幀以后,選擇模塊B選通RAM B端口,關(guān)閉RAM A的讀端口RDA。
(3)背景圖像的更新
當(dāng)RAM A的讀端口RDA有效時(shí), RAM B讀端口Qa的讀使能RDBa無效。在RDA有效后的第1個(gè)CLK的上升沿時(shí),將雙端口RAM A中的初始背景數(shù)據(jù)b0(i,j)和RAM C中讀端口Qa的數(shù)據(jù)I1(i,j)讀出到更新背景算法模塊,此時(shí)RAM C中讀出的數(shù)據(jù)I1(i,j)=0。
更新背景算法模塊RDA有效后的第2個(gè)CLK的上升沿時(shí)啟動(dòng)有效的判斷,若輸入的I1(i,j)與b0(i,j)滿足Ik(i,j)<T1,則將此時(shí)的背景像素值變換為b1(i,j)=ηI1(i,j)+(1-η)b0(i,j),否則b1(i,j)=b0(i,j)。當(dāng)求出第一個(gè)新的背景值b0(0,0)時(shí),更新背景算法模塊同時(shí)使RAM C寫端口WRC有效,將b1(i,j)輸入到RAM C暫存。在第三個(gè)CLK的上升沿,啟動(dòng)RAM B讀端口Qb的使能信號(hào)RDBb和RAM C讀端口Qb的使能信號(hào)RDCb有效,同步讀出當(dāng)前幀的圖像數(shù)據(jù)I1(i,j)和更新后的背景圖像數(shù)據(jù)b0(i,j)。此時(shí)第M+1幀的有效圖像數(shù)據(jù)和當(dāng)前幀的背景圖像數(shù)據(jù)同步輸出到差分模塊中。利用流水線方式,依次將第M+2幀及其以后的圖像數(shù)據(jù)存入到RAM B中,并利用RAM B和RAM C進(jìn)行背景更新,將更新后的背景數(shù)據(jù)與當(dāng)前幀數(shù)據(jù)同步輸出。這里以η=0.875,即η=1/4+1/8來進(jìn)行硬件設(shè)計(jì),SEL用于判斷是背景值不變還是背景像素需要更新,DELAY用于保證數(shù)據(jù)的同步性。算法結(jié)構(gòu)如圖6所示。
采用Quartus II軟件對(duì)系統(tǒng)進(jìn)行綜合、仿真,系統(tǒng)在FPGA芯片中(EP2C70F672C6)實(shí)現(xiàn)。當(dāng)采用50 MHz時(shí)鐘處理圖像大小為128×128×8的灰度圖像時(shí),背景更新和目標(biāo)物體的提取所需時(shí)間大約為0.755 4 ms。由于采用流水線及并行處理操作方式,使其背景更新、目標(biāo)提取和差分處理同步進(jìn)行,加快了處理速度,從而完全能夠保證圖像系統(tǒng)的實(shí)時(shí)性。
4 實(shí)驗(yàn)驗(yàn)證
圖7(a)為模型飛機(jī)在不同運(yùn)動(dòng)時(shí)刻不同姿態(tài)的幀圖像;圖7(b)為固定閾值背景更新、更新速率為0.875時(shí)所提取到的目標(biāo)飛機(jī);圖7(c)為動(dòng)態(tài)閾值背景更新、更新速率也為0.875時(shí)所提取到的目標(biāo)飛機(jī)??梢妱?dòng)態(tài)閾值能更有效適應(yīng)動(dòng)態(tài)環(huán)境運(yùn)動(dòng)目標(biāo)物體的提取。
本文針對(duì)改進(jìn)型surendra背景更新算法原理的特點(diǎn),結(jié)合硬件描述語言以及RAM存儲(chǔ)器,提出了改進(jìn)型surendra背景更新算法的硬件實(shí)現(xiàn)方案,并在FPGA芯片中實(shí)現(xiàn)了對(duì)運(yùn)動(dòng)目標(biāo)物體的實(shí)時(shí)提取,提高了對(duì)運(yùn)動(dòng)目標(biāo)物體的提取速度,同時(shí)也減少了系統(tǒng)資源的占用率,保證了系統(tǒng)的實(shí)時(shí)性要求。本方法在圖像處理中有著廣泛的應(yīng)用前景。
評(píng)論