張興超,陳賢富
(中國(guó)科學(xué)技術(shù)大學(xué) 微電子學(xué)院,安徽 合肥230027)
全景圖像拼接,指把幾幅彼此之間有重疊區(qū)域的圖像拼接成一幅視角更廣、信息更全面的圖像。而全景視頻拼接,指對(duì)多路讀入視頻的每一幀進(jìn)行全景拼接,得到一個(gè)新的全景視頻。讀入視頻為實(shí)時(shí)視頻流,拼接得到實(shí)時(shí)的全景視頻流,即為實(shí)時(shí)全景視頻拼接。實(shí)時(shí)全景視頻拼接技術(shù)的應(yīng)用十分廣泛,可運(yùn)用于視頻監(jiān)控、實(shí)時(shí)直播、視頻會(huì)議等領(lǐng)域。本文的研究對(duì)象為機(jī)場(chǎng)監(jiān)控的多目實(shí)時(shí)視頻拼接。
全景實(shí)時(shí)視頻拼接可以采用硬件方法,也可采用軟件方法。硬件方法是指使用專門的拍攝設(shè)備實(shí)現(xiàn)全景拍攝,例如魚眼攝像機(jī)、超寬視角的廣角鏡頭等。采用硬件方法,可以滿足實(shí)時(shí)性、圖像質(zhì)量等要求,但由于需要使用專門的硬件設(shè)備,成本較高。軟件方法指通過算法、程序來實(shí)現(xiàn)全景視頻拼接系統(tǒng)。采用此種方法,只要算法性能足夠優(yōu)良,就可以使用常規(guī)的硬件平臺(tái)實(shí)現(xiàn)全景實(shí)時(shí)視頻合成的目標(biāo),而不需要依賴昂貴的硬件設(shè)備。因此,軟件方法成本相對(duì)較低。本文就是用軟件方法實(shí)現(xiàn)8路960×540實(shí)時(shí)視頻流的全景實(shí)時(shí)拼接。
本文采用的方法,其讀入的視頻,是機(jī)場(chǎng)跑道一側(cè)8臺(tái)攝像機(jī)采集的實(shí)時(shí)視頻流。8臺(tái)攝像機(jī)位于機(jī)場(chǎng)飛機(jī)跑道的同一側(cè),大致覆蓋180°的視野范圍。8臺(tái)攝像機(jī)的位置是固定不變的,所以全景畫面到每一路圖像的像素映射關(guān)系也是固定的。本文采用拼接方法的總體思路如下:(1)使用現(xiàn)有的全景圖片拼接軟件拼接采集到的8個(gè)視頻幀,得到一幅全景圖;(2)圖像配準(zhǔn),即找出全景圖與8幅原圖之間的像素坐標(biāo)映射關(guān)系,并將此映射關(guān)系存成查找表(Look Up Table,LUT);(3)通過LUT完成每一幀的實(shí)時(shí)拼接,包括重疊區(qū)域的融合;(4)全景視頻每一幀的顯示和存儲(chǔ)。實(shí)驗(yàn)結(jié)果表明,本文采用的方法可實(shí)現(xiàn)8路視頻的實(shí)時(shí)全景拼接,并且能夠?qū)崟r(shí)顯示、存儲(chǔ)拼接后的全景視頻。
在已有相關(guān)研究中,文獻(xiàn)[1]提出一種基于特征的全景視圖生成算法,該算法能夠適應(yīng)視差較大的情況,而無實(shí)時(shí)性要求;文獻(xiàn)[2]研究出一種移動(dòng)設(shè)備視頻全景并行生成技術(shù),該技術(shù)利用OpenMP并行加速,提高了視頻全景的合成速度,但所處理的是拍攝好的視頻而非實(shí)時(shí)視頻流;文獻(xiàn)[3]提出一種并行實(shí)現(xiàn)圖像配準(zhǔn)和拼接的技術(shù),該技術(shù)使用OpenMP多核并行加速,可實(shí)現(xiàn)2路320×240視頻信號(hào)的實(shí)時(shí)拼接,達(dá)到35 f/s的實(shí)時(shí)處理要求;文獻(xiàn)[4]研究出一種基于CUDA的全景圖生成技術(shù);文獻(xiàn)[5]提出一種實(shí)時(shí)全景拼接算法,通過多數(shù)據(jù)流和GPU加速,實(shí)現(xiàn)了3路分辨率640×480、幀率30 f/s的視頻信號(hào)的自動(dòng)配準(zhǔn)和實(shí)時(shí)全景拼接;文獻(xiàn)[6]研究出一種基于GPU加速的實(shí)時(shí)4K全景視頻拼接技術(shù),可對(duì)6路2K視頻進(jìn)行實(shí)時(shí)拼接,得到4K輸出視頻。上面提到的幾種方法都使用了GPU加速,實(shí)際上均對(duì)硬件平臺(tái)有一定的要求。2020年,北方自動(dòng)控制技術(shù)研究所的強(qiáng)勇勇等人研究出一種基于局部多層次特征的嵌入式視頻全景拼接技術(shù)[7],該技術(shù)使用查找表方法和最佳拼接線查找法,實(shí)現(xiàn)了2路1 000×750分辨率、30 f/s幀率視頻的實(shí)時(shí)全景拼接。
在國(guó)外,2007年,Brown等人在尺度不變特征轉(zhuǎn)換(Scale-Invariant Feature Transform,SIFT)算法提出之后[8],研究出一種基于SIFT算法的全景圖片合成算法[9],該算法用于全景圖片拼接,對(duì)實(shí)時(shí)性無要求;2013年,Termoe等人研究出一種基于多模塊化編程的全景視頻處理技術(shù)[10],該技術(shù)使用GPU加速,可完成4路1 280×960分辨率、30 f/s視頻信號(hào)的實(shí)時(shí)合成;2020年,Meng等人研究出一種基于非對(duì)稱雙向光流的高質(zhì)量全景圖拼接技術(shù)[11],該技術(shù)采用了魚眼攝像機(jī)采集輸入圖像信號(hào),遠(yuǎn)景與近景拍攝的圖像信號(hào)皆能處理。
本文提出的全景視頻實(shí)時(shí)拼接方法,讀入視頻為8路960×540分辨率、25 f/s幀率的實(shí)時(shí)視頻流,采用SIFT算法進(jìn)行特征點(diǎn)匹配以實(shí)現(xiàn)圖像配準(zhǔn),采用LUT方法和OpenMP加速以實(shí)現(xiàn)實(shí)時(shí)拼接。相鄰兩路圖像間的過渡區(qū)域融合,本文使用線性融合法。輸出的全景視頻分辨率為3 636×932,幀率為25 f/s。平均每一幀視頻的讀取、拼接、顯示、存儲(chǔ)整個(gè)過程的耗時(shí)小于40 ms,基本滿足實(shí)時(shí)性要求。本文所使用的方法,可在使用常規(guī)硬件平臺(tái)(不需要使用專門的拍攝設(shè)備,亦不需要使用GPU加速)的條件下完成8路960×540分辨率、25 f/s視頻流的實(shí)時(shí)拼接。
如前所述,實(shí)現(xiàn)視頻實(shí)時(shí)拼接,首先要完成圖像配準(zhǔn)。圖像配準(zhǔn),指找出全景圖與原圖之間的像素坐標(biāo)映射關(guān)系。本次實(shí)驗(yàn)中,8臺(tái)攝像機(jī)的位置全程都是固定不變的,因此圖像配準(zhǔn)過程只需要做一次,并且可以離線完成,對(duì)時(shí)間復(fù)雜度不作要求,配準(zhǔn)結(jié)果足夠準(zhǔn)確即可。完成配準(zhǔn)過程之后,就可以利用找出的映射關(guān)系,實(shí)現(xiàn)視頻的實(shí)時(shí)拼接。
圖像配準(zhǔn)分為以下步驟:特征點(diǎn)匹配、計(jì)算單應(yīng)矩陣(原圖到全景圖的像素坐標(biāo)變換矩陣)、構(gòu)建LUT表。下面分別對(duì)這三個(gè)步驟進(jìn)行闡述。
2.1.1 特征點(diǎn)匹配
要找出全景圖和原圖間的像素映射關(guān)系,首先需要在全景圖和原圖中找出足夠數(shù)量的特征點(diǎn),并找出特征點(diǎn)之間的匹配關(guān)系。通過特征點(diǎn)匹配對(duì),可以計(jì)算每幅原圖到全景圖的像素坐標(biāo)變換矩陣(即8個(gè)單應(yīng)矩陣),從而得到8幅原圖中所有像素點(diǎn)與全景圖中像素點(diǎn)的映射關(guān)系。
常用的特征點(diǎn)匹配算法有尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)算法[8,12]、加速穩(wěn)健特征(Speeded Up Robust Features,SURF)算法[13]和Oriented FAST and Rotated BRIEF(ORB)算法[14]。其中,SIFT算法時(shí)間復(fù)雜度最高,但可以找出最多的特征點(diǎn)匹配對(duì),匹配結(jié)果最準(zhǔn)確;SURF算法是SIFT算法的改良加強(qiáng)版,時(shí)間復(fù)雜度低于SIFT算法,但找出的特征點(diǎn)匹配對(duì)數(shù)量少于SIFT算法;ORB算法原理較簡(jiǎn)單,速度較快,但能找到的匹配點(diǎn)數(shù)量較SIFT、SURF少。
由于本次實(shí)驗(yàn)對(duì)圖像配準(zhǔn)的時(shí)間復(fù)雜度不作要求,且需要配準(zhǔn)結(jié)果盡可能準(zhǔn)確,本文采用SIFT算法進(jìn)行特征點(diǎn)匹配。首先,獲取8路視頻的各一幀,并使用Panorama Studio軟件對(duì)這8個(gè)圖片進(jìn)行拼接,得到一幅全景圖片。然后,使用SIFT算法分別找出8幅原圖和全景圖片之間的特征點(diǎn)匹配對(duì)。Panorama Studio軟 件 拼 接8幅960×540圖 片 需2~3 s的時(shí)間。SIFT算法使用OpenCV中的庫函數(shù)實(shí)現(xiàn)。圖1為Panorama Studio得到的全景圖與原圖1之間的特征點(diǎn)匹配示意圖。為確保特征點(diǎn)匹配的準(zhǔn)確程度,在與原圖1進(jìn)行特征點(diǎn)匹配時(shí),全景圖只保留了原圖1大致對(duì)應(yīng)的區(qū)域(圖1中左側(cè)畫面即為保留的全景圖區(qū)域,右側(cè)畫面為原圖1)。8幅原圖都采用此種方法完成特征點(diǎn)匹配。
2.1.2 計(jì)算單應(yīng)矩陣
單應(yīng)矩陣即像素坐標(biāo)映射矩陣,其描述兩圖像之間的像素坐標(biāo)映射變換。平面的單應(yīng)性被定義為從一個(gè)平面到另一個(gè)平面的投影映射。描述這樣變換關(guān)系的矩陣,就叫單應(yīng)矩陣。它是一個(gè)3×3浮點(diǎn)數(shù)矩陣。8臺(tái)攝像機(jī)分別位于不同位置,攝像頭的角度各不相同,因此8幅原圖到全景圖的映射變換屬于透視變換。
令原圖中一像素點(diǎn)的坐標(biāo)為(x,y),變換到全景圖后坐標(biāo)為(x′,y′),單應(yīng)矩陣為:
則(x,y)與(x′,y′)的變換關(guān)系為:
可以發(fā)現(xiàn),單應(yīng)矩陣H乘以任意非0值,最終得到的變換后坐標(biāo)值都是不變的。因此可令h33恒為1,僅需計(jì)算另8個(gè)元素的值,即可得到有效的單應(yīng)矩陣。
理論上,只需要知道4個(gè)不共線的原圖點(diǎn)坐標(biāo)以及它們各自變換后的坐標(biāo),即可算出一組單應(yīng)矩陣元素的值。然而本文需要找出的是整幅原圖變換到全景圖的單應(yīng)矩陣,要求計(jì)算出的單應(yīng)矩陣適用于原圖中所有的像素點(diǎn),因此,只用4個(gè)匹配點(diǎn)對(duì)計(jì)算單應(yīng)矩陣,并不能夠得出適用于整幅原圖的單應(yīng)矩陣。所以,計(jì)算單應(yīng)矩陣,本文采用隨機(jī)抽樣一致算法(RANdom SAmple Consensus,RANSAC)[15],用OpenCV中的findHomography()函數(shù)實(shí)現(xiàn)。
2.1.3 構(gòu) 造LUT表
如果拼接每一幀都對(duì)8幅原圖(視頻幀)中的像素點(diǎn)和單應(yīng)矩陣作相乘運(yùn)算,則時(shí)間開銷較大,無法滿足實(shí)時(shí)性要求。故本文采用LUT表方法實(shí)現(xiàn)實(shí)時(shí)拼接。具體方法如下:首先構(gòu)造一個(gè)二維矩陣(稱之為矩陣M),其行列數(shù)與全景圖相同,矩陣中的元素為像素點(diǎn)的地址信息;然后,通過單應(yīng)矩陣進(jìn)行逆變換運(yùn)算,得到全景圖上每個(gè)點(diǎn)對(duì)應(yīng)于原圖中的點(diǎn);之后,將此原圖點(diǎn)的地址存放在矩陣M的相應(yīng)位置。比如,如果總合成圖中第1行第1列的點(diǎn)對(duì)應(yīng)于第1幅原圖的第2行第3列點(diǎn),那么就將第1幅原圖第2行第3列這個(gè)點(diǎn)的地址存放在矩陣M的 第1行 第1列。
通過單應(yīng)矩陣進(jìn)行矩陣逆變換運(yùn)算的原理如 下:如2.1.2節(jié) 所 述,變 換 之 后 的 點(diǎn) 坐 標(biāo) 可以用變換前的原坐標(biāo)與單應(yīng)矩陣中的元素表示出來,那么,變換前的原坐標(biāo)也能夠用單應(yīng)矩陣中的元素和變換后坐標(biāo)表示。由式(2)~式(4)可得:
在得到8幅原圖映射到全景圖的單應(yīng)矩陣之后,首先用合成圖中所有點(diǎn)同原圖1的單應(yīng)矩陣進(jìn)行逆運(yùn)算。如果合成圖中的某一個(gè)點(diǎn)是從原圖1變換得到的,那么它逆變換得到的橫坐標(biāo)值x取值必然大于0小于原圖1的寬,縱坐標(biāo)y取值大于0小于原圖1的高。逆變換后x,y的取值不在此范圍內(nèi)的點(diǎn)就不是原圖1變換得到的。然后再把原圖1中點(diǎn)的地址填在矩陣M的相應(yīng)位置。
完成原圖1單應(yīng)矩陣逆變換、找出由原圖1變換得到的區(qū)域之后,依此類推,按順序分別找出原圖2~8變換到合成圖的區(qū)域,并將原圖中相應(yīng)點(diǎn)的地址填在矩陣M的相應(yīng)位置。
對(duì)于重疊區(qū)域則采取以下方式處理:再構(gòu)建7個(gè)二維矩陣(稱之為m1~m7),分別對(duì)應(yīng)7個(gè)重疊區(qū)域。按上文所述方法,原圖2中點(diǎn)的地址填充到矩陣M中后,會(huì)覆蓋原圖1重疊區(qū)域部分點(diǎn)的地址。所以將原圖1重疊區(qū)域點(diǎn)的地址信息從矩陣M中復(fù)制到矩陣m1中,再把原圖2的像素地址填在矩陣M中。對(duì)其他6個(gè)重疊區(qū)域,采用同樣的方法處理。LUT表示意圖如圖2所示。
圖2 LUT表示意圖
2.2.1 基于LUT表的圖像拼接
非重疊區(qū)域只需要通過LUT表(即矩陣M),按照地址映射關(guān)系,把原圖(即讀入的每一幀圖像)中像素點(diǎn)的值復(fù)制到全景圖對(duì)應(yīng)位置即可。
重疊區(qū)域采用線性融合方法。如前所述,對(duì)于每一個(gè)重疊區(qū)域,左側(cè)原圖的像素地址信息存放在矩陣mi(i=1,2,…,7)中,右側(cè)原圖像素地址信息存放在矩陣M中。所以,使用左圖像素權(quán)重線性遞減、右圖像素權(quán)重線性遞增的方法,對(duì)重疊區(qū)域進(jìn)行融合,得到重疊區(qū)域的像素值。
2.2.2 使用OpenMP多核并行方法對(duì)拼接過程進(jìn)行加速
直接使用上文所述基于LUT表的圖像拼接法,拼接一幀圖像花費(fèi)的時(shí)間就達(dá)到了40 ms以上,并不能滿足8路960×540分辨率25 f/s視頻信號(hào)的實(shí)時(shí)拼接。而多核CPU目前已廣泛使用,所以本文采用OpenMP多核并行,對(duì)拼接每一幀圖像的過程進(jìn)行加速,以滿足實(shí)時(shí)性要求。
實(shí)時(shí)全景視頻的顯示和存儲(chǔ)的時(shí)間代價(jià)較小,使用OpenCV庫函數(shù)即可。其具體耗時(shí)將在后面的實(shí)驗(yàn)結(jié)果部分展示。
本次實(shí)驗(yàn)的輸入信號(hào)為索尼SNC網(wǎng)絡(luò)攝像機(jī)采集的8路960×540實(shí)時(shí)視頻流,主機(jī)處理器為因特爾Core i5-8500六核處理器,軟件環(huán)境為Windows10+Microsoft Visual Studio2013+OpenCV2.4.11,編程語言為C++。讀入500幀數(shù)據(jù)進(jìn)行拼接、存儲(chǔ)和顯示,并記錄每一幀的讀取、拼接、顯示、存儲(chǔ)耗時(shí)和平均每一幀的各個(gè)步驟耗時(shí)。表1展示了平均每一幀的讀取、拼接、顯示、存儲(chǔ)每個(gè)步驟的耗時(shí),以及處理一幀圖像總耗時(shí)的平均值。
表1 程序運(yùn)行時(shí)間
平均每一幀的拼接時(shí)間為14.725 ms,總處理時(shí)間只需37.092 ms,基本滿足實(shí)時(shí)性要求。
拼接得到的全景畫面(分辨率3 636×932)如圖3所示。畫面無明顯的畸變和拼縫痕跡,也未出現(xiàn)明顯的鬼影。
圖3 使用本文方法拼接得到的全景畫面
本文研究了一種基于LUT查找表技術(shù)的多目全景視頻實(shí)時(shí)拼接技術(shù)。采用先離線匹配再構(gòu)建LUT表的方法,解決攝像機(jī)位置固定不變情況下的視頻全景實(shí)時(shí)拼接問題;但直接采用LUT法拼接8路960×540視頻,仍然無法滿足實(shí)時(shí)性要求,因此采用了OpenMP多核并行加速。實(shí)驗(yàn)結(jié)果表明,本文采用方法基本滿足實(shí)時(shí)性要求,且畫面無明顯畸變。而如何實(shí)現(xiàn)更高幀率和分辨率視頻信號(hào)的實(shí)時(shí)拼接,如何實(shí)現(xiàn)圖像自動(dòng)配準(zhǔn),以及多路視頻信號(hào)色差的處理等問題,還有待進(jìn)一步研究。