摘 要:在此設(shè)計(jì)出一種基于DSP+FPGA技術(shù)的面向異步視頻的嵌入式圖像處理系統(tǒng),以一種靈活的架構(gòu)避免了幀間不同步方法對(duì)雙口RAM顯存的需求,既能夠保證圖像輸出質(zhì)量,又有利于提升圖像處理的性能指標(biāo)。系統(tǒng)以FPGA為核心,連接DSP和4片幀存,通過幀存的循環(huán)復(fù)用將緩存和顯存融合起來,省略了數(shù)據(jù)搬運(yùn)的環(huán)節(jié)。當(dāng)輸入幀頻小于輸出幀頻時(shí),從系統(tǒng)總體的角度分析幀存的狀態(tài)轉(zhuǎn)換規(guī)律;當(dāng)輸入幀頻大于輸出幀頻時(shí),從單個(gè)幀存的角度分析幀存的狀態(tài)轉(zhuǎn)換規(guī)律,并給出了可編程邏輯設(shè)計(jì)的源程序。該方案已在產(chǎn)品中應(yīng)用,通過升級(jí)能夠滿足更高的技術(shù)要求。
關(guān)鍵詞:異步視頻; 圖像處理; 嵌入式系統(tǒng); FPGA; 幀存切換
中圖分類號(hào):TN91934; TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004373X(2012)22001404
收稿日期:20120612 圖像處理系統(tǒng)輸入視頻信息,運(yùn)行圖像處理算法,輸出處理后的圖像信號(hào),實(shí)現(xiàn)目標(biāo)檢測(cè)、跟蹤、識(shí)別等功能。系統(tǒng)的輸入和輸出常常是不同的視頻格式,二者由于幀頻的不同,處于異步的狀態(tài)。為了提高異步視頻時(shí)輸出畫面的質(zhì)量,本文展開了深入的研究,設(shè)計(jì)出一種基于DSP+FPGA技術(shù)的面向異步視頻的嵌入式圖像處理系統(tǒng),提高了輸出圖像的視覺效果,結(jié)構(gòu)簡(jiǎn)潔,具有小巧靈活的優(yōu)點(diǎn)。
1 異步視頻的處理方法
如果圖像處理系統(tǒng)的輸入為復(fù)合模擬視頻,幀頻25 Hz;輸出為XGA格式,幀頻60 Hz;一幅輸入畫面平均產(chǎn)生2.4次輸出畫面,此時(shí)系統(tǒng)處理的就是異步視頻,有3種處理方法:幀內(nèi)不同步方法、幀間不同步方法和準(zhǔn)同步方法。
(1) 幀內(nèi)不同步方法。輸出幀以輸入幀的幀頻進(jìn)行切換,當(dāng)一幀輸入數(shù)據(jù)準(zhǔn)備好后,輸出幀就切換到新一幀的視頻數(shù)據(jù),不管此時(shí)輸出幀進(jìn)行到了哪個(gè)時(shí)刻。這種模式中輸入幀和輸出幀處于幀內(nèi)的不同步狀態(tài),即輸出幀的畫面可能由非同一幅輸入幀畫面組成。當(dāng)相鄰的兩幀圖像存在較大差異(目標(biāo)與傳感器有較高的相對(duì)運(yùn)動(dòng))時(shí),輸出幀的畫面會(huì)出現(xiàn)明顯的分界。例如視頻采集卡采集復(fù)合視頻信號(hào)在PC機(jī)監(jiān)視器上顯示,動(dòng)態(tài)畫面的分界清晰可辨[1]。
(2) 幀間不同步方法。把不同步局限在幀間的狀態(tài),當(dāng)一幀輸入數(shù)據(jù)準(zhǔn)備好后,輸出幀不會(huì)立即切換到新一幀的視頻數(shù)據(jù),而是根據(jù)輸出幀自身的時(shí)序做出選擇。只有當(dāng)前輸出幀輸出完畢后,才會(huì)切換到新一幀的視頻數(shù)據(jù),保證了輸出的每幅畫面都有一個(gè)對(duì)應(yīng)的輸入畫面,不會(huì)出現(xiàn)2個(gè)輸入畫面拼接的狀況。如果一幅輸入畫面平均產(chǎn)生2.4次輸出畫面,那么某些輸入畫面顯示了2次,某些輸入畫面顯示了3次。原來在時(shí)間上均勻顯示的輸入畫面,在輸出時(shí)不再均勻。當(dāng)輸入畫面中存在勻速運(yùn)動(dòng)的物體時(shí),在輸出畫面中,物體會(huì)出現(xiàn)跳躍式的運(yùn)動(dòng)。這種顯示效果在大多數(shù)應(yīng)用環(huán)境中肉眼難以覺察,是目前嵌入式圖像處理系統(tǒng)廣泛采用的處理異步視頻的方法[24]。比較第一種方法,硬件設(shè)計(jì)的復(fù)雜度有所提高,但保證了用戶的觀測(cè)效果。
(3) 準(zhǔn)同步方法。輸出幀和輸入幀在一段時(shí)間上基本對(duì)應(yīng),接近同步的效果。雖然輸入和輸出的幀頻不同,但系統(tǒng)根據(jù)相鄰的輸入幀圖像的變化特點(diǎn),生成一些中間幀,加入到輸出幀序列中,突出了輸出幀頻提高的顯示效果,能夠保持畫面的連續(xù)性。這種方法多用于視頻格式轉(zhuǎn)換系統(tǒng),其存儲(chǔ)器的空間要滿足幀速率轉(zhuǎn)換算法的要求。某些視聽大屏幕設(shè)備只轉(zhuǎn)換特定的幾種視頻格式,特殊的算法可使存儲(chǔ)器空間最小化,以利于降低成本[56]。
圖像處理系統(tǒng)面對(duì)異步視頻時(shí),非專用于視頻格式轉(zhuǎn)換目的情況下,實(shí)現(xiàn)幀間不同步的輸出效果即可。一般的解決方案是準(zhǔn)備3幀數(shù)據(jù)空間的雙口RAM顯存,無論寫入速度多少,都能夠避免寫入和讀出的沖突。本文設(shè)計(jì)出一種基于DSP+FPGA技術(shù)的嵌入式圖像處理系統(tǒng),以一種靈活的架構(gòu)避免了顯存的需求,既能夠保證圖像輸出質(zhì)量,又有利于提升圖像處理的性能指標(biāo)。
2 嵌入式圖像處理系統(tǒng)
2.1 功能架構(gòu)
通常圖像系統(tǒng)中數(shù)據(jù)流環(huán)節(jié)依次為:輸入接口、FPGA、數(shù)據(jù)緩存、DSP、顯存等。其中顯存中的數(shù)據(jù)以幀為單位切換輸出,兩幀乒乓的方式只能用于同步狀態(tài)[710]。本系統(tǒng)設(shè)計(jì)的功能架構(gòu)如圖1所示,可以把緩存和顯存融合在一起,通過FPGA切換的方式免除數(shù)據(jù)搬運(yùn)的過程。
圖1 功能架構(gòu)圖可編程邏輯器件(FPGA)將數(shù)字信號(hào)處理器(DSP)、4片幀存以及輸入和輸出視頻數(shù)據(jù)流連接起來。依據(jù)功能狀態(tài),幀存定義為寫入幀、處理幀、讀出幀、緩存幀、廢棄幀,其中緩存幀和廢棄幀不同時(shí)存在。寫入幀指該幀存與視頻數(shù)據(jù)輸入流連接,正在存儲(chǔ)輸入的視頻數(shù)據(jù);處理幀指該幀存與DSP連接,作為DSP的數(shù)據(jù)緩存,供軟件讀寫;讀出幀指該幀存與視頻數(shù)據(jù)輸出流連接,視頻數(shù)據(jù)正在被讀出顯示;緩存幀指處理幀的下一個(gè)狀態(tài),等待被讀出顯示,處于孤立狀態(tài);廢棄幀指視頻數(shù)據(jù)已經(jīng)完成輸出,等待被新的數(shù)據(jù)寫入,處于孤立狀態(tài)。每一幀視頻數(shù)據(jù)與一片幀存關(guān)聯(lián),依次經(jīng)歷寫入、處理、緩存、讀出、廢棄的狀態(tài)(不一定是全部的狀態(tài))。FPGA依據(jù)規(guī)則切換4片幀存,循環(huán)往復(fù)。
嵌入式圖像處理系統(tǒng)的功能分為圖像處理和視頻轉(zhuǎn)換2部分。圖像處理功能主要由DSP實(shí)現(xiàn),當(dāng)輸入的視頻數(shù)據(jù)成為處理幀時(shí),DSP軟件要在一個(gè)輸入幀周期內(nèi)讀入數(shù)據(jù)、執(zhí)行處理算法、用新的數(shù)據(jù)覆蓋幀存(該幀存隨后會(huì)讀出顯示)。圖像處理結(jié)果可以從DSP的通訊接口上報(bào),必要時(shí),F(xiàn)PGA也可以完成部分圖像處理算法,減輕軟件負(fù)擔(dān)。視頻轉(zhuǎn)換功能指FPGA對(duì)4片幀存的切換來實(shí)現(xiàn)異步視頻的幀間不同步方法。
2.2 切換規(guī)則
在異步視頻的幀間不同步狀態(tài)下,輸出幀的完整性需要保證,幀存的切換不能只依據(jù)輸入幀的同步信號(hào),還必須考慮輸出幀的同步信號(hào),嵌入式圖像處理系統(tǒng)利用第4片幀存提供時(shí)間上的緩沖。幀存共有5種狀態(tài),任一時(shí)刻4片幀存分別對(duì)應(yīng)寫入、處理、讀出、緩存(廢棄),幀存的寫入、處理、緩存狀態(tài)由輸入幀的同步信號(hào)觸發(fā)確定,幀存的讀出、廢棄狀態(tài)由輸出幀的同步信號(hào)觸發(fā)確定。
2.3 狀態(tài)轉(zhuǎn)換程序設(shè)計(jì)
設(shè)定4片幀存的初始狀態(tài)見表1。
幀存的狀態(tài)由兩種同步信號(hào)觸發(fā)轉(zhuǎn)換,因此設(shè)定為輸入和輸出兩部分狀態(tài)的組合。
2.3.1 輸入幀頻小于輸出幀頻
在輸入幀頻小于輸出幀頻的情況下,每一個(gè)輸入幀都會(huì)被讀出顯示。在每個(gè)輸入幀周期中,至少會(huì)發(fā)生1次輸出幀同步觸發(fā)事件,第1次輸出幀同步信號(hào)觸發(fā)之后,原緩存狀態(tài)的幀存切換到讀出狀態(tài),原讀出狀態(tài)幀存轉(zhuǎn)換為廢棄狀態(tài),然后保持不變,直到新的輸入幀同步信號(hào)到來。從系統(tǒng)整體分析4片幀存的狀態(tài)轉(zhuǎn)換過程,得出表2的結(jié)果。
表2顯示系統(tǒng)狀態(tài)轉(zhuǎn)換的一個(gè)循環(huán)包含8種情況,由4種輸入和4種輸出組合而成,每種輸出狀態(tài)對(duì)應(yīng)一個(gè)處于讀出狀態(tài)的幀存。
源程序如下:
/* 系統(tǒng)狀態(tài)輸入部分的轉(zhuǎn)換進(jìn)程 */
/* INFRMSYN: 輸入幀同步信號(hào),SYSTEMMEMIN: 系統(tǒng)的輸入狀態(tài)(0~3) */
IF FALLING_EDGE(INFRMSYN) THEN
SYSTEMMEMIN<=SYSTEMMEMIN+1;
END IF;
/* 系統(tǒng)狀態(tài)輸出部分的轉(zhuǎn)換進(jìn)程 */
/* OUTFRMSYN: 輸出幀同步信號(hào),SYSTEMMEMOUT: 系統(tǒng)的輸出狀態(tài)(0~3) */
IF FALLING_EDGE(OUTFRMSYN) THEN
IF SYSTEMMEMIN=0 THEN
SYSTEMMEMOUT<=1;
ELSIF SYSTEMMEMIN=1 THEN
SYSTEMMEMOUT<=2;
ELSIF SYSTEMMEMIN=2 THEN
SYSTEMMEMOUT<=3;
ELSE
SYSTEMMEMOUT<=0;
END IF;
END IF;
2.3.2 輸入幀頻大于輸出幀頻
在輸入幀頻大于輸出幀頻的情況下,一個(gè)輸入幀周期內(nèi),如果接收到輸出幀同步信號(hào),緩存幀會(huì)轉(zhuǎn)換為讀出幀,否則會(huì)被重新寫入,沒有機(jī)會(huì)輸出顯示。幀存的狀態(tài)轉(zhuǎn)換與其原來的狀態(tài)相關(guān),具有隨機(jī)特性,不宜從系統(tǒng)總體確定狀態(tài)循環(huán),只能從單個(gè)幀存的角度分析狀態(tài)轉(zhuǎn)換規(guī)律。
設(shè)定某幀存輸入部分為寫入、處理、半緩存、無效4種狀態(tài),輸出部分為讀出、廢棄、無效3種狀態(tài),二者組合確定該幀存的狀態(tài),如表3所示。
單個(gè)幀存的狀態(tài)轉(zhuǎn)換流程如圖2所示。
圖2 幀存狀態(tài)轉(zhuǎn)換流程圖圖2中X代表廢棄或無效狀態(tài)。某片幀存從寫入狀態(tài)開始,受輸入幀同步信號(hào)觸發(fā)后轉(zhuǎn)換為處理狀態(tài),再次觸發(fā)后轉(zhuǎn)換為半緩存狀態(tài),期間的輸出幀同步信號(hào)不會(huì)改變幀存狀態(tài),只能確定輸出部分為無效狀態(tài)。半緩存狀態(tài)時(shí)受輸出幀同步信號(hào)觸發(fā)進(jìn)入讀出狀態(tài)(半緩存|讀出),否則受輸入幀同步信號(hào)觸發(fā)返回寫入狀態(tài)。讀出狀態(tài)(半緩存|讀出)不會(huì)受輸出幀同步信號(hào)的觸發(fā)改變,但接受一次輸入幀同步信號(hào)后會(huì)成為新的讀出狀態(tài)(無效|讀出),此時(shí)系統(tǒng)有了新的緩存幀,當(dāng)輸出幀同步信號(hào)來到后轉(zhuǎn)換為廢棄狀態(tài),此時(shí)新的緩存幀進(jìn)入讀出狀態(tài),再次受輸入幀同步觸發(fā)后返回寫入狀態(tài)。
幀存1的狀態(tài)轉(zhuǎn)換源程序如下,其他3片幀存類似。
/* 幀存狀態(tài)輸入部分的轉(zhuǎn)換進(jìn)程 */
/* INFRMSYN: 輸入幀同步信號(hào),MEM1STUTUSIN: 幀存1的輸入狀態(tài),MEM1STUTUSOUT: 幀存1的輸出狀態(tài) */
IF FALLING_EDGE(INFRMSYN) THEN
IF MEM1STATUSIN=WRITING THEN
MEM1STATUSIN<=HANDLING;
/* 如果是寫入狀態(tài),則轉(zhuǎn)換為處理狀態(tài) */
ELSIF MEM1STATUSIN=HANDLING THEN
MEM1STATUSIN<=BUFFER;
/* 如果是處理狀態(tài),則轉(zhuǎn)換為半緩存狀態(tài) */
ELSEIF MEM1STATUSIN=BUFFER THEN
/* 如果是半緩存狀態(tài) */
IF MEM1STATUSOUT=READING THEN
/* 且輸出部分是讀出狀態(tài) */
MEM1STATUSIN<=NOUSEIN;
/* 轉(zhuǎn)換為無效狀態(tài) */
ELSIF MEM1STATUSOUT=READED THEN
/* 且輸出部分為廢棄狀態(tài) */
MEM1STATUSIN<=WRITING;
/* 轉(zhuǎn)換為寫入狀態(tài) */
ELSIF MEM1STATUSOUT=NOUSEOUT THEN
/* 且輸出部分為無效狀態(tài) */
MEM1STATUSIN<=WRITING;
/* 轉(zhuǎn)換為寫入狀態(tài) */
END IF;
ELSEIF MEM1STATUSIN=NOUSEIN THEN
/* 如果是無效狀態(tài) */
IF MEM1STATUSOUT=READING THEN
/* 且輸出部分為讀出狀態(tài) */
MEM1STATUSIN<=NOUSEIN;
/* 轉(zhuǎn)換為無效狀態(tài) */
ELSIF MEM1STATUSOUT=READED THEN
/* 且輸出部分為廢棄狀態(tài) */
MEM1STATUSIN<=WRITING;
/* 轉(zhuǎn)換為寫入狀態(tài) */
END IF;
END IF;
END IF;
/* 幀存狀態(tài)輸出部分的轉(zhuǎn)換進(jìn)程 */
/* OUTFRMSYN: 輸出幀同步信號(hào) */
IF FALLING_EDGE(OUTFRMSYN) THEN
IF MEM1STATUSIN=WRITING THEN
/* 如果輸入部分為寫入狀態(tài) */
MEM1STATUSOUT<=NOUSEOUT;
/* 轉(zhuǎn)換為無效狀態(tài) */
ELSIF MEM1STATUSIN=HANDLING THEN
/* 如果輸入部分為處理狀態(tài) */
MEM1STATUSOUT<=NOUSEOUT;
/* 轉(zhuǎn)換為無效狀態(tài) */
ELSIF MEM1STATUSIN=BUFFER THEN
/* 如果輸入部分為半緩存狀態(tài) */
MEM1STATUSOUT<=READING;
/* 轉(zhuǎn)換為讀出狀態(tài) */
ELSIF MEM1STATUSIN=NOUSEIN THEN
/* 如果輸入部分為無效狀態(tài) */
MEM1STATUSOUT<=READED;
/* 轉(zhuǎn)換為廢棄狀態(tài) */
END IF;
END IF;
3 結(jié) 語
本文設(shè)計(jì)的以FPGA,DSP和4片幀存為主體的面向異步視頻的嵌入式圖像處理系統(tǒng),把視頻數(shù)據(jù)緩存和視頻輸出顯存融合在一起,節(jié)省了數(shù)據(jù)傳輸?shù)臅r(shí)間。FPGA依據(jù)輸入和輸出幀同步信號(hào)切換4片幀存,能夠?qū)崿F(xiàn)異步視頻時(shí)幀間不同步狀態(tài),無需滿足幀頻轉(zhuǎn)換算法對(duì)存儲(chǔ)器空間的要求。采用更先進(jìn)的存儲(chǔ)器、DSP、FPGA芯片能夠提高數(shù)據(jù)傳輸速度,擴(kuò)充數(shù)據(jù)存儲(chǔ)空間,加強(qiáng)軟件處理能力,實(shí)現(xiàn)系統(tǒng)整體性能指標(biāo)的升級(jí)。本方案已經(jīng)在產(chǎn)品中應(yīng)用,具有嵌入式系統(tǒng)小尺寸、低功耗的優(yōu)點(diǎn),通過升級(jí)能夠滿足更高的技術(shù)要求。
參 考 文 獻(xiàn)
[1] 余奔,劉一清,張應(yīng)均.基于FPGA的彩色圖像增強(qiáng)系統(tǒng)[J].電子設(shè)計(jì)工程,2010,18(6):710.
[2] 李江輝,王景存.基于FPGA的視頻采集與顯示系統(tǒng)設(shè)計(jì)[J].電視技術(shù),2011,35(13):1921.
[3] 李翠娟,牛文生,楊敬寶.基于FPGA的視頻轉(zhuǎn)換模塊設(shè)計(jì)與實(shí)現(xiàn)[J].航空計(jì)算技術(shù),2010,40(1):125130.
[4] 鄭永進(jìn),吳西陵.視頻格式轉(zhuǎn)換資源最小FPGA解決方案[J].電子器件,2007,30(2):2225.
[5] 王南飛,姚素英,陸堯,等.視頻格式轉(zhuǎn)換芯片中幀頻提升算法及硬件實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2007,30(8):1416.
[6] 尤力,夏偉杰,周建江.基于FPGA機(jī)載實(shí)時(shí)視頻圖形處理系統(tǒng)的設(shè)計(jì)[J].電子科技,2011,24(11):6365.
[7] 左事君,劉新朝,何巧珍,等.基于FPGA的高清視頻采集與顯示系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2011,37(6):5658.
[8] 楊月娥.基于FPGA的視頻幀同步機(jī)的設(shè)計(jì)[J].電視技術(shù),2009,33(9):3033.
[9] 黎之樂,王興東,周軍,等.雙視立體視頻同步合成系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2011,35(12):8487.
[10] 冉歡歡,劉建高,高升久,等.一種基于FPGA的圖像觀瞄系統(tǒng)消像旋設(shè)計(jì)[J].信息與電子工程,2011,9(1):130133.
[11] 舒志猛,陳素華.基于FPGA和DSP的高速圖像處理系統(tǒng)\[J\].現(xiàn)代電子技術(shù),2012,35(4):142144.
作者簡(jiǎn)介: 鄭 鑫 男,1971年出生,河南洛陽人,高級(jí)工程師。研究方向嵌入式圖像處理系統(tǒng)。