圖像二維坐標轉世界三維坐標
1、張正友標定法:
攝像機標定(Camera calibration)簡單來說是從世界坐標系換到圖像坐標系的過程,也就是求最終的投影矩陣的過程,由投影過程求出相機的外參數和內參數。
[1]基本的坐標系:
· 世界坐標系(world coordinate)(xw,yw,zw),也稱為測量坐標系,是一個三維直角坐標系,以其為基準可以描述相機和待測物體的空間位置。世界坐標系的位置可以根據實際情況自由確定。
· 相機坐標系(camera coordinate)(xc,yc,zc),也是一個三維直角坐標系,原點位於鏡頭光心處,x、y軸分別與相面的兩邊平行,z軸為鏡頭光軸,與像平面垂直。
· 像素坐標系uov是一個二維直角坐標系,反映了相機CCD/CMOS晶元中像素的排列情況。原點o位於圖像的左上角,u軸、v軸分別於像面的兩邊平行。像素坐標系中坐標軸的單位是像素(整數)。
· 成像平面坐標系(x,y):像素坐標系不利於坐標變換,因此需要建立圖像坐標系XOY,其坐標軸的單位通常為毫米(mm),原點是相機光軸與相面的交點(稱為主點),即圖像的中心點,X軸、Y軸分別與u軸、v軸平行。故兩個坐標系實際是平移關係,即可以通過平移就可得到。
[2]一般來說,標定的過程分為兩個部分:
· 第一步是從世界坐標系轉為相機坐標系,這一步是三維點到三維點的轉換,包括R,t(相機外參,確定了相機在某個三維空間中的位置和朝向)等參數;
· 第二部是從相機坐標系轉為成像平面坐標系(像素坐標系),這一步是三維點到二維點的轉換,包括K(相機內參,是對相機物理特性的近似)等參數;
· 世界坐標系轉換為相機坐標系
其中R為3*3的旋轉矩陣,t為3*1的平移矢量,即相機外參數
· 相機坐標系轉換為圖像坐標系
s為比例因子(s不為0),f為有效焦距(光心到圖像平面的距離),(x,y,z,1)是空間點P在相機坐標系oxyz中的齊次坐標,(X,Y,1)是像點p在圖像坐標系OXY中的齊次坐標。
· 圖像坐標系轉換為像素坐標系
其中,dX、dY分別為像素在X、Y軸方向上的物理尺寸,u0,v0為主點(圖像原點)坐標
· 世界坐標系轉換為像素坐標系
其中,m1、m2即為相機的內參和外參數。通過http://blog.csdn.net/lql0716/article/details/71973318?locationNum=8&fps=1進行求解。
注意:R,t參數矩陣為不可逆矩陣。
2、攝像機標定
matlab標定程序:下載解壓,運行calib_gui即可
棋盤格:實際計算時,需要測量尺格的長度,用於標定,即dx,dy。
攝像機標定方法matlab:按照布置進行標定,提取角點需放大圖片減少誤差。
求出相機的內參和畸變係數。
3、相機位姿估計:
由於需要世界三維坐標轉換到二維坐標,僅僅標定出外參和內參仍然求不出。特別是當時matlab標定方法,已經標定出內參和外參,天真的我,以為直接代入上式中就可以進行坐標轉換。後來一想,每副圖片都有一個外參,而且世界坐標系定義的是哪個啊!!!!
我求出的內外參數要怎麼用啊!!!!!!
糾結了半天,各種百度坐標轉換,問師兄都沒有用,後來在刷知乎的時候,看評論看到一個人的回答:求PnP問題。
然後我就發現新天地了,相機的位姿估計。天真的我以為,相機坐標系就是相機的位置坐標。愚蠢至極。。。。。。。。。。。
PnP問題是求解3D-2D點對運動的方法。他描述了當知道n個三維空間點坐標及其二維投影位置時,如何估計相機的位姿。
單目相機位姿估計
N=3時求出4組解,好像再加一個點就能解決這個問題了,事實上也幾乎如此。說幾乎是因為還有其他一些特殊情況,這些特殊情況就不再討論了。N>3後,能夠求出正解了,但為了一個正解就又要多加一個球D顯然不夠」環保」,為了更快更節省計算機資源地解決問題,先用3個點計算出4組解獲得四個旋轉矩陣、平移矩陣。
輸入參數準備:
1 objectPoints特徵點世界坐標2 imagePoints特徵點在攝像頭下的像素點坐標3 cameraMatrixdistCoeffs內參矩陣和畸變矩陣相機世界坐標的求解:
1求世界坐標中的點在相機坐標系下的坐標2求相機在世界坐標中的坐標,旋轉角度4、二維轉三維
天真的我再一次以為,求出攝像機的坐標,旋轉角度,只不是就可以求出待測點的世界坐標了,然而外參矩陣是不可逆的。
這就是單目相機的痛點,我以為他簡單,他折磨死你。二維怎麼可能轉三維,怎麼可能!!!!
這種情況下,文獻都是應用另一個攝像機同時拍攝進行求解。可是我是跟蹤啊,然道我兩幅圖片都要跟蹤。
這時候橫下一條心,把世界坐標系的高度進行約束,即設置z=0.
求出相機的坐標系(即在世界坐標系的坐標和旋轉矩陣);求出待測點在攝像機坐標系的坐標;利用攝像機的旋轉坐標求出攝像機相對於世界坐標系個坐標的旋轉角度,和待測點在攝像機坐標系的坐標求出待測點在世界坐標系相對於相機坐標系的向量。對,只能求出向量,所以要高度約束啊。
我終於解決這個問題了。
其他問題求解啊,比如怎麼求得特徵點和待測點的圖像像素坐標,哈哈,用畫圖工具就可以了。我一直在想opencv該怎麼編程。
solvePnP用的環境是vs2013和opencv2.4.9.第一次學會用vs,VS2013配置opencv2.4.9
推薦閱讀:
※26日索尼或有新品發布?
※佳能單反相機的產品價格是多少?
※如何選購手機鏡頭?
※『跨過攝影門檻』後期基礎(四)特別篇:3D lut的使用和建議
TAG:相機 |