反射式全景視頻實(shí)時(shí)平面顯示技術(shù)的FPGA實(shí)現
虛擬現實(shí)技術(shù)可分為兩類(lèi)[1],一類(lèi)是基于三維圖形生成的虛擬場(chǎng)景技術(shù),另一類(lèi)則是基于實(shí)景采集通過(guò)幾何變換獲得近似的真實(shí)場(chǎng)景。反射式全景傳感器非常適合于構建實(shí)景采集的真實(shí)場(chǎng)景。在過(guò)去的十年中, 多種反射式全景傳感器相繼問(wèn)世[2]。反射式全景傳感器由攝像機和曲面反射鏡組成, 與普通攝像機不同的是,它可以一次性采集360°圓周內的全部景象, 因此得到了廣泛應用[3]。
目前,反射式全景技術(shù)的研究主要將注意力集中在幾何變換算法和鏡頭校正算法的改進(jìn),對采集和顯示的同步性問(wèn)題研究甚少,如文獻[1]和文獻[4]所做的工作是在圖形工作站實(shí)現的,便攜性差,無(wú)法適應嵌入式多媒體應用的要求。另一方面,實(shí)際應用中往往要求展開(kāi)后的平面顯示圖像有較高的分辨率,而反射鏡體積的限制使成像分辨率有限,展開(kāi)后的圖像呈現有規律的鋸齒失真和灰度階梯化現象。這就需要通過(guò)相應的視頻后處理算法生成人眼能夠接受的圖像。上述兩個(gè)問(wèn)題給反射式全景視頻的實(shí)時(shí)平面顯示在嵌入式視頻處理平臺上的應用帶來(lái)挑戰。
1 全景圖像展開(kāi)算法及其存在的問(wèn)題
1.1 全景圖像展開(kāi)算法
1.2 失真現象的產(chǎn)生原因及解決
經(jīng)過(guò)變換展開(kāi)后的平面圖像,其坐標變換是非線(xiàn)性采樣過(guò)程,即采樣點(diǎn)呈環(huán)狀分布,不同半徑的環(huán)狀采樣點(diǎn)數相同。如果以原圖像最大半徑的采樣點(diǎn)數作為基準對整幅圖像進(jìn)行展開(kāi),則半徑越小放大倍數越高,從而導致原圖像中靠近圓心的部分展開(kāi)后存在明顯的鋸齒化和階梯化失真現象。具體地說(shuō),由于像素值的不連續性,直接放大圖像會(huì )使這種不連續性被放大。鋸齒失真就是由于放大了圖像邊緣的鋸齒狀像素產(chǎn)生的;階梯失真的產(chǎn)生,則是由于不連續的圖像梯度邊緣像素值直接被復制放大,使原先并不明顯的梯度邊緣像素值被放大為肉眼能夠分辨的一個(gè)接一個(gè)的階梯。
2 算法的改進(jìn)和硬件實(shí)現
考慮到在平面圖像的放大研究中,為避免圖像失真,常采用經(jīng)典的雙線(xiàn)性插值和三次線(xiàn)性差值及其改進(jìn)算法[5~7]。而全景圖像的展開(kāi)與平面圖像的放大存在不同,每個(gè)像素的鄰域位置不固定,是非線(xiàn)性的放大過(guò)程。因此經(jīng)典的差值算法及其改進(jìn)算法不能應用于全景圖像的展開(kāi)。根據上述全景圖像展開(kāi)的特性,結合FPGA硬件的可實(shí)現性,提出算法如下:對展開(kāi)的圖像采用參數可變的高斯空間濾波,其基本思路是對展開(kāi)后的圖像根據鋸齒和階梯失真的程度,使用不同尺寸的高斯濾波窗進(jìn)行空間濾波。
3 硬件系統實(shí)現
實(shí)時(shí)反射式全景視頻處理要求高的處理能力。例如,NTSC制式視頻標準要求30幀/s,每幀約0.25 M像素,即每秒7.5 M像素流量;PAL制式視頻標準要求25幀/s,而每幀的像素數卻更多,總的像素流量與NTSC制式基本相當。而對每個(gè)像素的處理量取決于采用的具體算法。通常的方法是使用DSP處理器陣列或單片高端DSP完成??紤]到本算法的查找表操作,需要大量的存儲器資源,對于DSP處理器來(lái)說(shuō),由于成本和空間的限制,需要外接DRAM存儲器和復雜控制邏輯,而外接存儲器控制邏輯存在帶寬限制,使其成為DSP高速圖像處理的主要瓶頸之一。另外,考慮到今后更高分辨率顯示導致的更高的數據處理量,DSP的實(shí)現方案將更加難以實(shí)現。FPGA提供了可替代的視頻處理平臺,FPGA支持高效并發(fā)數據流結構,這對于圖像處理算法的實(shí)時(shí)實(shí)現至關(guān)重要。此外FPGA內部的嵌入式SRAM存儲器是查找表操作的理想選擇。
3.1 整體硬件系統設計
本系統實(shí)現平臺以Altera的FPGA芯片Cyclone II EP2C70F896C6為核心。系統的主要模塊結構如圖2所示。
由于平面顯示器一次只能顯示90°場(chǎng)景,故將全景圖像分為四塊,待需要顯示時(shí)再通過(guò)展開(kāi)算法模塊進(jìn)行展開(kāi)計算并顯示。圖像展開(kāi)算法及VGA控制模塊為本系統中的核心模塊。由于圖像展開(kāi)時(shí)有效圖像信息占原圖的3/4,為了節省資源,本文對分塊之后的圖像篩選出有效圖像部分存入M4K存儲器中,利用VGA控制模塊產(chǎn)生的VGA行列掃描信號和正余弦查找表實(shí)時(shí)產(chǎn)生M4K存儲器讀地址,實(shí)現展開(kāi)算法。模塊結構如圖3所示。
3.2 空間濾波器的硬件設計
圖4為二維圖像濾波器的結構圖。輸入像素在Line Buffer中前移,產(chǎn)生延遲的一行。Buffer的深度依賴(lài)于每一行的像素數。這些延遲的行的像素不斷輸入濾波器組。在每個(gè)濾波器節點(diǎn),像素被做特定的濾波操作,全部累加器的結果在地址樹(shù)疊加后產(chǎn)生濾波器輸出。
一般硬件執行效率用累加次數來(lái)衡量。這樣,非對稱(chēng)濾波器的復雜度就正比于m×m。m×m是卷積和的尺寸。鋸齒失真噪聲抑制功能由m×m的高斯核實(shí)現,這個(gè)核在圖像上按行滑動(dòng)。所謂參數可變的空間濾波器,即m×m的高斯核尺寸是可調節的??紤]到高斯函數的計算涉及三角函數運算,每次尺寸改變時(shí)采用硬件計算生成新的高斯核的方法不妥,且隨著(zhù)高斯核的尺寸增大計算時(shí)間也相應增大。為了滿(mǎn)足時(shí)鐘同步的要求就必須提供最大高斯核計算所需的時(shí)間,作為每個(gè)高斯核計算的固定延時(shí),這樣做顯然在小尺寸的高斯核計算時(shí)間中存在大量的冗余等待時(shí)間,這對整個(gè)系統的實(shí)時(shí)性十分不利??紤]視頻圖像的尺寸是一定的,故采用查找表記錄高斯核序列,由于高斯核的尺寸相對于整幅圖像非常小,且其序列個(gè)數與圖像的行數呈正比,故占用的存儲空間也不大。這里將圖像劃分為12個(gè)橫向帶狀區域,最上方的帶狀區域采用3×3的高斯核,而下一行則在上一行的基礎上+2,以此類(lèi)推,最后第n帶狀區域所使用的高斯核的尺寸為2n+1=25。
4 實(shí)驗
4.1 硬件系統實(shí)時(shí)性
本文中系統的延遲指視頻流進(jìn)入FPGA到VGA顯示的時(shí)間差,在系統中表現為A/D輸出數據管腳(iTD1_D)上出現的第一個(gè)數據和D/A輸入數據管腳(oVGA_R,oVGA_G,oVGA_B)上出現的第一個(gè)數據之間的時(shí)間差。
使用Quartus II中集成的SignalTap在線(xiàn)邏輯分析儀對系統延遲進(jìn)行測量。SignalTap的作用是在系統中添加一個(gè)與JTAG接口相連的模塊,將用戶(hù)關(guān)心的管腳數據波形通過(guò)JTAG接口上傳。由于FPGA芯片內部SRAM的限制使SignalTap數據長(cháng)度有限,所以本文設計了一個(gè)計數器模塊對上述時(shí)間差中的系統時(shí)鐘(iTD1_CLK27,27 MHz)進(jìn)行計數,從而計算得到系統延遲,以證明本系統的實(shí)時(shí)性。
由于開(kāi)機時(shí)間的誤差,所以每次計算所得的計數值都不相同。本文對展開(kāi)前、展開(kāi)后無(wú)濾波和展開(kāi)后濾波分別實(shí)驗10次,對總共30次的實(shí)驗結果進(jìn)行分析得到系統延遲。30次實(shí)驗結果如表1所示。
分別取均值后得到展開(kāi)前數據延遲為2 417 159個(gè)系統時(shí)鐘,即系統延遲為89.254 ms;展開(kāi)后無(wú)濾波數據延遲為2 432 706個(gè)系統時(shí)鐘,即系統延遲為90.100 ms;展開(kāi)后濾波數據延遲為2 533 135個(gè)系統時(shí)鐘,即系統延遲為93.820 ms。其中展開(kāi)算法和濾波算法耗時(shí)分別為0.846 ms和3.720 ms。直觀(guān)觀(guān)察,顯示器顯示內容的移動(dòng)和實(shí)際物體移動(dòng)基本同時(shí)進(jìn)行。
4.2 實(shí)際顯示效果
分別進(jìn)行直接展開(kāi)、參數固定和參數可變高斯空間濾波器處理后展開(kāi)說(shuō)明三者區別。
在圖5(b)中,展開(kāi)圖像下部鋸齒和階梯失真非常明顯;圖5(c)中雖然下部鋸齒被消除,但是上部圖像也變得模糊,圖像細節被嚴重破壞;圖5(d)中使用的參數可變高斯濾波器保持了圖像上部的細節,同時(shí)消除了下部的鋸齒。
本文以ALTERA主流FPGA為開(kāi)發(fā)平臺,實(shí)現了對反射式全景攝像機所得的視頻流的實(shí)時(shí)平面展開(kāi),并使用參數可變高斯濾波器對展開(kāi)后產(chǎn)生的鋸齒和階梯失真進(jìn)行了有效的抑制,同時(shí)保留了圖像的細節。本系統展開(kāi)算法耗時(shí)0.846 ms,濾波算法耗時(shí)3.720 ms,而VGA顯示64.4幀/s,平均每幀為15.528 ms,遠遠大于本系統算法總耗時(shí)4.566 ms。本系統可以在一幀的時(shí)間內完成算法,能夠滿(mǎn)足絕大多數高速應用的要求。
評論