陳子為,陳 龍,朱美吉,蘇魯陽(yáng)
(成都信息工程大學(xué) 電子工程學(xué)院,四川 成都610225)
隨著生產(chǎn)生活和科學(xué)技術(shù)的進(jìn)步,數(shù)碼攝像設(shè)備得到了廣泛地普及與應(yīng)用。但是由于數(shù)碼攝像設(shè)備自身物理?xiàng)l件的限制,普通數(shù)碼攝像設(shè)備獲取視頻的視野范圍較小,超廣角鏡頭或者魚眼鏡頭又會(huì)對(duì)圖像產(chǎn)生畸變[1],不能滿足實(shí)際的應(yīng)用需求。利用單一攝像頭捕捉多張視頻畫面合成寬視野圖像的辦法不僅費(fèi)時(shí)費(fèi)力,而且獲得的全景圖像的質(zhì)量一般不佳。視頻拼接技術(shù)很好地解決了這一問(wèn)題。所謂視頻拼接就是將幾個(gè)存在內(nèi)容相關(guān)性的窄視野視頻的每一幀圖像進(jìn)行拼接融合處理,得到一幅寬視野的甚至是全景的視頻圖像。視頻拼接本質(zhì)上就是圖像拼接,但由于其對(duì)于實(shí)時(shí)性的要求很高,使得在該領(lǐng)域的技術(shù)實(shí)踐更需要關(guān)注平臺(tái)的處理性能和算法的復(fù)雜性。
目前市面上普遍采用基于ARM、DSP、FPGA 的嵌入式平臺(tái)方案,以及多通道圖像采集拼接形成全景的通用計(jì)算機(jī)平臺(tái)方案來(lái)實(shí)現(xiàn)視頻拼接。這些實(shí)現(xiàn)方案存在一定的缺陷,基于ARM 的實(shí)現(xiàn)方案處理能力較弱,無(wú)法進(jìn)行復(fù)雜視頻算法;基于DSP 的實(shí)現(xiàn)方案處理速度比FPGA慢[2];基于FPGA 的實(shí)現(xiàn)方案靈活性較差且成本較高;基于計(jì)算機(jī)平臺(tái)的實(shí)現(xiàn)方案憑借性能優(yōu)勢(shì)獲得好的效果,但設(shè)備體積龐大、功耗高且價(jià)格昂貴[3]。
針對(duì)以上問(wèn)題,本文首先對(duì)特征點(diǎn)檢測(cè)效率表現(xiàn)優(yōu)異的ORB 算法進(jìn)行改進(jìn),并利用Vivado HLS 工具將改進(jìn)的視頻拼接算法進(jìn)行硬件加速并部署到Zynq 的PL中,然后利用Zynq 的PS 搭建嵌入式Linux 系統(tǒng),進(jìn)行用戶界面開發(fā),實(shí)現(xiàn)任務(wù)調(diào)度,最后提出了一種基于Zynq平臺(tái)對(duì)多通道視頻進(jìn)行無(wú)縫拼接處理的解決方案。
圖1 視頻圖像拼接流程圖
視頻拼接流程如圖1 所示。 首先通過(guò)攝像頭采集兩路視頻圖像,然后進(jìn)行視頻圖像幀同步,接著再進(jìn)行預(yù)處理,預(yù)處理主要用于解決視頻圖像采集過(guò)程中引入的噪聲、亮度差異調(diào)整等問(wèn)題。預(yù)處理完成后進(jìn)行圖像的配準(zhǔn)和變換,其中圖像配準(zhǔn)是視頻拼接中最關(guān)鍵、最耗時(shí)的步驟,可以采用基于圖像灰度統(tǒng)計(jì)特性、基于圖像特征點(diǎn)和基于圖像理解三種圖像配準(zhǔn)方式。綜合考慮算法復(fù)雜度和配準(zhǔn)準(zhǔn)確率,本設(shè)計(jì)采用基于特征點(diǎn)的方式進(jìn)行圖像配準(zhǔn)。圖像變換主要是解決圖像配準(zhǔn)后圖像的內(nèi)容拉伸變形的問(wèn)題。 為了消除圖像拼接產(chǎn)生的拼接縫隙,使其更加平滑、過(guò)渡更自然,需要在圖像配準(zhǔn)和變換后進(jìn)行圖像融合。 最后把處理過(guò)后的視頻圖像進(jìn)行輸出。
基于特征點(diǎn)的圖像配準(zhǔn)基本流程如圖2 所示,視頻圖像采集完成后先進(jìn)行特征點(diǎn)的檢測(cè),然后對(duì)特征點(diǎn)進(jìn)行描述,得到特征點(diǎn)的集合后再進(jìn)行特征點(diǎn)的匹配。 在特征點(diǎn)的匹配過(guò)程中,一般用特征點(diǎn)間的“距離”(例如歐式距離、漢明距離)來(lái)估算不同特征點(diǎn)之間的相似性度量(Similarity Measurement),然后采用最短距離的方法尋找最佳匹配點(diǎn)對(duì)[4]。 完成特征點(diǎn)的檢測(cè)和匹配后就完成了圖像的配準(zhǔn)工作。
圖2 基于特征點(diǎn)的圖像配準(zhǔn)流程圖
使用特征點(diǎn)來(lái)實(shí)現(xiàn)圖像配準(zhǔn)的方法比較多,目前使用比較廣泛的方法有SIFT、SURF、ORB 等,由于ORB 速度上比SIFT 和SURF 快得多, 而性能上與兩者不相上下[5],因而本文采用ORB 算法作為視頻拼接的配準(zhǔn)算法。ORB(Oriented FAST and Rotated BRIEF)算法[5]是一種快速的特征點(diǎn)檢測(cè)與描述算法,它基于FAST(Features from Accelerated Segment Test)關(guān)鍵點(diǎn)檢測(cè)[6]和BRIEF(Binary Robust Independent Elementary Features)[7]描述符的組合,具有旋轉(zhuǎn)不變性和對(duì)噪聲的魯棒性。
1.1.1 ORB 特征點(diǎn)檢測(cè)子
ORB 特征點(diǎn)檢測(cè)采用的是FAST 角點(diǎn)檢測(cè)算法,它的核心思想就是在眾多的像素點(diǎn)里找出與眾不同的像素點(diǎn)。在灰度圖像中,F(xiàn)AST 角點(diǎn)定義為:任取一個(gè)像素點(diǎn),使其與鄰域內(nèi)的其他像素點(diǎn)進(jìn)行比較,如果有一定數(shù)量的點(diǎn)與其差別很大,那么這個(gè)像素點(diǎn)就被選為角點(diǎn)[8]。FAST 角點(diǎn)檢測(cè)示意圖如圖3 所示,選取一個(gè)像素點(diǎn)p(其灰度值為Ip), 然后在像素點(diǎn)p 的鄰域以r 為半徑的圓周上找到n 個(gè)像素點(diǎn)Ik,其中k=1,2,3,…,n。 那么FAST 角點(diǎn)的判別表達(dá)式如式(1)所示:
式中t 表示閾值。 通常r=3,n=16。
圖3 FAST 角點(diǎn)檢測(cè)示意圖
FAST 角點(diǎn)的具體計(jì)算過(guò)程是:
(1)在圖像上選擇一個(gè)像素點(diǎn)p,設(shè)其灰度值為Ip。
(2)設(shè)置一個(gè)合適的閾值t,如果兩個(gè)像素點(diǎn)的差值大于閾值,則認(rèn)為這兩個(gè)像素點(diǎn)不同。
(3)比較以r=3 時(shí)的圓周上的16 個(gè)像素點(diǎn)。
(4)如果這16 個(gè)像素點(diǎn)與像素點(diǎn)p 有m 個(gè)點(diǎn)不同,這里m=12,那么這個(gè)點(diǎn)就是角點(diǎn)。
(5)使用一個(gè)高效的排除算法,比如,僅檢查圓周上位置為1、5、9、13 這四個(gè)位置的像素點(diǎn),可以先檢查1、9,看CRF=1 是否成立,然后再檢查5、13。 如果是角點(diǎn),那么上述的四個(gè)像素點(diǎn)至少有3 個(gè)應(yīng)該滿足CRF=1,如果不是這樣,那么這個(gè)點(diǎn)肯定不是一個(gè)角點(diǎn)。
FAST 角點(diǎn)檢測(cè)要對(duì)比的像素點(diǎn)太多,處理起來(lái)速度很慢,其實(shí)檢測(cè)一個(gè)點(diǎn)是不是角點(diǎn),沒(méi)有必要把所有的點(diǎn)都進(jìn)行對(duì)比。 文獻(xiàn)[9]中使用決策樹算法構(gòu)造一個(gè)角點(diǎn)分類器,判斷一個(gè)點(diǎn)是不是角點(diǎn)只需平均檢測(cè)周圍3.8 個(gè)像素點(diǎn)即可。
1.1.2 ORB 特征點(diǎn)描述子
特征點(diǎn)描述子就是在特征點(diǎn)鄰域內(nèi)隨機(jī)選取若干點(diǎn)對(duì),將這些點(diǎn)對(duì)灰度值的大小組合得到一個(gè)確定的二進(jìn)制串,這個(gè)二進(jìn)制串就是該特征點(diǎn)的描述子[10]。 特征點(diǎn)隨機(jī)點(diǎn)對(duì)如圖4 所示,特征點(diǎn)p 的鄰域內(nèi)存在若干點(diǎn)對(duì),圖中以不同顏色作為不同點(diǎn)對(duì)的區(qū)分。 ORB 特征點(diǎn)描述使用的是基于像素的二進(jìn)制位比較的BRIEF 特征描述子[7],求解BRIEF 描述子的具體過(guò)程如下:
(1)選擇其中一個(gè)特征點(diǎn)p,以特征點(diǎn)p 為圓心,在其鄰域內(nèi)以d 為半徑畫圓;
(2)在圓周內(nèi)按照某一模式取個(gè)n 點(diǎn)對(duì),為了方便敘述這里取n=5;
(3)標(biāo)記這5 個(gè)點(diǎn)對(duì),分別是p1(A,B),p2(A,B),p3(A,B),p4(A,B),p5(A,B),A 和B 分別表示點(diǎn)對(duì)兩端的像素點(diǎn);
(4)定義一種運(yùn)算關(guān)系T,其表達(dá)式如式(2)所示:
式中,IA、IB分別表示A 和B 點(diǎn)的灰度值。
(5)對(duì)所有點(diǎn)對(duì)進(jìn)行T 運(yùn)算,將得到的結(jié)果按照式(3)進(jìn)行組合:
上式中得到的二進(jìn)制串01101 就是需要的ORB 特征描述子。
圖4 特征點(diǎn)隨機(jī)點(diǎn)對(duì)示意圖
ORB 算法作為一種特征點(diǎn)檢測(cè)與描述算法,在圖像較小時(shí)效果還比較好,但是圖像較大時(shí)消耗的時(shí)間較多,不適于視頻配準(zhǔn)的需求,因此對(duì)其進(jìn)行改進(jìn)。 已知攝像頭的安裝位置,即輸入視頻流的相對(duì)位置是已知的和固定的。 ORB 算法檢測(cè)的特征點(diǎn)是針對(duì)于整幅圖像的,運(yùn)算量比較大,運(yùn)算時(shí)間很長(zhǎng)。 既然知道了兩幅視頻幀圖像的相對(duì)位置, 就可以找出ROI 區(qū)域(感興趣區(qū)域),即如圖5 所示的兩幅圖中虛線內(nèi)的圖像部分,取該ROI 區(qū)域的圖像進(jìn)行ORB 運(yùn)算,可大大減少運(yùn)算量(此時(shí)的運(yùn)算量可減少為原來(lái)的一半)[11-12]。
因此改進(jìn)的ORB 檢測(cè)流程如圖6 所示。
圖5 視頻幀圖像示意圖
圖6 改進(jìn)的ORB 檢測(cè)流程圖
首先拍攝兩張具有重疊區(qū)域的圖片,如圖7 所示。
圖7 算法驗(yàn)證實(shí)驗(yàn)圖
對(duì)圖7 中左右兩幅圖進(jìn)行ORB 算法檢測(cè)特征點(diǎn)的匹配操作,效果圖如圖8 所示。
圖8 ORB 算法檢測(cè)特征點(diǎn)匹配圖
再利用改進(jìn)的ORB 算法進(jìn)行仿真,實(shí)驗(yàn)效果如圖9所示。
圖9 改進(jìn)ORB 算法檢測(cè)特征點(diǎn)匹配圖
從上面的實(shí)驗(yàn)結(jié)果對(duì)比可以看出,使用改進(jìn)的ORB檢測(cè)算法可以大大壓縮傳統(tǒng)的圖像檢測(cè)時(shí)間,提高了算法的檢測(cè)效率,使得圖像檢測(cè)拼接技術(shù)可以應(yīng)用于視頻拼接。
本系統(tǒng)基于Xilinx 公司的Zynq-7000 系列AP SoC(All Programmable System on Chip,全可編程的片上系統(tǒng))平臺(tái)進(jìn)行設(shè)計(jì),在FPGA 架構(gòu)中集成了一個(gè)處理系統(tǒng)PS(Processing System,即雙核ARM Cortex-A9 硬核)和一個(gè)等價(jià)于一片F(xiàn)PGA 的可編程邏輯PL(Programmable Logic)。本系統(tǒng)硬件上主要由視頻采集、視頻拼接處理和視頻顯示三部分構(gòu)成,如圖10 所示。 視頻采集設(shè)備使用的是兩路500 萬(wàn)像素的OV5640 攝像頭。 由于多個(gè)攝像頭采集數(shù)據(jù)會(huì)有很大的吞吐量, 因此利用Vivado HLS 工具在Zynq 的PL 部分采用若干個(gè)IP 核對(duì)視頻數(shù)據(jù)進(jìn)行流水采集(#pragma HLS dataflow 和#pragma HLS PIPELINE II=1),并循環(huán)流水線核展開嵌套循環(huán)(#pragma HLS LOOP_FLATTEN),達(dá)到并行讀取攝像頭數(shù)據(jù)的目的,同時(shí)還利用Vivado HLS 對(duì)視頻拼接算法中的特征點(diǎn)檢測(cè)進(jìn)行硬件加速IP 核封裝設(shè)計(jì),實(shí)現(xiàn)算法的高速并行處理。 視頻顯示部分通過(guò)VDMA 傳輸待顯示的圖像數(shù)據(jù)到HDMI接口進(jìn)而傳送到LCD 顯示器上進(jìn)行顯示。
圖10 系統(tǒng)功能結(jié)構(gòu)圖
為了實(shí)現(xiàn)良好的人機(jī)交互和提升系統(tǒng)的靈活性,在Zynq 的PS 部分,搭建嵌入式Linux 系統(tǒng),移植部分OpenCV庫(kù)和Qt 庫(kù)并進(jìn)行程序的編譯、配置等工作,完成視頻圖像拼接系統(tǒng)的軟硬件協(xié)調(diào)及人機(jī)交互用戶界面。
兩個(gè)OV5640 攝像頭首先連接到Zynq 的PL 端,采用Verilog 語(yǔ)言按照SCCB 協(xié)議構(gòu)造攝像頭驅(qū)動(dòng)模塊,然后在Zynq 的PS 端按照標(biāo)準(zhǔn)的字符設(shè)備驅(qū)動(dòng)方式采用C語(yǔ)言編寫圖像采集驅(qū)動(dòng)程序,最后將攝像頭模塊連接在VDMA 上通過(guò)AXI4 總線傳輸數(shù)據(jù)。 對(duì)于圖像顯示部分,VDMA 傳輸?shù)娘@示數(shù)據(jù)連接到HDMI 驅(qū)動(dòng)顯示模塊,進(jìn)而顯示在顯示器上。 系統(tǒng)硬件實(shí)物如圖11 所示。
本文所提到的應(yīng)用程序的用戶界面是利用Qt 軟件開發(fā)的,包括顯示源視頻圖像的窗口、輸出結(jié)果的窗口、必要的功能按鍵等。 開發(fā)的應(yīng)用程序運(yùn)行在基于Zynq平臺(tái)的嵌入式Linux 系統(tǒng)上。硬件設(shè)備上電操作之后,在控制臺(tái)電腦上可以看到嵌入式Linux 系統(tǒng)的啟動(dòng)信息。當(dāng)Linux 系統(tǒng)啟動(dòng)完成,可以通過(guò)命令對(duì)應(yīng)用程序進(jìn)行啟動(dòng),之后使用鼠標(biāo)對(duì)應(yīng)用程序進(jìn)行操作,右上角有相應(yīng)的按鈕,可以打開和關(guān)閉攝像頭,可以完成視頻流的圖片截取,可以完成視頻的拼接。 應(yīng)用程序進(jìn)行視頻拼接時(shí)的運(yùn)行效果如圖12 所示。
圖11 系統(tǒng)硬件實(shí)物圖
圖12 系統(tǒng)應(yīng)用程序運(yùn)行圖
本文使用清晰度和空間頻率作為視頻拼接質(zhì)量的客觀評(píng)價(jià)標(biāo)準(zhǔn)[13]。 不同重合率拼接質(zhì)量客觀評(píng)價(jià)分析如表1 所示。
表1 不同重合率拼接質(zhì)量客觀評(píng)價(jià)表
從表1 可以得出,不同重合率的視頻圖像的拼接對(duì)于拼接質(zhì)量影響不同,重合率過(guò)小會(huì)導(dǎo)致圖像無(wú)法配準(zhǔn),而重合率過(guò)大則導(dǎo)致配準(zhǔn)后的圖像信息量較少,拼接后的效果反而降低。 因此要選擇合適的重合率,一般以30%~50%為宜。
再對(duì)拼接時(shí)效進(jìn)行分析。 實(shí)驗(yàn)輸入的視頻圖像的分辨率為640×480。 每隔0.5 s 取一幀圖像,連續(xù)取10 幀。記錄了兩組視頻拼接時(shí)間的數(shù)據(jù),一組是未使用ROI 和未硬件加速的處理時(shí)間,如表2 所示;另一組是在使用ROI 改進(jìn)算法并利用FPGA 邏輯資源對(duì)耗時(shí)最多的特征點(diǎn)檢測(cè)算法進(jìn)行硬件加速的情況下的拼接處理時(shí)間,如表3 所示。
通過(guò)對(duì)比兩張表中的數(shù)據(jù),可知使用ROI 和硬件加速的拼接處理時(shí)間遠(yuǎn)遠(yuǎn)小于未使用ROI 和未硬件加速的處理時(shí)間。 主要體現(xiàn)在特征點(diǎn)檢測(cè)和特征點(diǎn)匹配上,特征點(diǎn)檢測(cè)部分未使用ROI 和未硬件加速的處理時(shí)間是使用ROI 和硬件加速的處理時(shí)間的17.57 倍,特征點(diǎn)匹配部分未使用ROI 和未硬件加速的處理時(shí)間是使用ROI 和硬件加速的處理時(shí)間的1.26 倍。 對(duì)比其他部分,沒(méi)有明顯差異。 這是因?yàn)槭褂肦OI 算法后,特征點(diǎn)的搜索區(qū)域變?yōu)樵瓉?lái)的50%,減少了檢測(cè)時(shí)間,降低了誤匹配率。 特征點(diǎn)匹配上得益于ROI 算法,減少了特征點(diǎn)的分布區(qū)域,提高了特征點(diǎn)匹配的質(zhì)量。
表2 未使用ROI 和未硬件加速的拼接時(shí)間(ms)
表3 使用ROI 和硬件加速的拼接時(shí)間(ms)
實(shí)驗(yàn)結(jié)果表明采用合適的重合率可以得到質(zhì)量較好的拼接效果,使用FPGA 硬件加速算法大大提高了算法的效率,減少了拼接的時(shí)間。
本文針對(duì)ORB 算法特征點(diǎn)檢測(cè)進(jìn)行了改進(jìn)創(chuàng)新,實(shí)驗(yàn)證明改進(jìn)后的算法在運(yùn)行時(shí)間上減少了很多,滿足了視頻處理的實(shí)時(shí)性。 對(duì)于利用Vivado HLS 設(shè)計(jì)工具將算法進(jìn)行IP 核封裝,實(shí)現(xiàn)硬件加速處理予以了驗(yàn)證,證明可以較大地提高算法的實(shí)時(shí)性。 同時(shí),本文采用Zynq 平臺(tái)設(shè)計(jì)視頻拼接系統(tǒng),對(duì)系統(tǒng)中各個(gè)模塊進(jìn)行了合理的任務(wù)分配,使得系統(tǒng)同時(shí)擁有ARM 的靈活性以及FPGA的并行處理能力,充分地展現(xiàn)了并行異構(gòu)架構(gòu)的優(yōu)勢(shì),為機(jī)器視覺(jué)的小型化應(yīng)用提供了重要參考。