推薦開源項目:簡單的SLAM與機器人教程與編程實踐-github
三維重建到底是怎麼回事?已知什麼數據?待求解哪些變量?
看下面這張圖,一圖解釋如何根據照片進行三維重建。首先,三維重建就是根據把照片的像素點對應現實世界中某個點在相機座標系下的三維座標計算出來。一般我們可以通過深度相機或者雙目視覺等方式獲取目標物體離相機座標系原點的距離Zreal,這裏的相機座標系的原點就是相機的焦點。
所以現在我們已經知道了的數據有:“像素點A在照片座標系中的位置(ximg,yimg)”、“照片離相機座標原點的距離,即焦距f”、“像素點A對應現實世界中那個點離相機的距離zreal”。
我們需要根據上面這些信息求出:現實世界那個點在相機座標系下的三維座標(xreal,yreal,zreal)。所以現在待求解的未知量是xreal和yreal。
如何根據像素點的位置,和真實物體離相機的距離來還原真實物體在相機座標系中的座標?
從上圖很容易看出來我們可以利用相似三角形來根據f,zreal,ximg,yimg這些已知量,來求xreal和yreal。
根據相似三角形我們知道這幾條邊的放縮比例是相等的,即有:fzreal=ximgxreal=yimgyreal。
所以可以得到:
xreal=fzreal×ximgyreal=fzreal×yimg
ximg,yimg是可以根據像素算出來,zreal要麼可以用雷達或者紅外或者雙目視覺計算出。所以我們已經計算出照片中位於(ximg,yimg)這個點的相對於相機座標系下的三維座標(xreal,yreal,zreal)了。
練習:從實例中學習如何根據照片進行三維重建
舉個例子:
現在已知一個照片的某個像素座標爲(1mm,3mm),焦距爲15mm, 並且通過傳感器測量到該像素對應的現實世界中的那個點A離相機焦點的距離是30cm。現在想求A點相對於相機座標系下的的座標。(注意本例子中的座標系如下圖所示)
現在已知角距f=15毫米。照片中A對應的那個像素點的座標爲(1,3)單位是毫米。真實世界中A點離相機座標系原點距離爲zreal=300毫米。
所以有A點相對於相機座標系中的另外兩個維度的座標
xreal==fzreal×ximg=20×1=20yreal=fzreal×yimg=20×3=60
所以我們就講照片中的一個像素點還原成三維座標(20,60,300)了,單位是毫米。