適合初學者的SLAM實踐教程(1):相機模型-如何從照片中重建出像素點的三維座標?

推薦開源項目:簡單的SLAM與機器人教程與編程實踐-github

三維重建到底是怎麼回事?已知什麼數據?待求解哪些變量?

看下面這張圖,一圖解釋如何根據照片進行三維重建。首先,三維重建就是根據把照片的像素點對應現實世界中某個點在相機座標系下的三維座標計算出來。一般我們可以通過深度相機或者雙目視覺等方式獲取目標物體離相機座標系原點的距離ZrealZ_{real},這裏的相機座標系的原點就是相機的焦點
所以現在我們已經知道了的數據有:“像素點A在照片座標系中的位置(ximg,yimg)(x_{img},y_{img})”、“照片離相機座標原點的距離,即焦距ff”、“像素點A對應現實世界中那個點離相機的距離zrealz_{real}”。
我們需要根據上面這些信息求出:現實世界那個點在相機座標系下的三維座標(xreal,yreal,zreal)(x_{real},y_{real},z_{real})。所以現在待求解的未知量xrealx_{real}yrealy_{real}

在這裏插入圖片描述

如何根據像素點的位置,和真實物體離相機的距離來還原真實物體在相機座標系中的座標?

從上圖很容易看出來我們可以利用相似三角形來根據f,zreal,ximg,yimgf,z_{real},x_{img},y_{img}這些已知量,來求xrealx_{real}yrealy_{real}
根據相似三角形我們知道這幾條邊的放縮比例是相等的,即有:zrealf=xrealximg=yrealyimg\frac{z_{real}}{f}=\frac{x_{real}}{x_{img}}=\frac{y_{real}}{y_{img}}
所以可以得到:
xreal=zrealf×ximgyreal=zrealf×yimgx_{real}=\frac{z_{real}}{f}\times x_{img} \\ y_{real}=\frac{z_{real}}{f}\times y_{img}
ximg,yimgx_{img},y_{img}是可以根據像素算出來,zrealz_{real}要麼可以用雷達或者紅外或者雙目視覺計算出。所以我們已經計算出照片中位於(ximg,yimg)(x_{img},y_{img})這個點的相對於相機座標系下的三維座標(xreal,yreal,zreal)(x_{real},y_{real},z_{real})了。

練習:從實例中學習如何根據照片進行三維重建

舉個例子:
現在已知一個照片的某個像素座標爲(1mm,3mm),焦距爲15mm, 並且通過傳感器測量到該像素對應的現實世界中的那個點A離相機焦點的距離是30cm。現在想求A點相對於相機座標系下的的座標。(注意本例子中的座標系如下圖所示)
在這裏插入圖片描述
現在已知角距f=15f=15毫米。照片中A對應的那個像素點的座標爲(1,3)單位是毫米。真實世界中A點離相機座標系原點距離爲zreal=300z_{real}=300毫米。
所以有A點相對於相機座標系中的另外兩個維度的座標
xreal==zrealf×ximg=20×1=20yreal=zrealf×yimg=20×3=60x_{real}==\frac{z_{real}}{f}\times x_{img} =20\times1=20\\ y_{real}=\frac{z_{real}}{f}\times y_{img}=20\times3=60
所以我們就講照片中的一個像素點還原成三維座標(20,60,300)(20,60,300)了,單位是毫米。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章