如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航
圖1.圖像上的激光雷達點
激光雷達和照相機是用于感知和理解場景的兩個基本傳感器。他們建立周邊環境模型、提供檢測和確定其他對象位置的方法,從而為機器人提供了安全導航所需的豐富語義信息。許多研究人員已開始探索用于精確3D對象檢測的多模式深度學習模型。Aptiv開發的PointPainting [1]算法是一個非常有趣的例子。
那么為什么要將這2個傳感器進行融合?
在捕獲更密集和更豐富的表現方面,相機的性能優于LIDAR。從圖2中,僅看稀疏點云,就很難正確地將黑匣子識別為行人。但是注意RGB圖像,即使人朝后,我們也可以很容易地看出物體看起來像行人。除此之外,其他的想通信號燈和道路標志都是激光雷達很難解決的問題,但是可以很簡單的通過視覺圖像進行處理。
圖2.行人檢測的RGB和點云表示
相反,激光雷達可以很好提取距離信息,但是使用相機以標準透視圖進行測量距離則非常困難。
通過融合來自兩個傳感器的信息,利用兩個傳感器的優勢,克服各自的局限性。搭載多個傳感器還可以實現冗余,這是是在傳感器發生故障時的重要保障。
目的
在本文中,我們將進一步探討如何同時利用LIDAR和相機數據,以創建更加豐富和準確的環境3D場景。
我們將使用Kitti 3D對象檢測數據集 作為參考。請參閱Kitti Dataset網站或文件夾下Github 上的代碼 以了解數據格式。
剩下的部分,我們首先需要討論傳感器安裝相關的問題,通過Kitti對象檢測數據集來了解數據結構,并通過如何進行校準以了解校準矩陣。接下來,將詳細介紹3D-2D和2D-3D投影映射,最后以可視化的方式顯示激光雷達與攝像機的數據。所有inline文本格式都是函數,變量或代碼中的文件 。
傳感器設置,校準和坐標系(KITTI)
圖3. Kitti ego車輛和傳感器位置
在開始分析之前,需要了解數據采集過程中傳感器的相對位置。這是在一個坐標系到另一個坐標系之間執行任何轉換的必要信息。請注意,每個傳感器都有其自己的坐標框架,如圖3所示。
硬件規格
Kitti車輛上的幾個傳感器包括激光雷達,灰度相機,彩色相機和IMU。但是,我們只關注:
? 凸輪0:灰度攝像機,立體聲裝備的左攝像機。這也是參考相機
? 攝像頭2:RGB彩色攝像頭,立體聲裝備的左攝像頭
? Velo:64光束Velodyne激光掃描儀
坐標系:車輛面向左,左坐標系(圖3)
我們有什么數據?
請參閱以data/readme.txt獲取更多詳細信息。
激光雷達點云fileid.bin:2D數組[num_points, 4]。
對象實例fileid_label.txt:對于每一行,每個對象的注釋都有15列,代表相機坐標中的某些元數據和3D框屬性:
type | truncation | visibility | observation angle | xmin | ymin |xmax | ymax | height | width | length | tx | ty | tz | roty
一些實例type被標記為“ DontCare”,表明它們沒有被標記。
RGB圖像fileid_image.png:來自攝像機2的圖像
校正參數
fileid_calib.txt
校準參數以行優先順序存儲。包含3x4投影矩陣參數,這些參數描述了世界坐標系上3D點到圖像中2D點的映射。
校準過程在[2]中說明。需要注意的是將校準cam0用作參考傳感器。激光掃描儀相對于參考相機坐標系進行配準。R_ref2rect在校準過程中也已經被考慮,以校正攝像機之間的平面。
它包含以下信息:
? P_rect[i]:從校正參考相機框架到投影的投影變換cam[i]。注意,bx [i]表示相對于參考攝像機0的基線。
? R0_rect?:旋轉以說明參考攝像機中點的校正。
? Tr_velo_to_cam:從激光雷達到參考相機的歐幾里德變換cam0。
框間投影
從線性代數的角度,投影矩陣在以均勻的坐標中表示為一個線性變換,它通過從一個向量空間到另一個向量空間x'= Px的乘法來改變點。可以對其進行合成以遍歷不同的坐標系。
在這種情況下,轉換矩陣主要表示傳感器之間的剛體轉換以及從3D到2D點的透視投影。
從激光雷達到攝像機2的投影project_velo_to_cam2:假設我們要將Velodyne點轉換為攝像機坐標則:
proj_mat = P_rect2cam2 *R_ref2rect *P_velo2cam_ref
注意,乘法應在同構坐標中執行以簡化計算。要轉換為像素坐標,只需通過z坐標進行歸一化即可。
圖4.轉換步驟
從攝像機到激光雷達坐標的投影:3D框的注釋在攝像機坐標中給出。如果要將相機框架中的框形頂點轉換為激光雷達,則project_cam2_to_velo需要計算逆剛性變換并向后變換。
R_ref2rect_inv = np.linalg.inv(R_ref2rect)P_cam_ref2velo = np.linalg.inv(velo2cam_ref)
proj_mat = R_ref2rect_inv * P_cam_ref2velo
圖片框
方框通常用于代表其他特工和行人。通過定義8個頂點將對象完全定位為盒模型,以便獲取和注釋。框框可能不是最好的代表行人,因為行人不拘泥。
還有其他一些表示對象的方法,其中包括值得考慮的關鍵點,cad模型和分段蒙版。
圖5.在圖像平面上顯示框
我們可以得到盒子的位置(t),盒子在攝像機坐標系中的偏航角(R)(假設沒有俯仰和滾動)以及尺寸:高度(h),寬度(w)和長度(l)。請注意,在相機坐標中標注了對象的3D框!有了這些信息,我們可以輕松地將盒子模型轉換為相機空間中的確切位置。
考慮上面的圖5,每個盒子實例的原點都設置在底部和中央,對應于與自我車輛和地面相同的高度。要將3D框投影到圖像:
? 首先,我們得到在照相機的方塊經由坐標[R | T],其中R = roty和t = (tx, ty, tz)從注釋中label.txt
? 接下來,將透視投影應用于圖像平面?P_rect2cam2
圖片中的PointCloud [3D-2D]
圖6.圖像上激光雷達點的顏色編碼范圍值
如果我們想以2D方式處理數據,則可以通過將點云投影到圖像上以使用相應的激光雷達范圍值(z)構造稀疏深度圖表示來收集更多信息。稀疏性取決于映射到像素的激光雷達光束的數量。
與從攝像機預測深度圖相比,稀疏深度圖是方便且準確的范圍數據。在偽Lidar ++中 描述了使用稀疏深度圖來增強基于單眼的檢測的工作。
要將點映射到像素,這是從激光雷達到像平面的投影變換。
? 計算投影矩陣project_velo_to_cam2。
? 投影指向圖像平面。
? 刪除圖像邊界之外的點。
PointCloud [2D-3D]中的框
激光雷達空間的可視化和工作在空間推理方面提供了最全面的理解。此外,如果需要,我們可以輕松地更改相機視角以從不同角度觀察環境。
圖7. 3D盒子投影到點云上
在此示例中,我們不考慮從360度旋轉的LIDAR掃描儀繪制所有掃描點,而是僅考慮位于攝像機視場內的點云,如圖4所示。接下來,我們只需要應用逆變換來使用投影將相機坐標系中的3D框投影到LIDAR 。
步驟如下:
? 計算投影矩陣project_velo_to_cam2。
? 投影指向圖像平面。
? 刪除圖像邊界之外的點。
? 將3D盒子投影到LIDAR坐標
結束
了解如何將數據從一個傳感器轉換到另一個傳感器對于開發我們算法的性能至關重要。例如,假設我們正在研究基于單眼的3D檢測器,則在將3D框注冊到激光雷達點時,激光雷達點可以對檢測器的精度進行完整性檢查。
但是,當涉及傳感器融合本身時,該任務仍然是一個挑戰,因為多模式傳感器在數據存儲和處理方式上有一些差異,如前所述。這使得在運行時很難在幾何上和時間上對齊。
參考
[1] Sourabh Vora,Alex H. Lang,Bassam Helou和Oscar Beijbom。點畫:用于3D對象檢測的順序融合,2019年
[2] A. Geiger,F。Moosmann,O。Car和B. Schuster,“使用單發自動校準距離和攝像機傳感器的工具箱”,ICRA,2012年
如果本文對小伙伴有幫助,希望可以在文末來個“一鍵三連”。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據研究方向邀請進入相關微信群。請勿在群內發送廣告,否則會請出群,謝謝理解~
總結
以上是生活随笔為你收集整理的如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫基础知识点_入门Pyth
- 下一篇: python中一个范围怎么表示_我应该如