當前位置:
首頁 > 知識 > 使用雙目相機進行三維重建 第二部分:姿態估計

使用雙目相機進行三維重建 第二部分:姿態估計

本文為 AI 研習社編譯的技術博客,原標題 :

3D Reconstruction with Stereo Images - Part 2: Pose Estimation

作者 |Keenan James

翻譯 | 醬番梨、Hasekiel_learn

校對 | 醬番梨 審核 | 醬番梨 整理 | 立魚王

https://medium.com/@dc.aihub/3d-reconstruction-with-stereo-images-part-2-pose-estimation-1bcfbba61b26

引言:在上一篇文章中我們講了相機的特徵以及這些信息與我們做3D重建有什麼關係。通過相機校正,我們確認了一些我們程序要用的相機屬性數據,即相機矩陣(camera matrix)和扭曲係數(distortion coefficients)。利用這些信息,我們可以從拍攝的模式圖像(patterned image)中計算出現實空間中物體的位置。在我們的例子中,我們會用象棋棋盤圖像,並通過3D立方的繪製方向來可視化平面物體的相對位置。


開始

這個練習的目的是給我們的圖像畫上x,y,z軸,放在棋盤的底部角落。按慣例,3D空間中X坐標軸用藍色、Y用綠色、Z用紅色。這個例子里,我們讓Z軸垂直於物體(即Z軸是從棋盤2D平面指向相機的)。

我們首先取出之前練習保存的相機矩陣和扭曲係數。

接下來要寫一個函數來繪製3D坐標軸。這個函數的輸入是:棋盤圖像、棋盤四個角(坐標)、三個分別代表三坐標軸方向終點的點(坐標)。

棋盤的角落可以用之前的`cv2.findChessboardCorner()`函數,返回的是一個含有4個角位置的數組。這裡我們只需要注意底部左手角落,它是數組的第一個元素,如下圖`corner[0]`。得到該坐標後,我們就可以利用之前定義的3個終點展開我們的坐標軸了。

下一步我們要在3D空間中定義一些點幫助我們繪製坐標軸。回憶一下在上一個練習中,我們令棋盤一個方塊的邊長等於一個單位。在這個例子中,我們在三個方向上畫了長3個單位的坐標軸。Z軸需要標負值,因為這樣可以保證軸線面朝相機。

現在我們可以用上我們的繪製函數了。第一步先讀取圖片,尋找7x6的格子(譯者註:指棋盤)。找到之後,我們可以利用`cv2.solvePnPRansac()`計算其旋轉角和平移距離(rotation and translation)。現在把3D空間的軸點(axis points)投影到2D圖像平面去。識別出坐標軸後,就用繪製函數可視化其方向。

如下圖,我們看到四張不同棋盤圖像被我們程序處理後的結果。


渲染一個立方體

為了描畫一個立方體,我們可以按照下文所述修改繪圖函數。首先繪製一個3 x 3的正方形,朝向左下角並與我們的棋盤平行。然後我們將添加從該正方形延伸的線,以在面向相機的方向上完成立方體。

我們必須修改軸點,並以此來囊括立方體的每個角。

下面的兩幅圖片已將結果顯示出來:


結論

在上述練習之後,我們可以考慮增強現實(AR)的應用。在這裡,我們成功地將3D對象包含在真實世界圖像中,該圖像與所描繪的對象相互作用,允許真實世界和虛擬世界之間的動態鏈接。

作者:Keenan James,導師:Amit Maraj教授


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

《自然:神經科學》論文:動物視覺系統里的 RNN 能加速物體識別
DeepHash-深度學習哈希開源庫

TAG:AI研習社 |