李鵬 趙天垚














摘要:文章采用車輛全景視圖拼接技術與3D車道線檢測技術來實現車輛行駛過程中,對車道線進行識別,并判斷車輛是否在車道線范圍內行駛(是否壓線),同時結合車載雷達自動規避障礙物的需求。利用車輛全景視圖拼接技術,將車輛上所有攝像頭的圖像進行拼接與變換,最終轉換到全景的鳥瞰圖下進行顯示。利用車道線檢測技術可以識別車身周圍的車道線,并判斷車輛的行駛狀況和是否壓線。最終可以滿足車輛全景可視與智能化的需求。
關鍵詞:校園安防;全景視圖;車載可視化
中圖分類號:TP393? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2023)35-0113-05
開放科學(資源服務)標識碼(OSID)
1 研究現狀
1.1 車載環視圖拼接
車載環視圖拼接技術是一種車載多攝像頭系統,它可以將車輛周圍的多個攝像頭的視頻流拼接成一個全景圖像,以提供更好的駕駛體驗和安全性。目前,車載環視圖拼接技術已經得到了廣泛應用,例如在無人駕駛、智能交通、智能網聯汽車等領域。目前,車載環視圖拼接技術的研究主要集中在算法優化、硬件設計、標定方法等方面。
根據車輛的大小設計4個魚眼攝像頭。在獲得每個攝像機的圖像后,需要通過特定的算法來處理圖像,將每個通道的圖像合成在一個坐標系中。同時每個圖像通過車載雷達來避開障礙物識別路上的標線[1]。
日本一家公司早年研發了一個名為Around View Monitor(AVM) 的全景影像系統。這套系統采用的是 4 個普通的攝像頭來獲取圖像,但是此系統并沒有對圖像合成建立細致的模型,只是將圖像拼接后改為俯視效果,再按照攝像機的位置對應展現,如圖1所示,存在的問題都是每個攝像頭結合處都有一條明顯的縫隙。
后期日本豐田汽車公司研發了名為 PVM的全景視頻系統,系統在調整攝像機安裝位置時,攝像機之間有重疊部分,最終全景效果要比AVM系統更好,同時消除了攝像機之間的接縫。
隨后,相關領域的工程師設計了基于DSP技術、魚眼攝像頭的拼接系統。經過不斷的技術革新,對多攝像頭的圖像拼接正確率進行了優化改進,但是大多數全景圖像效果仍然差強人意。
1.2 車道線檢測
車道線檢測技術是自動駕駛技術中的一個重要模塊,它可以通過攝像頭獲取道路上的車道線信息,以幫助車輛實現自動駕駛。通過建立一定的數學模型便可以讓安防小車準確識別標志線,并實現車道保持行駛。
2D車道線檢測檢測圖像平面中的車道線,并用相機位姿將它們投影到3D空間。一般來說,先進的單目車道線檢測器可以分為分割方法和回歸方法。
SCNN將傳統的深層逐層卷積推廣到特征圖中的切片逐層卷積,實現一層中跨行和列的像素之間的消息傳遞。LaneNet介紹了一種用于目標檢測的實例分割方法,該方法結合了二進制分割分支和嵌入分支。SAD 允許目標檢測網絡加強本身的表示學習,無需額外的標簽和外部監督。RESA通過反復移動切片的特征圖來聚合垂直和水平方向上的信息。
車道回歸算法可以分為關鍵點估計、基于錨點的回歸和逐行回歸。PINet結合了關鍵點估計和實例分割,GANet將車道表示為一組只與起點相關的關鍵點。PointLaneNet和CurveLaneNAS將圖像分成不重疊的網格,并根據垂直錨點回歸車道。Line-CNN和LaneATT在預定義的射線錨上回歸車道,而CLRNet通過金字塔特征動態細化射線錨的起點和角度。UltraFast引入了一種新的行分類方法,具有顯著的速度。Laneformer應用行列自注意力來適應傳統的Transformer來捕獲車道的形狀特征和語義上下文。
除了點回歸外,多項式回歸也是2D車道檢測任務的一種方法。PolyLaneNet 使用全連接層直接預測圖像平面中車道的多項式系數。PRNet將車道檢測分解為多項式回歸、初始分類和高度回歸三部分。LSTR引入了一種基于Transformer 的網絡來預測反映道路結構和相機姿勢的路參數。
3D車道線檢測最近引起了比2D車道線檢測更多的關注,原因是后者缺乏深度信息和空間變換的結果存在錯誤傳播問題。3DLaneNet是一種基于網絡內逆透視映射和基于錨的視覺表示的雙路徑架構。3D-LaneNet+將Bev特征劃分為不重疊的單元,并通過回歸相對于單元中心、線角和高度偏移的橫向偏移距離來檢測通道。Gen-LaneNet首先在虛擬頂部視圖坐標幀而不是自我車輛坐標幀中引入新的數學幾何引導的車道錨點,同時引用既定的數值幾何轉換直接計算網絡輸出的 3D 車道線點。CLGo用Transformer替換CNN主干來預測相機姿勢和多項式參數。Persformer構建了一個具有已知相機姿勢的密集Bev查詢,并在一個框架下統一了2D和3D邊緣檢測。
2 實現過程
首先需要在車身周圍安裝足夠數量的魚眼相機(以8個為例),使得每相鄰兩個相機之間具有重合區域。具體的系統處理流程圖如圖2所示:
2.1 魚眼相機畸變矯正
魚眼攝像頭的成像模型可轉化為單位球面投影模型。一般將魚眼攝像頭成像過程分解成2步:先將立體空間的坐標點線性的投影到虛擬球面上;再將虛擬球面上的點非線性地投影到水平圖像層[2]。
魚眼攝像頭合成圖像存在畸變,而且畸變主要為徑向畸變。
魚眼攝像頭的成像過程如圖3所示。實驗過程中發現,魚眼攝像頭生產過程中不能精確地設計投影模型,為了解決魚眼相機的標定難題,Kannala-Brandt提出了一般多項式近似模型。[θd]是[θ]的奇函數,將這些式子按泰勒級數展開,[θd]用[θ]的奇次多項式表示,即:
[θd=k0θ+k1θ3+k2θ5+...]
取前5項,給出了足夠的自由度來很好的近似各種投影模型:
[θd=k0θ+k1θ3+k2θ5+k3θ7+k4θ9]
下面給出空間點到圖像的投影過程。假設[P=(X, Y, Z)]為世界坐標系下一個三維坐標點,變換到相機坐標系下為[(XC, YC, ZC)]:
[XCYCZC=RXYZ+T]
轉換到相機坐標系下歸一化坐標點:
[x=XCZCy=YCZC]
計算[θ]角:
[r=x2+y2θ=atan(r,)]
根據直角三角形的正切計算公式可以推斷。r為物體通過魚眼鏡頭投放在虛擬平面的像高,即物體中像素點到主點的距離。
利用KB畸變模型進行加畸變優化處理:
[θd=θ(k0+k1θ2+k2θ4+k3θ6+k4θ8)]
計算該點在圖像物理坐標系中的坐標:
[x'=(θd/r)xx'=(θd/r)y]
最終得到圖像像素坐標:
[u=fx(x'+αy')+cxv=fyy'+cy]
[α]是扭曲系數,[fx]、[fy]、[cx]、[cy]是魚眼鏡頭的內參矩陣。
接下來介紹去畸變的過程。首先獲取每個相機的內參矩陣與畸變系數。在地面上鋪上一張標定布,并獲取各路視頻的圖像,利用標定物來手動選擇對應點獲得投影矩陣,如圖4所示。
魚眼相機去畸變問題一般使用張正友棋盤格標定法,首先通過矩陣推導獲得一個初始值,最后通過非線性優化獲取最優解,包括魚眼相機的內外參數、畸變系數,然后針對圖像做去畸變處理。
優化后的圖像可以發現圖像較為自然,畸變優化明顯。噪點較少、4個攝像頭成像后的邊界交匯點無黑線,如圖5所示。
2.2 多路攝像頭聯合標定
至此需要獲取每個相機到地面的投影矩陣,此模型會把攝像機校正后的畫面轉換為對投影圖上某個矩形區域的俯視圖。然后通過聯合標定的形式在巡邏車四周的攝像頭下擺放標定物,截取圖像手動獲得標定點,計算投影矩陣。
2.3 多攝像機投影變換
相機從2個不同的角度拍攝同一個平面,兩個相機拍攝到的圖像之間投影變換矩陣H(單應矩陣)為:
[H=K(R+T1dNT)K-1]
其中,K為相機內參矩陣,R、T為兩個相機之間的外參。
2.4 鳥瞰圖的拼接與平滑
將各路魚眼相機拍攝到的圖像,投影到汽車正上方平行于地面拍攝的相機平面上,從而得到鳥瞰圖。
然而,由于相機之間有重疊的區域,通過簡單的加權平均會導致拼接結果出現亂碼和重影,如圖6所示。
需要進行平滑處理。先取出投影重疊部分,進行灰度化和二值化處理,利用形態學方法去掉噪點,得到重疊區域的mask。最后將mask加入拼接當中[3-6]。
2.5 3D車道線檢測
對于車道線檢測,考慮采用基于深度學習的檢測方法。首先采集數據,獲取各路視頻的圖像數據,并進行標注,得到訓練數據集。在數據集上訓練深度學習模型,該模型可以端到端地輸出檢測到的車道線信息,如圖7所示。
3 程序實現部分
通過Python實現環視系統中相機的安裝位置標定、透視變換,同時使用OpenCV技術在AGX Xavier的無線控制車上實現。
小車上搭載了4個 USB 環視魚眼攝像頭,相機傳回的畫面分辨率為 640×480,圖像首先經過畸變校正,然后在射影變換下轉換為對地面的鳥瞰圖,最后拼接起來,經過平滑處理后得到了圖8的效果。全部過程在 CPU中進行處理,整體運行流暢。
系統的若干約定。為了方便起見,筆者對4個攝像機分別用front、back、left、right來代表,并假定其對應的設備號是整數,例如0、1、2、3相機的內參矩陣記做camera_matrix,這是一個3×3的矩陣。畸變系數記做dist_coeffs,這是一個1×4的向量。相機的投影矩陣記作project_matrix,這是一個3×3的射影矩陣。
獲得原始圖像與相機的內參步驟。首先需要獲取每個相機的內參矩陣與畸變系數。通過運行腳本run_calibrate_camera.py,告訴它相機設備號,是否魚眼相機,以及標定板的網格大小,然后手舉標定板在相機面前擺幾個姿勢即可。以下是視頻中4個相機分別拍攝的原始畫面,順序依次為前、后、左、右,并命名為front.png、back.png、left.png、right.png保存在項目的images/ 目錄下。
4 個相機的內參文件分別為ront.yaml、back.yaml、left.yaml、right.yaml,這些內參文件都存放在項目的yaml子目錄下??梢钥吹剑瑘D中地面上鋪了一張標定布,這個布的尺寸是? 6m×10m,每個黑白方格的尺寸為40cm×40cm,每個圓形圖案所在的方格是80cm×80cm。將利用這個標定物來手動選擇對應點獲得投影矩陣。
設置投影范圍和參數。接下來需要獲取每個相機到地面的投影矩陣,這個投影矩陣會把相機校正后的畫面轉換為對地面上某個矩形區域的鳥瞰圖。這4個相機的投影矩陣不是獨立的,它們必須保證投影后的區域能夠正好拼起來。這一步是通過聯合標定實現的,即在車的四周地面上擺放標定物,拍攝圖像,手動選取對應點,然后獲取投影矩陣。如圖9所示,首先在車身的4角擺放4個標定板,標定板的圖案大小并無特殊要求,只要尺寸一致,能在圖像中清晰看到即可。每個標定板應當恰好位于相鄰的兩個相機視野的重合區域中。
在上面拍攝的相機畫面中,車的四周鋪了一張標定布,這個具體是標定板還是標定布不重要,只要能清楚地看到特征點即可。
然后需要設置幾個參數(如圖10所示):
innerShiftWidth ,? innerShiftHeight :標定板內側邊緣與車輛左右兩側的距離,標定板內側邊緣與車輛前后方的距離。
shiftWidth , shiftHeight :這兩個參數決定了在鳥瞰圖中向標定板的外側能看多遠。這2個值越大,鳥瞰圖的范圍就越大,相應的,遠處的物體被投影后的形變也越嚴重,所以應酌情選擇。
totalWidth ,? totalHeight :這2個參數代表鳥瞰圖的總寬高,在這個項目中,標定布寬 6m,高10m,于是鳥瞰圖中地面的范圍為 (600 + 2 * shiftWidth, 1000 + 2 * shiftHeight) 。為方便計算,讓每個像素對應1cm,于是鳥瞰圖的總寬高為:
totalWidth = 600 + 2 * shiftWidth
totalHeight = 1000 + 2 * shiftHeight
車輛所在矩形區域的四角 (圖中標注的紅色圓點),這4個角點的坐標分別為 (xl, yt) ,? (xr, yt) ,(xl, yb) ,? (xr, yb) ( l表示 left, r表示right,t表示top,b表示 bottom)。這個矩形區域相機是看不到的,用一張車輛的圖標來覆蓋此處。
注意這個車輛區域四邊的延長線將整個鳥瞰圖分為前左 (FL)、前中 (F)、前右 (FR)、左 (L)、右 (R)、后左(BL)、后中 (B)、后右 (BR) 8個部分,其中 FL (區域 I)、FR (區域 II)、BL (區域 III)、BR (區域 IV) 是相鄰相機視野的重合區域,也是重點需要進行融合處理的部分。**F、R、L、R** 4個區域屬于每個相機單獨的視野,不需要進行融合處理。以上參數存放在 param_settings.py 中。
設置好參數以后,每個相機的投影區域也就確定了,比如前方相機對應的投影區域如圖11所示,接下來需要通過手動選取標志點來獲取地面的投影矩陣。
隨之需要確定以下參數:
-camera : 指定是哪個相機。
-scale : 校正后畫面的橫向和縱向放縮比。
-shift : 校正后畫面中心的橫向和縱向平移距離。
因為默認的 OpenCV 的校正方式是在魚眼相機校正后的,圖像裁剪出一個 OpenCV “認為”合適的區域并將其返回,這必然會丟失一部分像素,可能會把希望選擇的特征點裁掉。新的內參矩陣,對校正后但是裁剪前的畫面作一次放縮和平移??梢試L試調整并選擇合適的橫向、縱向壓縮比和圖像中心的位置,使得地面上的標志點出現在畫面中舒服的位置上,以方便進行標定。標定完成后圖像如圖12所示。
然后依次點擊事先確定好的4個標志點,如圖13所示。
這4個點是可以自由設置的,但是需要在程序中手動修改它們在鳥瞰圖中的像素坐標。當在校正圖中點擊這4個點時,OpenCV 會根據它們在校正圖中的像素坐標和在鳥瞰圖中的像素坐標的對應關系計算一個射影矩陣。這里用到的原理就是4點對應確定一個射影變換 (4點對應可以給出8個方程,從而求解出射影矩陣的8個未知量。注意射影矩陣的最后一個分量總是固定為 1) 。顯示投影后的效果圖14所示。
標定最后的實現效果如圖15所示。
4 總結
本項目設計了一個校園安防檢測智能車全景可視與智能化系統,包括車輛全景視圖拼接與3D車道線檢測。首先需要在車輛四周安裝足夠的魚眼相機,保證范圍的全覆蓋以及相鄰相機之間存在重合區域;對于每個相機,進行相機內參標定以完成去畸變過程,并依次進行相機聯合標定、投影變換、鳥瞰圖拼接與平滑,得到車輛全景的鳥瞰圖。最后采集數據訓練端到端的3D車道線檢測模型,實現對車道線的檢測。
參考文獻:
[1] 趙小松.全景泊車輔助系統的算法研究[D].西安:西安電子科技大學,2015.
[2] 楊前華,李尤,趙力.基于改進球面投影模型的魚眼圖像校正算法的研究[J].電子器件,2019,42(2):449-452.
[3] 張東,余朝剛.基于特征點的圖像拼接方法[J].計算機系統應用,2016,25(3):107-112.
[4] 劉敏,周聰,湯靖博.基于SIFT圖像配準算法優化研究[J].湖北工業大學學報,2020,35(2):32-36.
[5] 吳樂富,丁廣太.基于區域的圖像拼接算法[J].計算機工程與設計,2010,31(18):4044-4046,4050.
[6] 何惠洋.車載全景環視系統中的圖像拼接技術研究[D].西安:西安工業大學,2020.
【通聯編輯:唐一東】