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