黃思曉
(南方科技大學深港微電子學院 廣東省深圳市 518055)
這個系統,需要同時使用四路的魚眼攝像頭的輸入圖片,結果矯正,轉化,拼接等操作,計算量較大,需要選用性能較強的處理器,所以我們主要挑選了樹莓派和STM32;
由于需要實現目標識別,神經網絡算法必不可少。當下神經網絡的框架主要是使用python 語言編寫,所以我們使用可以用python 編寫的程序的樹莓派;
需要用4 路的魚眼攝像頭獲取廣角照片,我們選擇了USB 接口魚眼攝像頭。
由于樹莓派的算力有限,為了防止最后形成的2D 地圖刷新率過低,我們最終采用不在樹莓派上處理圖片和進行地圖的映射,相關計算量過大的任務交給筆記本電腦進行,這樣不僅可以減小樹莓派的壓力,還可以提高2D 地圖和全景照片實時反映車周邊情況的能力。
對于魚眼攝像頭拍攝的照片進行矯正前,需要獲得相機的畸變參數,而測量相機的畸變參數的方法主要有兩種,一種是用opencv的矯正方法,一種是調用Matlab 中的Camera Calibrator 模塊的矯正方法,我們分別對是用兩種測量方法,并用獲得的參數對照片進行矯正,最終發現opencv 的方法矯正的過程較為復雜,而且最終的效果的誤差超出了預期結果,最終采用了Matlab 中的Camera Calibrator 模塊獲得的相機參數。
對魚眼攝像頭拍攝的超廣角照片進行矯正的方法主要有兩種:棋盤矯正法,經緯度矯正法。我們分別對兩種對魚眼照片矯正畸變的效果,發現兩種方法在視野中心矯正效果相似,但在照片周邊棋盤矯正法更為優秀,所以選擇了棋盤矯正法。
在目標識別方面,存在三種網絡的形式:tiny,GPU 和CPU 版本。Tiny 版本網絡較小,可識別的物體有限,準確率較低,但是運行速度快;CPU 版本主要是使用CPU 運行,GPU 版本是使用GPU 運行。本系統選擇可以使用GPU 加速的GPU 版本。
在測距方面,現在主要有單目測距和雙目測距兩種方式。單目測距需要事先建立數據集,提前錄入目標的大致尺寸;雙目測距需要同時調用兩個攝像頭對目標進行測距,需要進行標定等操作。由于需要保證小車360 度范圍內每處都有兩個攝像頭同時觀測,對于每個視角160 度的魚眼攝像頭比較困難,最后選擇了較為簡單的單目測距的方案。

圖1:可行駛區域的識別
通過四路魚眼攝像頭,可以分別獲得車身四個方向的圖像,通過圖像拼接技術最終得到小車的360°全景圖像。同時可以獲得車身周圍的鳥瞰圖,俯視汽車可以更清晰的觀察車身周圍的情況。
四路魚眼攝像頭擁有更大的視角,因此可以容易獲得倒車時車身周圍的信息,通過魚眼攝像頭獲得的圖像進行軟件上的處理可以識別出停車的具體方位,同時可以實時檢測到車后方的障礙物信息,例如:車輛、行人、動物、基礎設施、交通工具等。在檢測到障礙物時可以返回到輸出的2D 地圖上,給駕駛員及時的提醒。在進行倒車的時候,受限于旁邊車輛的干擾,魚眼攝像頭可以及時捕捉該信息并且反映到2D 地圖上,可以在地圖上標明車輛的可行使區域,并給予駕駛員一定的輔助。因此會在2D 地圖上展示指引標識,指引駕駛員進行最優的操作。
4 路魚眼攝像頭得到的視頻可以被儲存到系統之中,類似于行車記錄儀,可以在發生意外的時候讀取倒車時的視頻進行發生意外的責任判定。
由于樹莓派算力的原因以及攝像頭像素的限制,最終可以獲得1280×720 分辨率的圖片,經過魚眼攝像頭去畸變的過程,應用圖像拼接技術可以最終獲得1280×720 分辨率的全景圖片,圖片包含車身周圍360°的全部景象,并實時根據車輛位置進行更新。
鳥瞰圖覆蓋的范圍,2D 地圖可以毫秒級進行數據更新,在硬件限制的情況下可以做到最低延遲。同時,在單目測距算法的加持下,顯示障礙物的位置坐標誤差在5%以內。
基于四路魚眼攝像頭的拍攝,可以保存的視頻以供駕駛員需要時獲取。
單目測距主要是通過建立一對相似三角形來進行測距,目標的像素高度為x,目標實際高度為X,所以由相似三角形可得,由此進而計算物體距離車的距離。測距程序會讀取目標識別程序輸出的結果,在已設置的數據集中查找識別的物體的實際尺寸,進而利用上面的公式進行計算,之后用相關的圖片映射到二維地圖的相關坐標。
魚眼鏡頭通過光學的設計,可以做到接近180°視場角。本設計購買的相機支持160°。但由于視場角的增大,在圖像遠離中心的地方會出現不同程度的畸變,離中心點越遠畸變越明顯。
常見的魚眼圖像矯正方法有兩種,一是基于經緯度矯正法,另一種是棋盤矯正法。本設計嘗試兩種矯正方式后,發現棋盤法矯正效果較佳,故選擇棋盤法進行魚眼矯正。
本設計的圖像拼接基于特征點提取和匹配。本設計采用SURF特征點提取算法。SURF,加速穩健特征,是一種穩健的局部特征點檢測和描述算法。與Sift 算法一樣,Surf 算法的基本路程可以分為三大部分:局部特征點的提取、特征點的描述、特征點的匹配。
Surf 改進了特征的提取和描述方式,用一種更為高效的方式完成特征的提取和描述,具體實現流程如下:
(1)構建Hessian(黑塞矩陣),生成所有的興趣點,用于特征的提取;
(2)構建尺度空間;
(3)特征點定位;
(4)特征點主方向分配;
(5)生成特征點描述子;
(6)特征點匹配。
黑塞矩陣(Hessian Matrix)是一個多元函數的二階偏導數構成的方陣,描述了函數的局部曲率。由德國數學家Ludwin Otto Hessian 于19 世紀提出。
對一個圖像f(x,y),其Hessian 矩陣如下:

在構造Hessian 矩陣前需要對圖像進行高斯濾波,經過濾波后的Hessian 矩陣表述為:

當Hessian 矩陣的判別式取得局部極大值時,判定當前點是比周圍鄰域內其他點更亮或更暗的點,由此來定位關鍵點的位置。
Hessian 矩陣判別式中的f(x,y)是原始圖像的高斯卷積,由于高斯核實服從正態分布的,從中心點往外,系數越來越低,為了提高運算速度,Surf 使用了盒式濾波器來近似替代高斯濾波器,所以在Dxy 上乘了一個加權系數0.9,目的是為了平衡因使用盒式濾波器近似所帶來的誤差。盒式濾波器對圖像的濾波轉化成計算圖像上不同區域間像素和的加減運算問題,這正是積分圖的強項,只需要簡單幾次查找積分圖就可以完成。
首先我們使用opencv 中的SURF 算法,獲取圖像中的特征點,然后使用KNN 算法獲取匹配的特征點,最后經過透視矩陣變換得到拼接后的全景圖像。由于拍攝時使用的攝像頭以及光線存在差異,最后合成的圖片會出現明暗差異,所以最后會對全景圖片做色彩均衡化減小全局色差。
本設計選用YOLOV4 識別網絡,相比R-CNN 算法,其是一個統一的框架,其速度更快,而且Yolo 的訓練過程也是端到端的。
本項目使用4 路USB160°魚眼攝像頭采集視頻信號。使用攝像頭最高支持1280×720 分辨率,但實際項目測試中需要降低分辨率以提高程序執行的速度。
本項目采用樹莓派4B 作為四路視頻采集設備。樹莓派4B 配置了兩個USB2.0 和兩個USB3.0 接口。
由于樹莓派要帶動四路USB 魚眼攝像頭,為了滿足攝像頭的供電充足我們選擇了可以提供5V3A 功率的充電寶作為供電端。同時對小車的供電我們采用兩節5 號電池進行供電。

圖2:2D 地圖
本項目采用自主設計的智能小車,通過Arduino 控制電極工作來實現小車的前進后退以及左右轉彎,基本滿足模擬現實汽車的行駛的基本要求。同時,在小車的合理位置放置了樹莓派、4 個魚眼攝像頭以及供電模塊。
首先在樹莓派中通過Opencv 調取攝像頭進行拍照。其次通過樹莓派的Wi-Fi 傳輸將獲取的圖片上傳到計算機進行下一步的計算。用Opencv 對獲得的圖像進行畸變的矯正,然后通過調用YOLO v4庫進行圖像的識別,分別獲取障礙物的位置信息和標志物的位置信息。最后將圖像拼接到一起得到全景圖像。
在有限的空間下,在小車上放置樹莓派、四路攝像頭、驅動電機、Arduino、樹莓派供電裝置(充電寶)、以及給小車和Arduino 供電的兩節5 號電池。大量走線都隱藏在小車內部,以及外殼內部。整體上看小車結構緊湊,重量分布均勻,同時也能滿足攝像頭拍攝小車四周的要求,可以得到規定范圍內的圖像。
將小車放置在設定的場景中,在小車周圍擺放人、動物、自行車、汽車等障礙物。小車保持不動,在靜態下開啟系統,最后可以得到對應的2D 地圖信息以及全景地圖。
通過遙控器控制小車在可行駛區域進行行駛,將各障礙物擺放在小車運動的軌跡上。在小車行駛過程中可以實時檢測障礙物位置并反饋到2D 地圖上,同時也可以實時得到全景地圖,最后也可以調用小車運行時的錄像,起到倒車記錄儀的作用。
首先進行魚眼鏡頭畸變的標定,運用Matlab 自帶程序庫識別魚眼攝像頭捕捉的固定棋盤圖像,最后完成畸變的標定,為畸變的矯正提供數據的支持。其次進行鳥瞰圖識別的測試,在小車四周擺放棋盤圖像。用自寫代碼分別識別四個方向的區域范圍,完成鳥瞰圖的拼接。最后進行單目測距的測試,用魚眼攝像頭獲取一把尺子的完整圖像,通過對應像素點和絕對長度的關系,來算出單目測距所需要的系數。
在地面規劃出小車的可行駛區域,并且在邊界位置貼上黑線作為警示。在可行使區域內擺放障礙物圖片供小車識別。
通過遙控器控制小車,測試紅外線遙控器控制小車能否正常運轉。之后測試小車上安裝的魚眼攝像頭可以正常工作,并且返回圖片和視頻可以被接收。
通過matlab 可以得到鏡頭的內參矩陣、切向畸變以及橫向畸變。我們所使用的魚眼攝像頭有很少的切向畸變,但是有顯著的橫向畸變。
很明顯的看出,圖1 中可以完美的識別可行駛區域的范圍,并且重合率接近100%,對簡單的直線型停車線識別的準確率幾乎可以達到100%。
通過圖2 可以看出具體障礙物的坐標并將其標識在2D 地圖上,并且在2D 地圖上右側可以返回四路的鳥瞰圖,在2D 地圖的右上角可以進行選擇全景地圖、倒車記錄和鳥瞰圖的查看。
通過上述測試數據最終可以得到一個較為完整的輔助停車系統,整體可以實時返回障礙物的坐標,并且也可以比較清晰的返回鳥瞰圖和全景地圖,同時也能保存倒車時的影像,可以在必要時調用查看。
(1)實現魚眼圖像矯正,使超廣角照片畸變更小,更接近于人眼直接觀看的效果;
(2)使用矯正后的照片進行360 度全景圖像拼接,并實時形成汽車四周的鳥瞰圖,使泊車輔助效果更好;
(3)對交通目標(人,汽車,狗,自行車,車道等)進行識別,對識別的目標進行測距,實時反饋到2D 地圖上,使對障礙物的觀察更加直觀;
(4)保存停車視頻歷史記錄,方便事后回放復盤。