相機模型——內參、外參


# 相機參數

針孔相機模型,包含四個坐標系:物理成像坐標系、像素坐標系、相機坐標系、世界坐標系。

相機參數包含:內參、外參、畸變參數

內參

【Intrinsics】

image-20210716095529229

物理成像坐標系:\(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\)

由相似三角形可以得到:

\[\frac Z f = -\frac X {X'}=-\frac Y {Y'} \]

帶負號是因為小孔成像成的是倒像。為了簡化模型,可以把物理成像平面看作為放到了相機的前方,這樣可以直觀的認為成立的正像(虛像),就像下圖:

image-20210716101516316

可以得到:

\[\begin{align} \frac Z f& = \frac X {X'}=\frac Y {Y'} \\ X'&=f\frac X Z \\ Y'&=f\frac Y Z \end{align} \]

從物理成像坐標系到像素坐標系之前,相差了一個縮放平移。縮放是因為兩個坐標系之前的表示的單位長度不一致,平移是因為兩個坐標系的原點不一致。

假設,像素坐標在\(u\)方向上縮放了\(\alpha\)倍,在\(v\)方向上縮放了\(\beta\)倍,同時,原點平移了\([c_x,c_y]^T\)。那么點\(P'[X',Y',Z']^T\)與像素坐標系下\([u,v]^T\)的關系為:

\[\begin{cases} u&=\alpha X'+c_x \\ v&=\beta Y'+c_y \\ \end{cases} \\ \\ \Downarrow \\ f_x = \alpha f \\ f_y= \beta f \\ \Downarrow \\ \begin{cases} u&=f_x \frac XZ + c_x \\ v&=f_y \frac YZ + c_y \\ \end{cases} \\ \]

其中,變量的單位\(f \rightarrow mm ; \alpha, \beta \rightarrow 像素/mm; f_x,f_y \rightarrow 像素\)。將坐標進行歸一化,寫成矩陣形式,並對左側像素坐標進行齊次化,方便后面的運算:

\[\begin{bmatrix} u \\ v\\ 1 \\ \end{bmatrix} = \frac 1Z \begin{bmatrix} f_x &0 &c_x \\ 0 &f_y &c_y\\ 0 &0 &1 \\ \end{bmatrix} \overset{\triangle}{=} \frac1Z \boldsymbol {KP} \\ \Downarrow \\ Z\begin{bmatrix} u \\ v\\ 1 \\ \end{bmatrix} = \begin{bmatrix} f_x &0 &c_x \\ 0 &f_y &c_y\\ 0 &0 &1 \\ \end{bmatrix} \overset{\triangle}{=} \boldsymbol {KP} \\ \]

把中間的量組成的矩陣稱為相機的內參矩陣(Camera Intrinsics)\(\boldsymbol K\)

內參矩陣參數獲取

image-20210716101516316

圖像大小\([w,h]\),單位\(pixel\);相機焦距\(f\),單位\(mm\);視場角\(FOV-\alpha\),單位弧度;像素單元長度\(\mathrm{d}x,\mathrm{d}y\),單位\(mm/pixel\);內參\(f_x,f_x\),單位\(pixel\)

\[\boldsymbol{f_x=\frac f{\mathrm{d}x}}\\ \boldsymbol{f_y=\frac f{\mathrm{d}y}} \\ \boldsymbol{c_x=\frac w2} \ (假設相機主點在圖像中央) \\ \boldsymbol{c_y =\frac h2} \ (假設相機主點在圖像中央) \\ \]

\(\boldsymbol {f_x}\)就相當於用\(x\)方向的像素數去量化物理焦距\(f\)

\(\boldsymbol {f_y}\)就相當於用\(y\)方向的像素數去量化物理焦距\(f\)

image-20210716161137986

已知相機的硬件參數求內參

相機的內參出廠后就是固定不變的,如果知曉相機的出廠參數,可以計算相機的內參。

如成像傳感器是\(m\times n(\mu m)\),圖像尺寸是\(w\times h(pixel)\),那么圖像像素單元就是

\[\mathrm{d}x=\frac mw(\mu m/pixel)\\ \mathrm{d}y=\frac nh(\mu m/pixel) \\ c_x=\frac w2 \\ c_y =\frac h2 \]

如果\(\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求法和水平是一致的。

image-20210716101516316

其中,成像傳感器是\(m\times n(\mu m)\),圖像尺寸是\(w\times h(pixel)\),像素單元\(x\)軸方向長度\(\mathrm{d}x=\frac mw(\mu m/pixel)\),可以看到:

\[\begin{align} \tan({\frac {\alpha}2} \cdot \frac {\pi}{180} ) &= \frac {m/2}{f} \\ &\Downarrow \\ FOV=\alpha &=2\arctan(\frac {m/2}{f}) \cdot \frac {180}{\pi} \label{fisst} \tag{1.1} \\ &\Downarrow \\ m &=w\cdot \mathrm{d}x \\ &\Downarrow \\ FOV=\alpha &=2\arctan(\frac {w\cdot \mathrm dx/2}{f}) \cdot \frac {180}{\pi} \\ &\Downarrow \\ f_x &= \frac f{\mathrm dx}\\ &\Downarrow \\ FOV=\alpha &=2\arctan(\frac {w}{2f_x}) \cdot \frac {180}{\pi} \label{second} \tag{1.2}\\ \end{align} \]

如果已知相機傳感器尺寸,通過公式\(\ref{fisst}\)可以計算出相機的視場角\(FOV\)

如果已知相機內參,通過公式\(\eqref{second}\)可以計算出相機的視場角\(FOV\)

通過FOV計算內參

由公式\(\eqref{second}\),可得:

\[\begin{align} \frac{w}{2f_x} &= \tan(\frac {FOV}{2} \cdot \frac {\pi}{180}) \\ &\Downarrow\\ f_x &= \frac w{2\tan(\frac {FOV}{2} \cdot \frac {\pi}{180})} \\ f_y &= \frac h{2\tan(\frac {FOV}{2} \cdot \frac {\pi}{180})} \end{align} \]

如果\(\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\cdot \boldsymbol {P_{uv} |_{3\times1} }=Z \cdot \begin{bmatrix} u \\ v\\ 1\\ \end{bmatrix} =\boldsymbol{K} (\boldsymbol{RP_w+t})=\boldsymbol{K|_{3\times3} \cdot T|_{3\times4} \cdot P_w|_{4\times1}} \label{third} \tag{1.3} \]

兩側都是齊次坐標,同時因為齊次坐標乘上非零常數后表達同樣的含義,所以可以簡單地把Z去掉

\[\boldsymbol {P_{uv}= KTP_w} \]

但這樣等號意義就變了,成為在齊次坐標下相等的概念,相差了一個非零常數。為了避免麻煩,我們還是從傳統意義下來定義書寫等號。(《SLAM十四講》)

\(\ref {third}\)表明,我們可以把一個世界坐標點先轉換到相機坐標系,再除掉它最后一維的數值(該點距離相機成像平面的深度),這就相當於把最后一維進行了歸一化處理,得到點\(P\)在相機歸一化平面上的投影:

\[\begin{align} (\boldsymbol {RP_w+t})= &\underbrace{[X,Y,Z]^T} & \to \ \ \ \ &\underbrace{[X/Z,Y/Z,1]^T} \\ &{ \ \ \ 相機坐標} & &{\ \ \ 歸一化坐標} \end{align} \]

歸一化坐標可以看成相機前方\(z=1\)處的平面上的一個點,這個\(z=1\)平面也稱為歸一化平面。歸一化坐標左稱內參\(\boldsymbol K\)就得到了像素坐標,因此可以把像素坐標\([u,v]^T\)看成對歸一化平面上的點進行量化測量的結果。

同時可以看到,如果對相機坐標同時乘上任意非零常數,歸一化坐標都是一樣的,也就是點的深度信息在投影的過程中丟失了,所以在單目視覺中沒法得到像素點的深度值。

通過最終的轉換關系來看,一個三維中的坐標點,的確可以在圖像中找到一個對應的像素點,但是反過來,通過圖像中的一個點找到它在三維中對應的點就很成了一個問題,因為我們並不知道等式左邊的 \(z_c\)(深度值)的值。來源


參考博客:

高翔.《視覺SLAM十四講》

關於相機成像焦距的像素表示fx、fy的解釋(VSLAM14講Chp5)

由相機的自身參數求解內參矩陣

關於FOV與焦距


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM