甄 好,王連明
(1.東北師范大學物理學院,吉林 長春 130024;2.海南熱帶海洋學院海洋科學與技術學院,海南 三亞 572022)
遠程全景監(jiān)控可用于智能駕駛、遙感圖像觀測、工業(yè)園區(qū)監(jiān)控等領域[1-2].在軍事信息系統(tǒng)中也有著廣泛的應用,戰(zhàn)場環(huán)境信息是影響指揮決策的關鍵部分,及時獲得有效、全面的戰(zhàn)場環(huán)境信息可使指揮官知曉自身情況、敵方情況,從而及時、有效地做出相應決策[3].現有的視頻采集系統(tǒng)通常采用焦距、視場角不變的單一攝像頭進行圖像采集,由于攝像頭焦距的限制,很難采集到大場景圖像.大范圍的視頻監(jiān)控多采用多個攝像頭,但在終端通常只分別顯示各個攝像頭采集到的圖像,沒有形成完整的大場景圖像,不利于使用者觀察.專業(yè)的魚眼攝像頭及360°全景攝像頭成本較高,采集到的圖像易發(fā)生畸變,且觀測的距離有限,很難推廣使用[4].目前遠程監(jiān)控多采用網絡攝像頭,網絡攝像頭同樣存在焦距固定、視場角受限、無法采集大場景圖像的問題,此外,網絡攝像頭的傳輸速率通常只能達到100 MB,無法實現高速傳輸.
為解決以上問題,設計了一種基于多攝像頭的大場景遠程實時監(jiān)控系統(tǒng),系統(tǒng)采用多個普通的模擬攝像頭進行視頻采集,節(jié)約了成本,而且便于操作.經千兆以太網高速傳輸到上位機后,通過OpenCV編寫圖像拼接程序并使用GPU對拼接程序進行加速,可快速獲得全景圖像.
本文系統(tǒng)主要由視頻采集傳輸單元以及遠程圖像拼接與顯示單元構成.系統(tǒng)總體架構如圖1所示.視頻采集傳輸單元主要負責對視頻進行采集、處理、傳輸,該單元由視頻采集模塊和網絡傳輸模塊組成.視頻采集模塊使用攝像頭進行采集,單個模塊最多可連接4個攝像頭.采集完畢后,將視頻數據送入視頻解碼器以及FPGA進行處理.處理完畢后,將數據送入網絡傳輸模塊進行傳輸,網絡傳輸模塊包括FPGA和千兆網卡芯片,可完成對數據包的打包及發(fā)送.為實現n個攝像頭圖像的采集,可通過交換機連接多個視頻采集傳輸單元,從而獲取更大場景的圖像.
圖1 系統(tǒng)總體架構
遠程圖像拼接與顯示單元由視頻接收與顯示模塊和圖像拼接與顯示模塊構成,可完成對視頻的接收、顯示以及圖像的高速拼接.視頻接收與顯示模塊利用上位機網卡以及接收程序完成視頻數據的接收并經過處理顯示單個攝像頭采集到的視頻.為滿足對大場景圖像的需求,圖像拼接與顯示模塊在上位機借助圖像拼接技術,完成了對大場景圖像的獲取,并借助GPU等工具加快了圖像拼接的速度.
為獲取遠距離的圖像,采用焦距較大的模擬攝像頭進行采集.為便于后續(xù)處理,需將模擬攝像頭采集到的模擬視頻信號轉換為數字信號.本文設計采用BNC口作為模擬攝像頭的接口,借助TW2867視頻解碼芯片獲得數字視頻信號[5].FPGA具有高性能、低成本、靈活、穩(wěn)定等特點,可以調用多種外設實現對視頻數據的傳輸與處理,完成對數據的高速處理及操作.故采用FPGA作為主控芯片,完成所需功能.本單元視頻采集模塊框圖如圖2所示.
圖2 視頻采集模塊
為實現多路監(jiān)控、節(jié)省管腳,需在主控器FPGA中通過I2C接口配置TW2867內部寄存器,使其配合108 MHz將四路時分復用數據復合至一路輸出.單個通道的視頻數據符合BT.656標準.四路數據視頻時分復用后格式如圖3所示.
圖3 時分復用后數據格式
分離后的BT.656標準的圖像數據存在無效數據,進行裁剪后可得到4∶2∶2的YCbCr數字視頻流.需將YCbCr視頻流數據通過計算轉換為RGB格式的數據,才能在顯示終端進行顯示.計算公式為
R=1.164(a(Y)-16)+1.596(b(Cr)-128),G=1.164(a(Y)-16)-0.813(b(Cr)-128)-0.392(c(Cb)-128),B=1.164(a(Y)-16)+2.017(c(Cb)-128).
(1)
在FPGA中,為加快數據處理速度,采用三級流水線:通過移位相加計算每一個乘法、將乘法的結果相減、完成移位操作并進行溢出檢查.這種處理方式減少了寄存器的使用,較好地處理了速度與延時的關系,降低了關鍵路徑的時延,完成由浮點型數計算出整型數的功能,得到RGB格式的數據.
得到的RGB格式數據為隔行數據,需將其轉換為逐行數據以便在監(jiān)控端顯示.為了減少計算量、不損失分辨率,采用場間插值法,利用奇偶場合并成一幀圖像.該方法通過改變DDR2讀寫地址的映射實現轉逐行操作.為了實現對DDR2的控制,將控制DDR2的程序進行了兩層封裝[6-7]:第一層封裝主要是借助狀態(tài)機實現指定長度的頁突發(fā)讀寫操作;第二層封裝可實現乒乓操作[8],并根據讀、寫FIFO中的數據個數決定是執(zhí)行突發(fā)讀操作還是突發(fā)寫操作.
相較于串口和USB等數據傳輸方式,網卡可快速傳輸大量數據,準確性較高、傳輸距離遠,更適用于遠程傳輸[9-10].我們選用千兆網卡RTL8211EG芯片將數據通過網線以及交換機傳輸到遠程圖像拼接與顯示單元,RTL8211EG到MAC(FPGA)之間的傳輸接口采用GMII接口.其向FPGA輸出125 MHz的參考時鐘,可與遠程圖像拼接與顯示單元自協(xié)商匹配成千兆網傳輸模式進行傳輸.通過交換機進行擴展,可完成無限多個攝像頭數據的傳輸.本文設計以8個攝像頭為例,使用NETGEAR的8口千兆GS308交換機完成硬件連接及數據傳輸.
網卡只具有PHY層功能,所以需要在FPGA內部完成對數據包的打包,傳輸視頻采集模塊處理完畢的數據.網絡傳輸模塊框圖如圖4所示.
圖4 網絡傳輸模塊框圖
相較于TCP,UDP是無連接的協(xié)議,一次握手快速建立連接即可傳輸數據,為實現高速傳輸,采用UDP協(xié)議并利用狀態(tài)機完成對以太網幀的發(fā)送[11],其狀態(tài)轉移如圖5所示.
圖5 數據發(fā)送狀態(tài)機
程序從空閑狀態(tài)開始運行,進入發(fā)送前導碼狀態(tài),待前導碼以及幀起始定界符發(fā)送完畢,開始發(fā)送以太網、IP、UDP首部數據.為了便于修改,將以上數據存在ROM表中,當狀態(tài)機處于相應狀態(tài)時,采用地址尋址的方式將數據取出并發(fā)送.在FPGA端ROM表中設置不同端口號,可通過端口號區(qū)分不同的視頻采集模塊.
南朝詩文用典遭人詬病之處,即在于因炫才逞博而使事忘義,故有“淫文破典”之弊;而有人因這一弊端,便認為抒情性詩文不貴于用事,從而反對用典,又未免矯枉過正。從沈約對用典的態(tài)度中可以看到,他實際上是要求能在直尋與隸事、性情與才學之間,找到適當的平衡點。這樣,用典對抒情就會起到積極的作用。這個平衡點簡單地說就是人工與自然的統(tǒng)一,雖出機杼,而泯于自然。
為了提升傳輸的速度,使用乒乓操作將數據寫入寄存器中,讀取時,先讀取第1張圖片的第1行數據,此時第2張圖片的第1行數據也已經存儲好,而第1張圖片的第2行數據并未存儲完畢,故先讀取第2張圖片的第1行,接下來讀取第3和4張圖片的第1行.再讀取第1張圖片的第2行,直至完成4張圖片的傳輸.為了在上位機區(qū)分不同的攝像頭,將UDP數據的第1個8 B數據作為攝像頭標記.
完成一個UDP數據包傳輸后,進入CRC校驗狀態(tài).循環(huán)冗余檢查(CRC)是一種數據傳輸檢錯功能,可保證數據傳輸的正確性和完整性.CRC校驗數據發(fā)送完畢后,進入發(fā)送結束狀態(tài),網絡設備和組件在接收一幀之后,需要一段短暫的時間來恢復并為接收下一幀做準備.
圖6 上位機圖像處理程序
遠程監(jiān)控處理系統(tǒng)使用英特爾公司的Intel? Ethernet Connection I219-V的網卡芯片接收數據.借助MFC編寫接收程序,可完成多路實時監(jiān)控.上位機程序進行初始化之后,創(chuàng)建套接字并綁定套接字和IP地址,在開始鍵按下的情況下接收數據,將圖像存入數據緩沖區(qū),一張圖像緩存完畢后開啟對應線程進行數據處理,采用量化補償的方法,將傳輸的RGB565數據轉換為可以直接顯示的RGB888數據[12],待480行全部轉換完畢后,開始顯示圖像.無須接收新圖像時,關閉套接字并清除套接字庫.
每個接收程序只能綁定一個端口號,采用交換機進行擴展后,需在上位機開啟多個程序接收來自不同圖像傳輸處理系統(tǒng)的圖像.
為了使本文設計更好地應用于大場景監(jiān)控以及機器視覺中,進行圖像拼接是十分重要的.實現圖像拼接主要包含圖像獲取、圖像預處理、圖像配準和圖像融合等過程.為完成高速拼接,需使用NVIDA 公司的GeForce GT730顯卡對拼接程序進行加速.拼接流程如圖7所示.
圖7 圖像拼接流程
為了保證圖像拼接的實時性以及較高的成功率,采用SURF算法檢測圖像特征點[13-14],并對重疊部分的圖像進行配準操作,將所有圖像兩兩匹配,將置信度高于門限的所有匹配合并到一個集合中.
在GPU上實現SURF算法,需要對不同階段的算法進行并行化分.算法主要分為積分圖像的計算、特征點檢測、特征描述三部分[15].每一部分對圖像進行復雜運算時,可利用GPU并行計算的優(yōu)勢,將積分圖像的運算映射到GPU上,分別開啟線程計算所需數據.
將SURF算法映射到GPU上時,需先用CPU將相應圖像轉換為灰度圖,并上傳到GPU中進行下一步運算,得到相應信息后傳回內存中.根據Amdahl定律,此時加載圖像及灰度圖轉換所占的時間變大,成為限制拼接時間的關鍵因素[16].因此需使用多核CPU進行計算,將加載圖像及灰度圖轉換操作移至另一個CPU核上,與GPU對圖像的處理并行進行.
攝像頭的擺放與參數對圖像拼接亦會造成一定影響,在程序編寫中,我們添加相機標定部分的內容[17],采用光束平差法,對相機參數進行矯正,并對圖像進行柱面投影[18],降低視差的影響.圖像拼接完成后,為減小拼接痕跡,在圖像的拼接處需進行接縫查找并在接縫處用多頻段融合法做融合處理[19].
在攝像機固定之后,圖像拼接相應的參數不會再發(fā)生變化,本程序在初始化部分完成特征提取、匹配、變換矩陣等參數的計算.拼接時不再逐幀對以上信息進行計算.
采用8個攝像頭采集8路數據通過視頻采集傳輸單元傳輸至遠程圖像拼接與顯示單元.經過測試圖像清晰無抖動,可達到實時性傳輸,傳輸速率達912 MB,實驗結果如圖8和9所示.
圖8 端口號8080和9090接收界面
圖9 發(fā)送數據速度
圖像拼接的時間與圖像的復雜程度、圖像的拍攝距離以及圖像的個數有著密切的關系.實驗中,需注意攝像頭的擺放問題,為采集到高質量的拼接圖像.需盡可能將攝像頭擺放在同一水平面上,并在多臺攝像頭拍攝的圖片至少存在30%重合的條件下將攝像頭間隔一定距離排開,若場景距離較遠、視野較大,可采用平行放置的模式擺放攝像頭,若須獲得全景圖像,可結合攝像頭焦距及視角,采用旋轉放置的模式擺放攝像頭.本次實驗對圖8中采集到圖像進行拼接,得到結果如表1及圖10所示.結果表明,本系統(tǒng)可完成8張圖像的采集及拼接,經初始化之后,拼接時間可達0.38 s.拼接后圖像較為清晰完整,沒有出現重影、明顯色差或接縫.
表1 遠程拼接測試結果
拼接8張遠程圖像效果見圖10.拼接后全景圖清晰度較高,接縫處并無明顯的拼接痕.
圖10 8張遠程圖片拼接效果
本系統(tǒng)借助模擬攝像頭、視頻解碼器、FPGA、千兆網卡、交換機、GPU以及計算機設計了視頻采集傳輸單元以及遠程圖像拼接與顯示單元,完成了對大場景圖像的獲取及傳輸.可通過交換機連接多個視頻采集傳輸單元,獲取多個攝像頭的圖像,盡可能多的獲取場景內的信息,并通過千兆網卡完成高速傳輸,借助上位機以及GPU完成對圖像拼接,得到信息較為完整的全景圖像,并可達到較高的拼接速度.