# 相機參數
針孔相機模型,包含四個坐標系:物理成像坐標系、像素坐標系、相機坐標系、世界坐標系。
相機參數包含:內參、外參、畸變參數
內參
【Intrinsics】
物理成像坐標系:\(O'-x'-y'\)
像素坐標系:\(O-u-v\)
相機坐標系:\(O-x-y\)
世界坐標系:\(O-X-Y-Z\)
在世界坐標系下的點\(P[X,Y,Z]^T\),通過相機坐標系下的光心\(O\)投影到物理成像平面上的\(P'[X',Y',Z']^T\),對應到像素坐標系下的\([u,v]^T\)。
由相似三角形可以得到:
帶負號是因為小孔成像成的是倒像。為了簡化模型,可以把物理成像平面看作為放到了相機的前方,這樣可以直觀的認為成立的正像(虛像),就像下圖:
可以得到:
從物理成像坐標系到像素坐標系之前,相差了一個縮放和平移。縮放是因為兩個坐標系之前的表示的單位長度不一致,平移是因為兩個坐標系的原點不一致。
假設,像素坐標在\(u\)方向上縮放了\(\alpha\)倍,在\(v\)方向上縮放了\(\beta\)倍,同時,原點平移了\([c_x,c_y]^T\)。那么點\(P'[X',Y',Z']^T\)與像素坐標系下\([u,v]^T\)的關系為:
其中,變量的單位是\(f \rightarrow mm ; \alpha, \beta \rightarrow 像素/mm; f_x,f_y \rightarrow 像素\)。將坐標進行歸一化,寫成矩陣形式,並對左側像素坐標進行齊次化,方便后面的運算:
把中間的量組成的矩陣稱為相機的內參矩陣(Camera Intrinsics)\(\boldsymbol K\)。
內參矩陣參數獲取
圖像大小\([w,h]\),單位\(pixel\);相機焦距\(f\),單位\(mm\);視場角\(FOV-\alpha\),單位弧度;像素單元長度\(\mathrm{d}x,\mathrm{d}y\),單位\(mm/pixel\);內參\(f_x,f_x\),單位\(pixel\):
\(\boldsymbol {f_x}\)就相當於用\(x\)方向的像素數去量化物理焦距\(f\);
\(\boldsymbol {f_y}\)就相當於用\(y\)方向的像素數去量化物理焦距\(f\);
已知相機的硬件參數求內參
相機的內參出廠后就是固定不變的,如果知曉相機的出廠參數,可以計算相機的內參。
如成像傳感器是\(m\times n(\mu m)\),圖像尺寸是\(w\times h(pixel)\),那么圖像像素單元就是
如果\(\mathrm{d}x=\mathrm{d}y\),則圖像像素單元是一個正方形,此時\(\boldsymbol {f_x=f_y}\);
如果\(\mathrm{d}x \neq \mathrm{d}y\),則圖像像素單元是一個矩形,此時\(\boldsymbol {f_x \neq f_y}\)。
如成像傳感器是\(2000\times 1000(\mu m)\),圖像尺寸是\(1000\times 500(pixel)\),那么圖像像素單元就是\(\mathrm{d}x=\mathrm{d}y=2(\mu m/pixel)\),\(c_x=500,c_y=250(pixel)\)
求視場角FOV
這里只是求水平方向上的FOV,垂直方向上的FOV求法和水平是一致的。
其中,成像傳感器是\(m\times n(\mu m)\),圖像尺寸是\(w\times h(pixel)\),像素單元\(x\)軸方向長度\(\mathrm{d}x=\frac mw(\mu m/pixel)\),可以看到:
如果已知相機傳感器尺寸,通過公式\(\ref{fisst}\)可以計算出相機的視場角\(FOV\);
如果已知相機內參,通過公式\(\eqref{second}\)可以計算出相機的視場角\(FOV\)。
通過FOV計算內參
由公式\(\eqref{second}\),可得:
如果\(\mathrm{d}x=\mathrm{d}y\),則圖像像素單元是一個正方形,此時\(\boldsymbol {f_x=f_y}\);\(\boldsymbol {c_x=\frac w2 }\);\(\\ \boldsymbol {c_y =\frac h2}\)。
外參
【Extrinsics】
相機內參描述的是在相機坐標系下的點到像素坐標系下的對應關系,上文內提到的\(\boldsymbol P\)也是在相機坐標系下的點。相機在三維空間中運動,記點\(\boldsymbol P\)在世界坐標系下的點為\(\boldsymbol P_w\),在相機坐標系下的坐標為\(\boldsymbol P_c\)。
相機在世界坐標系下的位姿,由相機的旋轉矩陣\(\boldsymbol R\)和平移向量\(\boldsymbol t\)來描述。此時有:
兩側都是齊次坐標,同時因為齊次坐標乘上非零常數后表達同樣的含義,所以可以簡單地把Z去掉
:\[\boldsymbol {P_{uv}= KTP_w} \]
但這樣等號意義就變了,成為在齊次坐標下相等的概念,相差了一個非零常數。為了避免麻煩,我們還是從傳統意義下來定義書寫等號。
(《SLAM十四講》)
式\(\ref {third}\)表明,我們可以把一個世界坐標點先轉換到相機坐標系,再除掉它最后一維的數值(該點距離相機成像平面的深度),這就相當於把最后一維進行了歸一化處理,得到點\(P\)在相機歸一化平面上的投影:
歸一化坐標可以看成相機前方\(z=1\)處的平面上的一個點,這個\(z=1\)平面也稱為歸一化平面。歸一化坐標左稱內參\(\boldsymbol K\)就得到了像素坐標,因此可以把像素坐標\([u,v]^T\)看成對歸一化平面上的點進行量化測量的結果。
同時可以看到,如果對相機坐標同時乘上任意非零常數,歸一化坐標都是一樣的,也就是點的深度信息在投影的過程中丟失了,所以在單目視覺中沒法得到像素點的深度值。
通過最終的轉換關系來看,一個三維中的坐標點,的確可以在圖像中找到一個對應的像素點,但是反過來,通過圖像中的一個點找到它在三維中對應的點就很成了一個問題,因為我們並不知道等式左邊的 \(z_c\)(深度值)的值。來源
參考博客:
高翔.《視覺SLAM十四講》