摘 要: 針對安防監控與智慧交通領域無盲區視頻攝錄的需求,基于Zynq-7000平臺優勢進行寬幅視頻處理軟硬件系統的設計。通過研究基于嵌入式系統的多路視頻實時拼接技術,設計并實現了以XC7Z020芯片為核心的視頻處理板卡,在雙核ARM Cotex-A9硬核處理器端服務程序協同調度下,基于片內FPGA硬件加速能力實現多通道視頻實時采集與預處理、投影變換、圖像融合,進而形成完整寬幅視頻畫面,通過遠程客戶端實現定制化的視頻攝錄功能。測試結果表明,該系統是兼具穩定的性能和靈活區域部署能力的便攜式解決方案。
引言
寬幅視頻拼接是基于計算機視覺和圖形處理技術的整合,其本質就是圖像拼接技術,必然與圖像傳感器技術及圖像算法研究密切相關[1],但其對于實時性的較高要求,使得在該領域的技術實踐同樣需要關注平臺的處理性能。目前市面上普遍采用的主要有通過單目魚眼鏡頭捕獲全景圖像的嵌入式平臺方案,以及多通道圖像采集拼接形成全景的通用計算機平臺方案。前者對于鏡頭工藝要求高且存在較大的畸變,而后者憑借性能優勢獲得好的效果,但設備體積龐大且價格昂貴[2]。
針對以上情況,本文提出了一種基于AP SoC(All Programmable System on Chip,全可編程的片上系統)多通道視頻無縫拼接的寬幅視頻處理解決方案。結合用戶場景分析,提出具有擴展能力的寬幅視頻處理技術,預置多路擴展接口隨時增減攝像頭以調整視野寬度,滿足多種現場寬視角攝錄需求。
1 系統總體構架
寬幅視頻處理系統由本地視頻處理系統端和遠程攝錄客戶端兩部分組成,系統總體框圖如圖1所示。便攜式視頻處理系統根據監控需求進行配置與部署,遠程客戶端進行實時定制視野區域攝錄。
?
本地視頻處理系統作為設計的主體部分,由視頻采集、圖像處理、核心調度、用戶交互、本地顯示、網絡通信六個模塊組成。多通道視頻流采集模塊采用DMA方式將圖像數據送入內存緩沖隊列;圖像處理模塊包含視頻處理的若干流程,在核心調度模塊控制下,借助可編程邏輯并行加速完成寬幅圖像的處理與存儲;用戶交互模塊和本地顯示模塊協同完成設備配置與寬幅畫面預覽;網絡通信模塊作為視頻傳輸的重要接口,用于監聽網絡請求與寬幅視頻分發服務。
2 系統硬件設計
視頻處理核心板卡硬件系統結構框圖如圖2所示。系統主要由存儲器模塊、網絡通信模塊、視頻采集接口模塊、本地顯示模塊、串行終端模塊、用戶交互模塊、時鐘模塊、電源模塊和JTAG調試模塊組成。
?
2.1 XC7Z020片上系統
XC7Z020芯片是Xilinx公司Zynq-7000系列AP SoC,在FPGA架構中集成了雙核ARM Cotex-A9硬核處理器系統,包含USB、SPI、SDIO等豐富的外設控制器,實現了PS(Processing System)硬核知識產權的性能和低功耗特性以及PL(Programmable Logic)可編程邏輯的靈活性[3]。借助AXI(Advanced eXtensible Interface,高級擴展總線)互聯技術實現PS與PL之間的高性能的數據交換,為工程技術人員在圖像處理領域實踐提供了全新的實現途徑。
2.2 存儲器模塊
存儲器模塊分為內存和掉電存儲兩個部分。XC7Z020芯片內置支持多協議標準的硬核內存控制器,掛載兩片DDR3內存芯片MT41K128M16,構建起容量為512 MB、時鐘頻率為533 MHz的內存儲器。選用飛索公司的32 MB QSPI Flash芯片S25FL256SAG以及SD閃存卡兩種掉電存儲方式,用于FPGA上電配置以及軟件系統的引導。
2.3 視頻采集模塊
選用三組OV5640攝像頭模塊圍繞單視點相背放置。攝像頭內置白平衡、色彩校正、降噪等預處理功能,簡化了后端FPGA系統的設計負擔。720P輸出模式下可達40 f/s以上幀率,其采用DVP(Digital Video Port,數字視頻接口)輸出,通過SCCB(Serial Camera Control Bus,串行攝像頭控制總線)進行初始化配置。
2.4 本地顯示模塊
選用ADI公司的高清多媒體收發器ADV7511芯片,集成HDMI 1.4發送器,最大支持1080p@60Hz視頻傳輸。芯片集成I2C控制器用于管理接入的顯示設備信息。
2.5 網絡通信模塊
選用Marvell公司具有自適應10/100/1 000 Mb/s傳輸速率的以太網物理層芯片88E1518,配合片內吉比特MAC(Media Access Control,介質訪問控制)層控制器提供千兆以太網接入能力。
3 軟件系統架構及核心算法的實現
本文使用Vivado2015.2設計套件完整的工具鏈協同完成軟件系統的構建。圖像處理系統運行流程如圖3所示,通過橫向的時域和縱向的空間域來說明軟件與硬件協同實現圖像處理的工作流程。橫向的時間域即體現運行于PS端的程序協調硬件系統推進事務處理,組織整個系統的運行流程;縱向的空間域是PL端圖像處理子系統在總線控制下,并行完成各自任務所經歷數據遷移和操作。
?
按照模塊化軟硬件設計思路,將整個系統運行劃分為五個運行階段:系統初始化配置、視頻采集與預處理、柱面投影硬件加速、圖像接縫融合和多通道傳輸,其中視頻采集與預處理、柱面投影兩個階段以FPGA系統并行處理為核心,其他則以軟件調度執行為主。
3.1 系統初始化配置
系統初始化配置階段是以硬核系統啟動為主導,從外部存儲器中讀取FPGA配置文件并部署到PL中,構建起3個圖像處理子系統,之后進入操作系統引導和片內外設備初始化過程。
3.2 視頻采集與預處理
采集預處理階段分為采集、預處理和存儲三個環節。視頻輸入端口捕獲的圖像數據流同步信息冗余且低效,不適合在片內系統傳輸中使用,Xilinx公司提出了基于AXI標準協議框架的精簡流傳輸AXI-Stream協議,使用Video In To AXI-Stream IP(Intellectual Property,知識產權)核將DVP數據格式轉換為AXI-Stream協議數據流,實現片內數據傳輸標準化。
本設計所使用的攝像頭輸出圖像格式是Bayer色彩空間,為了獲得RGB色彩空間圖像,需要插值以獲取像素丟失的顏色信息。綜合考慮算法復雜度和圖像還原質量,采用3×3鄰域雙線性插值法對圖像進行色彩空間還原[4]。基于AXI-Stream協議接口的Color Filter Array IP核,進行簡單參數配置便能夠實現Bayer向RGB色彩空間轉換,從而實現與視頻采集IP子系統無縫對接。
3個圖像采集與預處理通道工作均在FPGA內異步完成,受限于FPGA存儲容量,需要將視頻幀緩存在DDR內存中。PS端提供了四路高速AXI總線訪存接口,借助Video DMA IP核能夠實現AXI-Stream協議數據流轉換為基于地址訪問的標準AXI協議,從而實現訪存操作,PS端通過AXI-Lite控制總線實現IP核配置。
3.3 柱面投影硬件加速
如圖4所示的柱面投影透視模型,按照單視點模型擺放的攝像頭陣列位于O點,待投影圖像ABCD在投影圓柱面上形成的映像為閉合曲面A′B′C′D′。在圖4(a)中觀測點O處所在的水平和豎直面投影,得到了截面圖4(b)和圖4(c),其中待投影圖像上P、Q兩點在投影柱面上形成P′和Q′兩投影點,假設柱面的半徑為r,高度為H,單個攝像頭水平視野角度為θ,待投影圖像寬度為W,高度為H,則能夠得出像素P(x,y)向P′(x′,y′)的投影關系如式(1)所示,反投影變換如式(2)所示[5]。
?
?
其中:
投影柱面的半徑r就是攝像頭的焦距,焦距無法精確測量,但可以通過計算公式進行估算:
在實際柱面投影過程中,通過計算柱面投影圖像指定像素點所對應的原始像素坐標,將坐標轉換成存儲器的地址,取出該像素并存入到所對應的柱面投影圖像中,最終形成了完整的柱面投影圖像。
基于緩存策略的連續地址存儲器訪問,相對字節隨機訪問具有更好的帶寬效能。在柱面圖像目標存儲區,按行、列依次將若干連續的像素組進行反柱面投影求其所在原圖像坐標,逐個從原圖像坐標取出其像素值存入緩沖區,緩沖區滿后采用總線突發方式,一次放入目標柱面位置,即概括為零取整存,功能框圖如圖5所示。
?
柱面投影主要涉及數學公式計算以及存儲器訪問操作,基于硬件描述語言的FPGA設計對基于復雜總線的數據通信及數學計算編程實現較為復雜。Vivado HLS(High Level Synthesis,高級綜合)工具將C/C++等高級語言通過高層次功能綜合,快速實現IP核設計與開發,軟件提供了基于高級語言的圖像處理、數學函數、標準通信協議接口,得以使開發人員更加專注于功能設計,同時能夠獲得不錯的硬件加速性能。
按照高級語言程序功能函數設計,需要明確入口參數。實現柱面投影所需的關鍵參數如表1所示。
?
設計完成的功能函數通過C仿真以驗證程序設計邏輯正確性。通過程序邏輯測試后,進行高級語言向RTL(Register Transfer Level,寄存器傳輸級)IP綜合。柱面投影IP核通過總線獲取參數及訪存。參數列表中兩個存儲器地址用于內存數據訪問,故采用支持高帶寬的數據通信以及突發傳輸的AXI總線掛接,其他參數使用AXI4-Lite控制總線進行配置。初步完成端口配置與綜合后,會針對選定平臺提供詳細的資源統計報告,如表2所示,產生的RTL電路同樣需要C/RTL協同仿真以驗證時序邏輯正確性,完成仿真之后軟件會提供測試報告及信號時序圖。通過設計驗證后,即可進行IP核的打包并導入FPGA系統。
?
3.4 接縫融合與全景拼接
相鄰圖像重疊區域使用加權融合方式處理。實際拼接區域范圍較小,故采用軟件計算的方式實現,加權融合通過緩慢改變權重系數,使拼接圖像順滑過渡。加權融合原理示意如圖6所示。
?
設兩幅待拼接圖像F(x,y)和G(x,y),其對應的權重函數分別為ω1和ω2,其數學表達式為:
?
3.5 多通道傳輸
多通道傳輸是指完成處理的寬幅圖像,通過本地端HDMI顯示以及遠程客戶端請求攝錄兩種呈現方式。
應用程序設計與實現主要分為兩個功能模塊:視頻拼接處理和定制化網絡分發。借助雙核處理器的優勢多線程編程調度來提升系統的整體執行效率。系統服務軟件運行流程如圖7所示,服務程序開始運行后,主線程申請綁定第一處理器核心運行,啟動系統設備初始化工作,之后創建子線程,并使其運行在第二核心上。基于核心綁定的多線程設計,有利于手動進行負載均衡。主線程主要負責圖像處理服務,循環控制整個視頻拼接的四個階段,而子線程主要負責網絡請求的監聽與定制化的分發服務。由于兩者都需要訪問全景視頻緩沖區,所以需要進行緩沖區讀寫訪問控制。
?
4 系統測試與效果
系統服務程序HDMI顯示接口實時查看拼接效果,如圖8所示。遠程客戶端進行定制化分發攝錄,如圖9所示。嵌入式服務端實時形成的寬幅視頻畫面如圖10所示,畫面接縫部位拼接較為均勻且完整。經過實驗測試及數據統計,視頻處理系統在720 p模式下,寬幅分辨率為3 360×640,幀率5~10 f/s,480 p模式下分辨率為2 240×420,幀率15~18 f/s,基本實現了設計目標。
?
?
?
隨著機器視覺、模式識別領域的飛速發展,基于寬幅實時視頻為基礎的自動識別與檢測應用在交通、安防等領域將會有更廣闊的發展前景。
?
評論
查看更多