摘 要: 以FPGA為核心,,利用其內(nèi)部的Avalon總線技術(shù),在SoPC Builder中將Flash和SRAM從外設(shè)及自己設(shè)計(jì)的兩個(gè)DMA采集和DMA顯示主外設(shè)集成到一個(gè)Avalon系統(tǒng)中,,構(gòu)建出基于FPGA的全景圖像實(shí)時(shí)處理平臺(tái),。結(jié)果證明,本系統(tǒng)可以完成對(duì)分辨率為2 048×2 048,、15f/s的Camera Link接口全景圖像的實(shí)時(shí)采集,、存儲(chǔ)并解算成適于觀察的柱面圖像,并以1 024×768的分辨率實(shí)時(shí)顯示,。
關(guān)鍵詞: 全景結(jié)算,;Camera Link;Avalon總線,;存儲(chǔ)器
?
全景視覺具有大的視場(chǎng)范圍,,被廣泛應(yīng)用于各種領(lǐng)域,如機(jī)器人導(dǎo)航,、太空探測(cè),、視頻監(jiān)控、視頻會(huì)議和虛擬現(xiàn)實(shí)等各個(gè)方面,。當(dāng)今應(yīng)用最廣的全景視覺系統(tǒng)是在一塊CCD或CMOS感光器件上形成360°的全景圖像,,然后通過軟件算法還原成真實(shí)圖像。這就會(huì)帶來一個(gè)問題,,即同樣大小的感光器件上所容納的視場(chǎng)越大,,單個(gè)物體所占有的像素就會(huì)越少,從而導(dǎo)致所關(guān)心的具體目標(biāo)分辨率大大降低,,甚至不滿足觀測(cè)要求,。這一問題只能通過增加感光器件自身的分辨率來解決,然而普通視頻格式的分辨率是720×576,,無法改變,,所以采用IMPERX公司的IPX-4M15-LC型Camera Link接口的科學(xué)級(jí)高分辨率數(shù)字相機(jī),分辨率為2 048×2 048,,幀速率為15f/s,,這樣可以在很大程度上改善全景圖像的清晰度。但是分辨率提高的同時(shí),,通信數(shù)據(jù)量也增加為普通視頻的十倍多,,這就對(duì)通用計(jì)算機(jī)CPU的處理能力和PCI總線的通信能力提出了挑戰(zhàn)。經(jīng)過試驗(yàn),,使用CPU主頻為2.81GHz的通用計(jì)算機(jī)和PCI采集卡構(gòu)成的高分辨率全景視覺系統(tǒng),,當(dāng)進(jìn)行柱面展開或者局部透視展開時(shí),,與普通視頻全景成像系統(tǒng)相比,,在圖像清晰度提高的同時(shí),幀速率下降為4f/s~6f/s,,實(shí)時(shí)性大大降低,,不能滿足實(shí)時(shí)觀測(cè)的應(yīng)用領(lǐng)域的要求,。另外通用計(jì)算機(jī)處理系統(tǒng)由于其體積、重量和穩(wěn)定性等方面原因,,在苛刻條件下亦無法使用,。
1 全景系統(tǒng)介紹
1.1 全景成像原理
系統(tǒng)采用雙曲面折反射式全景成像,折反射全景成像系統(tǒng)可根據(jù)是否滿足單視點(diǎn)成像約束分為單視點(diǎn)成像系統(tǒng)和非單視點(diǎn)成像系統(tǒng),。在監(jiān)視和場(chǎng)景的三維重建應(yīng)用中,,要求獲得透視圖像,因此在系統(tǒng)設(shè)計(jì)時(shí)應(yīng)滿足單視點(diǎn)約束,,保證系統(tǒng)成像滿足針孔模型,。在本全景成像系統(tǒng)中,來自水平方向360°的光線都可以經(jīng)過雙曲面的反射和廣角鏡頭的折射在CCD中成像,,故系統(tǒng)水平視場(chǎng)為360°,,來自垂直方向270°左右的光線可清晰成像,故系統(tǒng)垂直視場(chǎng)為270°,,只有位于反射鏡正上方約90°的視場(chǎng)范圍為成像死角,。系統(tǒng)組成如圖1所示。
?
?
1.2 系統(tǒng)組成
折反射全景成像系統(tǒng)主要由以下幾部分組成:
(1)光敏元件,,如CCD器件,。本系統(tǒng)中采用IMPERX公司的IPX-4M15-LC型Camera Link接口的科學(xué)級(jí)高分辨率數(shù)字相機(jī),分辨率為2 048×2 048,,幀速率為15f/s,。
(2)成像透鏡,如常規(guī)成像透鏡或遠(yuǎn)心透鏡,。本系統(tǒng)采用Nikon廣角近焦鏡頭,。
(3)凸面反射鏡,其面形為二次曲面,,如球面,、圓錐面、拋物面,、雙曲面等,。本系統(tǒng)采用視場(chǎng)角為120°雙曲反射面。
(4)實(shí)時(shí)圖像處理平臺(tái),。本系統(tǒng)采用以Altera公司Cyclone II系列FPGA EP2C35為核心的圖像處理系統(tǒng),。
(5)顯示部件,本系統(tǒng)的顯示終端由LVDS接口的數(shù)字液晶顯示器構(gòu)成,,分辨率為1 024×768,,刷新頻率為60Hz。
2 嵌入式硬件設(shè)計(jì)
2.1 FPGA核心處理系統(tǒng)
FPGA核心處理系統(tǒng)采用Altera公司的Cyclone II 處理器EP2C35F484C8,。在Cyclone系列低成本FPGA中,,Cyclone II FPGA系列是第二代產(chǎn)品,,采用TSMC的1.2V、90nm,、低k絕緣工藝,,具有比第一代產(chǎn)品更多的性能優(yōu)勢(shì),密度功能進(jìn)一步提高,。具有33 216個(gè)邏輯單元(LE),,密度是第一代Cyclone FPGAs的三倍,每LE最低的成本,;具有105個(gè)M4K的RAM,,共組成483 840bit可用RAM,可達(dá)到250MHz的性能,。有35個(gè)18×18bit或70個(gè)9×9bit嵌入式乘法器,;跨越整個(gè)期間的16個(gè)低斜移、全局時(shí)鐘網(wǎng)絡(luò),,有16個(gè)專用輸入時(shí)鐘引腳反饋,;4個(gè)鎖相環(huán)(PLLs),每個(gè)具有3個(gè)輸出抽頭,,具有可設(shè)置帶寬,、可設(shè)置占空比、擴(kuò)譜時(shí)鐘,、鎖定探測(cè)功能,,以及具有移相功能的頻率合成,可提供片內(nèi)和片外全面的系統(tǒng)始終管理,。除FPGA之外,,電源系統(tǒng)有由AMS1084-3.3構(gòu)成的3.3V供電,由AMS1084-adj調(diào)整出來的1.2V供電部分,。配置芯片為EPCS16,,時(shí)鐘晶振為50MHz。
2.2 高速存儲(chǔ)系統(tǒng)設(shè)計(jì)
圖像處理系統(tǒng)對(duì)存儲(chǔ)設(shè)備要求很高,,不僅需要有大的存儲(chǔ)容量,,還要有非常高的存儲(chǔ)速度。針對(duì)本系統(tǒng)中的處理要求,,每幀圖像的大小為4MB,,所以要想實(shí)時(shí)、連貫地對(duì)圖像做想要的處理,,存儲(chǔ)系統(tǒng)的最低容量應(yīng)為能存儲(chǔ)一幀圖像的容量4MB,。存取速度可以通過計(jì)算得出,相機(jī)數(shù)據(jù)總量:15f/s×2 048×2 048×8=480Mb/s,,單路LVDS=總量×7/12=280Mb/s,,單路TTL=單路LVDS/7=40Mb/s。通過計(jì)算可知,,系統(tǒng)數(shù)字前端的通信速率是40MHz,,已經(jīng)屬于高速電路信號(hào)的范疇。為了增加圖像數(shù)據(jù)傳輸?shù)膸?,Camera Link接口采用雙通道傳輸模式,,每通道數(shù)據(jù)為8bit,共16bit,。在圖像實(shí)時(shí)采集及顯示的要求下,,可采用兩組RAM乒乓讀寫操作的方式,但這樣會(huì)增加系統(tǒng)的復(fù)雜性,;也可以使用雙口RAM,,但如此大容量的雙口RAM的成本非常高?;谶@兩點(diǎn)考慮和系統(tǒng)的實(shí)際需求,,本系統(tǒng)使用對(duì)單存儲(chǔ)體分時(shí)復(fù)用讀寫的機(jī)制,可簡(jiǎn)化硬件設(shè)計(jì)和降低成本,。系統(tǒng)中選用4片SRAM,,型號(hào)為IS61LV51216,其單片容量為1MB,,在硬件連接上擴(kuò)展成1M×32bit的靜態(tài)RAM存儲(chǔ)體,,總共4MB,為一幀圖像的存儲(chǔ)容量,,而32bit的數(shù)據(jù)寬度可極大限度地增加系統(tǒng)的通信速率,。
如圖2所示,使用AVALON總線支持的8級(jí)流水線的方式不連續(xù)讀取SRAM和SDRAM中的數(shù)據(jù),。當(dāng)讀SRAM中數(shù)據(jù)時(shí),,數(shù)據(jù)有效標(biāo)志一直處于高電平有效狀態(tài),故可以在CLK的每一個(gè)周期返回一個(gè)有效數(shù)據(jù),;而讀SDRAM時(shí),,數(shù)據(jù)有效標(biāo)志大部分周期為低電平無效狀態(tài),所以實(shí)際的讀取速度大打折扣,,不及SRAM速度的1/3,。這里簡(jiǎn)單分析一下原因:首先SDRAM的行列地址線是復(fù)用的,降低了總線速率,;其次SDRAM的讀寫操作過程中需要多個(gè)額外的總線周期進(jìn)行precharge和active操作,,導(dǎo)致效率低下,尤其在不連續(xù)讀寫時(shí)更加嚴(yán)重,。而SRAM完全不存在這個(gè)問題,,可以完全隨機(jī)讀寫,,本系統(tǒng)選用的SRAM讀和寫都可以在10ns完成。
?
2.3 Camera Link采集接口與LVDS顯示接口
科學(xué)級(jí)高分辨率數(shù)字相機(jī)IPX-4M15-LC使用Camera Link接口傳輸圖像,。經(jīng)研究發(fā)現(xiàn),,此相機(jī)內(nèi)部處理系統(tǒng)也是由一片一百萬門的FPGA和一個(gè)32位處理器組成,最后由美國(guó)國(guó)家半導(dǎo)體公司的DS90CR287MTD轉(zhuǎn)換成LVDS信號(hào),,由Camera Link接口將圖像傳輸出去,。與DS90CR287MTD配套使用的芯片為DS90CR288AMTD,所以本系統(tǒng)使用DS90CR288AMTD作為Camera Link協(xié)議的解碼芯片,。具體使用中,,在板級(jí)布線時(shí),尤其應(yīng)注意差分走線等長(zhǎng),、平行,、結(jié)成對(duì)耦等原則,這樣會(huì)使信號(hào)的高頻特性達(dá)到最好,。
在顯示終端方面,,沒有選擇XGA接口的顯示器,因?yàn)樗心M接口的液晶顯示器都是為了兼容以前的陰極射線管(CRT)顯示器,,而模擬信號(hào)傳輸存在一些缺點(diǎn),,如信號(hào)衰減、易受干擾,,清晰度和細(xì)節(jié)表現(xiàn)力不高等,。液晶顯示器本身就可以由數(shù)字信號(hào)進(jìn)行控制,所以本系統(tǒng)選用LVDS接口的液晶顯示器,,型號(hào)為上廣電的SVA150XG04BT,,分辨率為1 024×768??刂菩酒瑸樯蠌V電推薦的平板液晶顯示器LVDS接口芯片DS90C385A,。
3 AVALON總線IP核設(shè)計(jì)
3.1 Avalon總線規(guī)范
在采集IP核設(shè)計(jì)上,采用具有可變等待周期的突發(fā)傳輸,,在展開顯示IP核設(shè)計(jì)上,,采用具有可變等待周期和可變延遲的流水線傳輸。下面分別介紹這兩種傳輸模式,。Avalon接口可使用突發(fā)傳輸屬性,。該傳輸方式將多次傳輸作為一個(gè)單元來執(zhí)行,而不是將每個(gè)數(shù)據(jù)單元作為一次獨(dú)立的傳輸,。當(dāng)每次處理來自主端口的多個(gè)數(shù)據(jù)單元時(shí),,突發(fā)傳輸是從端口能達(dá)到最高效率的數(shù)據(jù)吞吐量。流水線傳輸使得主外設(shè)可以發(fā)起一次讀傳輸,轉(zhuǎn)而執(zhí)行一個(gè)不相關(guān)的任務(wù),,等外設(shè)準(zhǔn)備好數(shù)據(jù)后再接收數(shù)據(jù),。這個(gè)不相關(guān)的任務(wù)可以是發(fā)起的另一次讀傳輸,盡管上一次讀傳輸?shù)臄?shù)據(jù)還沒有返回,。在取指令操作和DMA操作中,,流水線傳輸非常有用。在這兩種狀態(tài)下,,CPU或DMA主外設(shè)會(huì)預(yù)取期望的數(shù)據(jù),從而使同步存儲(chǔ)器處于激活狀態(tài),,并減少平均訪問時(shí)間,。
3.2 Camera Link接口協(xié)議分析
Camera Link是從Channel Link技術(shù)基礎(chǔ)上發(fā)展而來的,以LVDS作為物理層,。Channel Link包括一個(gè)發(fā)送和接收對(duì),。發(fā)送端接收28路單端的數(shù)據(jù)信號(hào)和一個(gè)單端的時(shí)鐘信號(hào),數(shù)據(jù)被以7:1的方式串行化為4路雙端數(shù)據(jù)流,,接收端接收這四路串行數(shù)據(jù)流和一個(gè)同步時(shí)鐘,,并解串成為28路單端數(shù)據(jù)信號(hào)。
Camera Link信號(hào)要求圖像數(shù)據(jù)和圖像使能信號(hào)必須包含在Channel Link總線中,。四個(gè)使能信號(hào)被定義如下:
FVAL:幀有效(Frame Valid),; LVAL:線有效(Line Valid); DVAL:數(shù)據(jù)有效(Data Valid),;Spare:Spare作為以后使用的信號(hào),。保留了4個(gè)LVDS對(duì)用于實(shí)現(xiàn)對(duì)通用相機(jī)的控制,他們被定義為相機(jī)的輸入和圖像采集卡的輸出,。相機(jī)生產(chǎn)商設(shè)定這些信號(hào)來滿足特殊產(chǎn)品的需要,。這4個(gè)信號(hào)是:Camera Control 1~4。2個(gè)LVDS對(duì)已經(jīng)被分配為實(shí)現(xiàn)相機(jī)和圖像采集卡之間的異步串行通信,,相機(jī)和圖像采集卡應(yīng)至少支持9 600b/s的波特率,,這兩個(gè)信號(hào)是SerTFG和SerTC。
3.3 圖像采集存儲(chǔ)IP核設(shè)計(jì)
高分辨率數(shù)字相機(jī)的像素為400萬,,幀率為15f/s,,數(shù)據(jù)輸出時(shí)鐘為40MHz,數(shù)據(jù)寬度為16bit,。如此大數(shù)據(jù)量的采集及寫入RAM是使用CPU操作難以完成,,所以編寫了Avalon總線主外設(shè),將采集到的數(shù)據(jù)以DMA的方式寫入SRAM,。Avalon總線傳輸支持多種數(shù)據(jù)傳輸方式,,在這個(gè)主外設(shè)中,為了使數(shù)據(jù)傳輸能力達(dá)到最大,使用突發(fā)傳輸模式,,突發(fā)長(zhǎng)度為一行圖像的數(shù)據(jù)1 024B,,以16bit數(shù)據(jù)寬度進(jìn)行傳輸,突發(fā)長(zhǎng)度為512,,使用狀態(tài)機(jī)控制突發(fā)傳輸?shù)膸讉€(gè)狀態(tài),,如圖3所示。由于圖像數(shù)據(jù)的時(shí)鐘為40MHz,,Avalon總線傳輸時(shí)鐘為120MHz,,涉及到異步時(shí)鐘域同步問題,使用512個(gè)16bit寫入32bit讀出的FIFO進(jìn)行數(shù)據(jù)同步,。
?
3.4 圖像顯示原理分析
使用FPGA控制顯示器顯示所要的圖像,,主要是控制時(shí)序,就是將圖像數(shù)據(jù)依據(jù)顯示器需要的顯示順序送出,,即正確的數(shù)據(jù)放到正確的顯示器像素點(diǎn)上,。本系統(tǒng)選用的顯示器的現(xiàn)實(shí)時(shí)序控制比較簡(jiǎn)單,只需以CLK的上升沿為觸發(fā)控制使能信號(hào)DE與數(shù)據(jù)信號(hào)DATA同步即可,。DE為數(shù)據(jù)使能信號(hào),,高電平有效,在所有的顯示周期該信號(hào)為高電平,,在行消隱與場(chǎng)消隱期間為低電平,。顯示時(shí)序如圖4所示。
3.5 圖像顯示IP核設(shè)計(jì)
在圖像顯示IP核設(shè)計(jì)上,,讀取SRAM內(nèi)的圖像數(shù)據(jù)時(shí)不宜采用突發(fā)傳輸模式,,因?yàn)槿耙曈X系統(tǒng)圖像顯示需要先對(duì)環(huán)形的全景圖像進(jìn)行非線性還原,這涉及到大量的非連續(xù)地址圖像數(shù)據(jù)讀取,,因而不適合使用突發(fā)傳輸。而Avalon總線協(xié)議支持多達(dá)8級(jí)流水線的讀傳輸,,可以很好地解決這一問題,。流水線傳輸時(shí)序如圖5所示,。
?
4 全景圖像展開算法設(shè)計(jì)與實(shí)現(xiàn)
4.1 全景圖像柱面展開原理
以雙曲面焦點(diǎn)F′為投影中心建立虛擬像機(jī),,將實(shí)際全向圖像投影到虛擬像面上的過程稱為系統(tǒng)成像的逆投影,。如圖6所示,F(xiàn),,F(xiàn)′分別為雙曲線的兩個(gè)焦點(diǎn),OP為入射光線,PQ為反射光線,,O為三維空間中的任一點(diǎn),坐標(biāo)為(x0,,y0),Q為O點(diǎn)經(jīng)反射鏡反射后在像平面上的成像點(diǎn),,c為雙曲面的焦距,f為攝像機(jī)焦距,。根據(jù)逆投影模型可得已知三維空間中物點(diǎn)O坐標(biāo),由式2,、式3可確定像點(diǎn)Q的坐標(biāo),。
?
式中a、b為雙曲線的參數(shù),,θ為入射光線與Z軸夾角,。
當(dāng)虛擬像面為圓柱面,,且圓柱面的對(duì)稱軸為成像系統(tǒng)的對(duì)稱軸時(shí),可以得到柱面全景圖像,。
4.2 展開算法的簡(jiǎn)化原理
全景圖像展開原理和公式推倒是嚴(yán)謹(jǐn)、規(guī)范的,,雖然展開圖像的失真度最小,但復(fù)雜性也是最高的,。它不僅需要不斷地用到正弦余弦運(yùn)算,還要知道雙曲面反射鏡的多個(gè)參數(shù)以及拍攝時(shí)的實(shí)時(shí)焦距參數(shù),。這對(duì)實(shí)時(shí)處理系統(tǒng)來說是無法容忍的。下面介紹全景圖像簡(jiǎn)化展開算法,。
為了滿足進(jìn)一步的圖像視覺應(yīng)用和人眼的觀察習(xí)慣,,需要將壓縮的全景圖像投影到柱面上,。簡(jiǎn)化算法的思想是在不考慮雙曲面反射鏡自身參數(shù)的情況下,利用直角坐標(biāo)和極坐標(biāo)之間的坐標(biāo)變換(如圖7所示),,將柱面展開圖上像素點(diǎn)的值一個(gè)一個(gè)地從全景圖中找到,然后根據(jù)顯示效果調(diào)整R′的大小,,使顯示的寬高比例滿足實(shí)際比例,從而達(dá)到滿意的觀察結(jié)果,。
?
4.3 FPGA實(shí)現(xiàn)展開
如圖8設(shè)計(jì)的Avalon總線系統(tǒng),在對(duì)全景圖像數(shù)據(jù)進(jìn)行采集顯示以及非線性展開處理時(shí),,為了達(dá)到15f/s的實(shí)時(shí)顯示采集性能,全部使用Verilog HDL編寫,,這樣就可以做到所有功能模塊都并行處理。Verilog屬于硬件描述語言,,優(yōu)點(diǎn)是執(zhí)行效率高,,缺點(diǎn)是無法進(jìn)行復(fù)雜的數(shù)學(xué)運(yùn)算,,如展開公式中用到的三角函數(shù)、除法運(yùn)算等,。考慮到FPGA內(nèi)部有高速的SRAM,,所以查表可以很好地解決這一問題。除法運(yùn)算轉(zhuǎn)換成移位運(yùn)算,。在FPGA內(nèi)部調(diào)用宏功能模塊,生成ROM,,并用正弦和余弦表來對(duì)其進(jìn)行初始化,。本系統(tǒng)中使用7 200點(diǎn)的正余弦表,,精度為16位,,足以滿足要求。用Visual C++生成表,,并作乘以1 024的處理。因?yàn)閂erilog只能處理整數(shù),,最后處理時(shí)將處理結(jié)構(gòu)右移10位,即可將結(jié)果還原回真實(shí)值,。
?
系統(tǒng)的執(zhí)行過程就是邊讀取內(nèi)存中像素?cái)?shù)據(jù)值邊向顯示接口發(fā)送數(shù)據(jù)的過程,,只不過像素值的讀取是按照顯示的需求,,并按照上一節(jié)中的簡(jiǎn)化展開算法原理做了非線性變換的。如需要向顯示端口發(fā)送的像素點(diǎn)的坐標(biāo)為(x1,,y1),通過運(yùn)算得到數(shù)據(jù)在原始全景圖像中點(diǎn)的位置坐標(biāo)為(x2,,y2),,其中x2=y1sin(2πx1/y1),,y2=y1cos(2πx1/y1),,正弦余弦通過查表獲得,。x1/y1則是把一圈360°的圖像分成若干份數(shù),,每一份對(duì)應(yīng)一個(gè)顯示圖像中水平顯示方向的一個(gè)點(diǎn)。本系統(tǒng)將360°分成7 200份,,每增加0.5°,其正弦余弦值可在表格中查得,。圖像的現(xiàn)實(shí)分辨率為1 024×768,,所以整幅全景圖像的顯示需要7屏,,在實(shí)際應(yīng)用中利用按鍵實(shí)現(xiàn)讀取像素參數(shù)的遞增或遞減,就可以做到對(duì)360°全景圖像的掃描顯示,。
參考文獻(xiàn)
[1] National Semiconductor.LVDS用戶手冊(cè)(第四版)[D].2008.
[2] National Semiconductor.Channel Link Design Guide[D].2006.
[3] Altera Corporation.Quartus II Version 7.1 Handbook[D].2006.
?
?