天天看點

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

坐标系變換

1. 幾個坐标系:

  • 世界坐标系(world coordinate system):

    使用者定義的三維世界的坐标系,為了描述目标物在真實世界裡的位置而被引入。機關為m。

  • 相機坐标系(camera coordinate system):在相機上建立的坐标系,為了從相機的角度描述物體位置而定義,作為溝通世界坐标系和圖像/像素坐标系的中間一環。機關為m。
  • 圖像坐标系(image coordinate system):為了描述成像過程中物體從相機坐标系到圖像坐标系的投影透射關系而引入,友善進一步得到像素坐标系下的坐标。 機關為m。
  • 像素坐标系(pixel coordinate system):為了描述物體成像後的像點在數字圖像上(相片)的坐标而引入,是我們真正從相機内讀取到的資訊所在的坐标系。機關為個(像素數目)。

2.相機參數

16個單目相機的參數:

  • 4個内部參數(隻與相機有關):

    f x , f y , u 0 , v 0 , ( 1 / d x 、 1 / d y 、 γ 、 u 0 、 v 0 、 f ) fx,fy,u0,v0,(1/dx、1/dy、\gamma 、u0、v0、f ) fx,fy,u0,v0,(1/dx、1/dy、γ、u0、v0、f)

    實際其 f x = F ∗ S x fx = F*S_x fx=F∗Sx​,其中的 F F F就是焦距(上面的 f f f).Sx是像素/每毫米(即上面的 1 / d x 1/dx 1/dx),其是最後面圖裡的後兩個矩陣進行先相乘,得出的,則把它看成整體,就相當于4個内參。把 γ \gamma γ 等于零,實際上也是六個.

  • 5個畸變參數D:

    k 1 , k 2 , k 3 k1,k2,k3 k1,k2,k3 徑向畸變系數;

    p 1 , p 2 p1,p2 p1,p2 是切向畸變系數;

    徑向畸變:産生原因是光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲,徑向畸變主要包含桶形畸變和枕形畸變兩種。

    切向畸變:産生的原因透鏡不完全平行于圖像平面,這種現象發生于成像儀被粘貼在錄影機的時候。

  • 6個外部參數(取決于相機在世界中的位置):

    3個旋轉參數 R R R;

    3個平移參數 T T T

3. 坐标系之間的轉換

3.1 整體公式

Z c [ u v 1 ] = [ 1 d x γ c x 0 1 d y c y 0 0 1 ] [ f 0 0 0 f 0 0 0 1 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] Z_c\left[\begin{array}{c}{u } \\ {v} \\ {1}\end{array}\right] =\left[\begin{array}{ccc}{\frac{1}{dx}} & {\gamma} & {c_x} \\ {0} & {\frac{1}{dy}} & {c_y} \\ {0} & {0} & {1}\end{array}\right] \left[\begin{array}{ccc}{f} & {0} & {0} \\ {0} & {f} & {0} \\ {0} & {0} & {1}\end{array}\right] \left[\begin{array}{cc}{\boldsymbol{R}} & {\boldsymbol{t}} \\ {\boldsymbol{0}^{T}} & {1}\end{array}\right] \left[\begin{array}{c}{X_w } \\ {Y_w} \\ {Z_w} \\{1}\end{array}\right]=\left[\begin{array}{ccc}{f_x} & {0} & {c_x} \\ {0} & {f_y} & {c_y} \\ {0} & {0} & {1}\end{array}\right] \left[\begin{array}{cc}{\boldsymbol{R}} & {\boldsymbol{t}} \\ {\boldsymbol{0}^{T}} & {1}\end{array}\right] \left[\begin{array}{c}{X_w } \\ {Y_w} \\ {Z_w} \\{1}\end{array}\right] Zc​⎣⎡​uv1​⎦⎤​=⎣⎡​dx1​00​γdy1​0​cx​cy​1​⎦⎤​⎣⎡​f00​0f0​001​⎦⎤​[R0T​t1​]⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​=⎣⎡​fx​00​0fy​0​cx​cy​1​⎦⎤​[R0T​t1​]⎣⎢⎢⎡​Xw​Yw​Zw​1​⎦⎥⎥⎤​

3.2 世界坐标系->相機坐标系:

剛體變換(regidbody motion):

三維空間中,當物體不發生形變時,對一個幾何物體作旋轉 R R R, 平移 T T T 的運動,稱之為剛體變換。世界坐标系到相機坐标系的變化就是剛體變換,又因為 R R R和 T T T與相機無關,所有又稱其為相機外參。

首先考慮旋轉。我們設某個機關正交基 ( e 1 ; e 2 ; e 3 ) (e_1; e_2; e_3) (e1​;e2​;e3​)經過一次旋轉,變成了 ( e 1 ′ ; e 2 ′ ; e 3 ′ ) (e_1′ ; e_2′ ; e_3′ ) (e1​′;e2​′;e3​′)。那麼,對于同一個向量 a(注意該向量并沒有随着坐标系的旋轉而發生運動),它在兩個坐标系下的坐标為 [ a 1 ; a 2 ; a 3 ] T [a_1; a_2; a_3]^T [a1​;a2​;a3​]T 和 [ a 1 ′ ; a 2 ′ ; a 3 ′ ] T [a_1′ ; a_2′ ; a_3′ ]^T [a1​′;a2​′;a3​′]T。

根據坐标的定義,有

[ e 1 , e 2 , e 3 ] [ a 1 a 2 a 3 ] = [ e 1 ′ , e 2 ′ , e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] \left[e_{1}, e_{2}, e_{3}\right]\left[\begin{array}{l}{a_{1}} \\ {a_{2}} \\ {a_{3}}\end{array}\right]=\left[e_{1}^{\prime}, e_{2}^{\prime}, e_{3}^{\prime}\right]\left[\begin{array}{c}{a_{1}^{\prime}} \\ {a_{2}^{\prime}} \\ {a_{3}^{\prime}}\end{array}\right] [e1​,e2​,e3​]⎣⎡​a1​a2​a3​​⎦⎤​=[e1′​,e2′​,e3′​]⎣⎡​a1′​a2′​a3′​​⎦⎤​

左右同僚乘

[ e 1 T e 2 T e 3 T ] \left[\begin{array}{c}{e_{1}^{T}} \\ {e_{2}^{T}} \\ {e_{3}^{T}}\end{array}\right] ⎣⎡​e1T​e2T​e3T​​⎦⎤​

,得到

[ a 1 a 2 a 3 ] = [ e 1 T e 1 ′ e 1 T e 2 ′ e 1 T e 3 ′ e 2 T e 1 ′ e 2 T e 2 ′ e 2 T e 3 ′ e 3 T e 1 ′ e 3 T e 2 ′ e 3 T e 3 ′ ] [ a 1 ′ a 2 ′ a 3 ′ ] ≜ R a ′ \left[\begin{array}{l}{a_{1}} \\ {a_{2}} \\ {a_{3}}\end{array}\right]=\left[\begin{array}{lll}{e_{1}^{T} e_{1}^{\prime}} & {e_{1}^{T} e_{2}^{\prime}} & {e_{1}^{T} e_{3}^{\prime}} \\ {e_{2}^{T} e_{1}^{\prime}} & {e_{2}^{T} e_{2}^{\prime}} & {e_{2}^{T} e_{3}^{\prime}} \\ {e_{3}^{T} e_{1}^{\prime}} & {e_{3}^{T} e_{2}^{\prime}} & {e_{3}^{T} e_{3}^{\prime}}\end{array}\right]\left[\begin{array}{c}{a_{1}^{\prime}} \\ {a_{2}^{\prime}} \\ {a_{3}^{\prime}}\end{array}\right] \triangleq R a^{\prime} ⎣⎡​a1​a2​a3​​⎦⎤​=⎣⎡​e1T​e1′​e2T​e1′​e3T​e1′​​e1T​e2′​e2T​e2′​e3T​e2′​​e1T​e3′​e2T​e3′​e3T​e3′​​⎦⎤​⎣⎡​a1′​a2′​a3′​​⎦⎤​≜Ra′

中間的矩陣 R R R 由兩組基之間的内積組成,刻畫了旋轉前後同一個向量的坐标變換關系。隻要旋轉是一樣的,那麼這個矩陣也是一樣的。可以說,矩陣 R R R 描述了旋轉本身。是以它又稱為旋轉矩陣。

旋轉矩陣有一些特别的性質:是一個行列式為 1 的正交矩陣。

可以把旋轉矩陣的集合定義如下:

S O ( n ) = { R ∈ R n × n ∣ R R T = I , det ⁡ ( R ) = 1 } SO(n)=\left\{\boldsymbol{R} \in \mathbb{R}^{n \times n} | \boldsymbol{R} \boldsymbol{R}^{T}=\boldsymbol{I}, \operatorname{det}(\boldsymbol{R})=1\right\} SO(n)={R∈Rn×n∣RRT=I,det(R)=1}

n n n 代表坐标軸個數,比如 S O ( 3 ) SO(3) SO(3) 就代表包含 x , y , z x,y,z x,y,z 三個坐标軸的坐标系。

在歐氏變換中,除了旋轉之外還有一個平移。考慮世界坐标系中的向量 $ a $,經過一次

旋轉 R R R和一次平移 t t t 後,得到了 a ′ a′ a′,那麼把旋轉和平移合到一起,有:

a ′ = R a + t \boldsymbol{a}^{\prime}=\boldsymbol{R} \boldsymbol{a}+\boldsymbol{t} a′=Ra+t

其實表示為坐标就是

[ X c Y c Z c ] = [ r 00 r 01 r 02 r 10 r 11 r 12 r 20 r 21 r 22 ] [ X Y Z ] + [ T x T y T z ] \left[\begin{array}{c}{X_{\mathrm{c}}} \\ {Y_{\mathrm{c}}} \\ {Z_{\mathrm{c}}}\end{array}\right]=\left[\begin{array}{ccc}{r_{00}} & {r_{01}} & {r_{02}} \\ {r_{10}} & {r_{11}} & {r_{12}} \\ {r_{20}} & {r_{21}} & {r_{22}}\end{array}\right]\left[\begin{array}{c}{X} \\ {Y} \\ {Z}\end{array}\right]+\left[\begin{array}{c}{T_{x}} \\ {T_{y}} \\ {T_{z}}\end{array}\right] ⎣⎡​Xc​Yc​Zc​​⎦⎤​=⎣⎡​r00​r10​r20​​r01​r11​r21​​r02​r12​r22​​⎦⎤​⎣⎡​XYZ​⎦⎤​+⎣⎡​Tx​Ty​Tz​​⎦⎤​

上面變換關系不是一個線性關系。假設我們進行了兩次變換: R 1 ; t 1 R1; t1 R1;t1 和 R 2 ; t 2 R2; t2 R2;t2,滿足:

b = R 1 a + t 1 , c = R 2 b + t 2 \boldsymbol{b}=\boldsymbol{R}_{1} \boldsymbol{a}+\boldsymbol{t}_{1}, \quad \boldsymbol{c}=\boldsymbol{R}_{2} \boldsymbol{b}+\boldsymbol{t}_{2} b=R1​a+t1​,c=R2​b+t2​ 合并為 c = R 2 ( R 1 a + t 1 ) + t 2 c=R_{2}\left(R_{1} a+t_{1}\right)+t_{2} c=R2​(R1​a+t1​)+t2​,這樣當變化次數特别多的時候很複雜。

是以一般在三維向量的末尾添加一個1,表示為齊次坐标的形式

[ a ′ 1 ] = [ R t 0 T 1 ] [ a 1 ] ≜ T [ a 1 ] \left[\begin{array}{c}{a^{\prime}} \\ {1}\end{array}\right]=\left[\begin{array}{cc}{\boldsymbol{R}} & {\boldsymbol{t}} \\ {\boldsymbol{0}^{T}} & {1}\end{array}\right]\left[\begin{array}{l}{\boldsymbol{a}} \\ {1}\end{array}\right] \triangleq \boldsymbol{T}\left[\begin{array}{l}{\boldsymbol{a}} \\ {1}\end{array}\right] [a′1​]=[R0T​t1​][a1​]≜T[a1​]

對于這個四維向量,我們可以把旋轉和平移寫在一個矩陣裡面,使得整個關系變成了線性關系。該式中,矩陣 T T T 稱為變換矩陣(Transform Matrix) 。

相機坐标系和世界坐标系的坐标原點之間的距離,受 x , y , z x,y,z x,y,z 三個方向上的分量共同控制,是以具有三個自由度。 R R R 其實是分别繞 X , Y , Z X, Y, Z X,Y,Z三軸旋轉的效果之和.

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

繞z軸旋轉如右圖

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

繞 z 旋 轉 矩 陣 : [ X c Y c Z c ] = [ 1 0 0 0 cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ ] [ X Y Z ] 繞z旋轉矩陣: \left[\begin{array}{l}{X_{c}} \\ {Y_{c}} \\ {Z_{c}}\end{array}\right]=\left[\begin{array}{ccc}{1} & {0} & {0} \\ {0} & {\cos \theta} & {\sin \theta} \\ {0} & {-\sin \theta} & {\cos \theta}\end{array}\right]\left[\begin{array}{l}{X} \\ {Y} \\ {Z}\end{array}\right] 繞z旋轉矩陣:⎣⎡​Xc​Yc​Zc​​⎦⎤​=⎣⎡​100​0cosθ−sinθ​0sinθcosθ​⎦⎤​⎣⎡​XYZ​⎦⎤​

繞 x 旋 轉 矩 陣 : [ X c Y c Z c ] = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 + 1 1 0 sin ⁡ θ 0 cos ⁡ θ ] [ X Y Z ] 繞x旋轉矩陣: \left[\begin{array}{c}{X_{c}} \\ {Y_{c}} \\ {Z_{c}}\end{array}\right]=\left[\begin{array}{ccc}{\cos \theta} & {0} & {-\sin \theta} \\ {0_{1}+1} & {1} & {0} \\ {\sin \theta} & {0} & {\cos \theta}\end{array}\right]\left[\begin{array}{c}{X} \\ {Y} \\ {Z}\end{array}\right] 繞x旋轉矩陣:⎣⎡​Xc​Yc​Zc​​⎦⎤​=⎣⎡​cosθ01​+1sinθ​010​−sinθ0cosθ​⎦⎤​⎣⎡​XYZ​⎦⎤​

繞 y 旋 轉 矩 陣 : [ X c Y c Z c ] = [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ X Y Z ] 繞y旋轉矩陣: \left[\begin{array}{l}{X_{\mathrm{c}}} \\ {Y_{\mathrm{c}}} \\ {Z_{\mathrm{c}}}\end{array}\right]=\left[\begin{array}{ccc}{\cos \theta} & {\sin \theta} & {0} \\ {-\sin \theta} & {\cos \theta} & {0} \\ {0} & {0} & {1}\end{array}\right]\left[\begin{array}{c}{X} \\ {Y} \\ {Z}\end{array}\right] 繞y旋轉矩陣:⎣⎡​Xc​Yc​Zc​​⎦⎤​=⎣⎡​cosθ−sinθ0​sinθcosθ0​001​⎦⎤​⎣⎡​XYZ​⎦⎤​

以上分别為繞 x , y , z x, y, z x,y,z軸旋轉的矩陣,是以旋轉矩陣為 R = R x ∗ R y ∗ R z R=R_x*R_y * R_z R=Rx​∗Ry​∗Rz​

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

設 O − x − y − z O-x-y-z O−x−y−z為相機坐标系, z z z 軸指向相機前方, O O O為錄影機的光心,也是針孔模型中的針孔。

3.3 相機坐标系->圖像坐标系:

現實世界的空間點 P P P,經過小孔 O O O 投影之後,落在實體成像平面 O ′ − x ′ − y ′ O′-x′-y′ O′−x′−y′ 上,成像點為 P ′ P′ P′。設 P P P的坐标為 [ X ; Y ; Z ] T [X; Y; Z]^T [X;Y;Z]T, P ′ P′ P′ 為 [ X ′ ; Y ′ ; Z ′ ] T [X′; Y ′; Z′]^T [X′;Y′;Z′]T,并且設實體成像平面到小孔的距離為 f f f(焦距)。

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

我們平時處理一般會用歸一化成像平面,把成像位置轉換到與它對稱的紅色位置,這樣比較容易描述各個坐标系之間關系。

根據三角形相似關系,有 Z f = − X X ′ = − Y Y ′ \frac{Z}{f}=- \frac{X}{X'}=- \frac{Y}{Y'} fZ​=−X′X​=−Y′Y​為了友善,一般去掉負号。

整理後:

X ′ = f X Z X′ = \frac{fX}{Z} X′=ZfX​

Y ′ = f Y Z Y′ = \frac{fY}{Z} Y′=ZfY​

3.4 圖像坐标系->像素坐标系:

因為相機最後得到的是像素,是以在成像平面上對像進行采樣和量化,把圖像坐标系的點轉化到一個像素平面 o − u − v o-u-v o−u−v。像素坐标系與圖像坐标系處于同一平面,像素坐标系原點為左上角,圖像坐标系原點為中心。

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

像素坐标系‹通常的定義方式是:原點 o ′ o′ o′ 位于圖像的左上角, u u u軸向右與 x x x軸平行, v v v

軸向下與 y y y軸平行。像素坐标系與成像平面之間,相差了一個縮放和一個原點的平移。

設像素坐标在 u u u軸上縮放了 α α α倍,在 v 上 縮 放 了 上縮放了 上縮放了β$ 倍。同時,原點平移了 [ c x ; c y ] T [cx;cy]^T [cx;cy]T。那麼, P ′ P′ P′的坐标與像素坐标 [ u ; v ] T [u;v]^T [u;v]T的關系為:

{ u = α X ′ + c x = 1 d x X ′ + c x v = β X ′ + c y = 1 d y Y ′ + c y \begin{cases} u = α X' + c_x = \frac{1}{dx} X' + c_x \\ v = βX' + c_y = \frac{1}{dy} Y' + c_y \end{cases} {u=αX′+cx​=dx1​X′+cx​v=βX′+cy​=dy1​Y′+cy​​

1 d x \frac{1}{dx} dx1​, 1 d y \frac{1}{dy} dy1​分别為在 x x x, y y y方向上每個像素的實體尺寸,把 α f αf αf 合并為 f x f_x fx​, β f βf βf 合并為 f y f_y fy​ 得到:

{ u = f x X Z + c x v = f y Y Z + c y \begin{cases} u = f_x\frac{X}{Z}+ c_x \\ v = f_y\frac{Y}{Z} + c_y \end{cases} {u=fx​ZX​+cx​v=fy​ZY​+cy​​

$f $ 的機關為米, α ; β α; β α;β 的機關為像素每米,是以 f x ; f y f_x; f_y fx​;fy​的機關為像 素。

把該式寫成矩陣形式,會更加簡潔,不過左側需要用到齊次坐标, γ \gamma γ 為 x , y x, y x,y不垂直時的扭曲系數,一般為0:

[ u v 1 ] = 1 Z [ f x γ c x 0 f y c y 0 0 1 ] [ X Y Z ] = 1 Z K P \left[\begin{array}{c}{u } \\ {v} \\ {1}\end{array}\right] = \frac{1}{Z} \left[\begin{array}{ccc}{f_x} & {\gamma} & {c_x} \\ {0} & {f_y} & {c_y} \\ {0} & {0} & {1}\end{array}\right] \left[\begin{array}{c}{X } \\ {Y} \\ {Z}\end{array}\right] = \frac{1}{Z} KP ⎣⎡​uv1​⎦⎤​=Z1​⎣⎡​fx​00​γfy​0​cx​cy​1​⎦⎤​⎣⎡​XYZ​⎦⎤​=Z1​KP

習慣把Z移動到左面:

Z [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] = K P Z\left[\begin{array}{c}{u } \\ {v} \\ {1}\end{array}\right] =\left[\begin{array}{ccc}{f_x} & {0} & {c_x} \\ {0} & {f_y} & {c_y} \\ {0} & {0} & {1}\end{array}\right] \left[\begin{array}{c}{X } \\ {Y} \\ {Z}\end{array}\right] =KP Z⎣⎡​uv1​⎦⎤​=⎣⎡​fx​00​0fy​0​cx​cy​1​⎦⎤​⎣⎡​XYZ​⎦⎤​=KP

把中間的量組成的矩陣稱為相機的内參數矩陣(Camera Intrinsics) K K K。

除了内參之外,自然還有相對的外參。考慮到上式中,我們使用的是 P P P在相機坐标系下的坐标。由于相機在運動,是以 $P $的相機坐标應該是它的世界坐标(記為 P w P_w Pw​),根據相機的目前位姿,變換到相機坐标系下的結果。相機的位姿由它的旋轉矩陣 R R R 和平移向量 t t t來描述。那麼有:

Z P u v = Z [ u v 1 ] = K ( R P W + t ) = K T P w ZP_{uv} = Z \left[\begin{array}{c} u \\v \\1\end{array}\right] = K (RP_W +t) = KTP_w ZPuv​=Z⎣⎡​uv1​⎦⎤​=K(RPW​+t)=KTPw​

相機的位姿 R ; t R; t R;t又稱為相機的外參數(Camera Extrinsics) 。相比于不變的内參,外參會随着相機運動發生改變,同時也是 SLAM中待估計的目标,代表着機器人的軌迹.

3.5 畸變:

  • 畸變形成的原因:

    為了獲得好的成像效果,相機的前方一般都加了透鏡。對成像時光線的傳播會産生新的影響: 一是透鏡自身的形狀對光線傳播的影響,二是在機械組裝過程中,透鏡和成像平面不可能完全平行,光線穿過透鏡投影到成像面時的位置發生變化。

由透鏡形狀引起的畸變稱之為徑向畸變。在針孔模型中,一條直線投影到像素平面上還是一條直線。可是,在實際拍攝的照片中,錄影機的透鏡往往使得真實環境中的一條直線在圖檔中變成了曲線‹。越靠近圖像的邊緣,這種現象越明顯。由于實際加工制作的透鏡往往是中心對稱的,這使得不規則的畸變通常徑向對稱。它們主要分為兩大類, 桶形畸變和枕形畸變。

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

桶形畸變是由于圖像放大率随着離光軸的距離增加而減小,而枕形畸變卻恰好相反。

在這兩種畸變中,穿過圖像中心和光軸有交點的直線還能保持形狀不變。

除了透鏡的形狀會引入徑向畸變外,在相機的組裝過程中由于不能使得透鏡和成像面嚴格平行也會引入切向畸變。

平面上的任意一點 p p p可以用笛卡爾坐标表示為 [ x , y ] T [x, y]^{T} [x,y]T , 也可以把它寫成極坐标的形式

[ r ; θ ] T [r; θ]^T [r;θ]T,其中 r r r 表示點 p p p 離坐标系原點的距離, θ θ θ 表示和水準軸的夾角。徑向畸變可看成坐标點沿着長度方向發生了變化 δ r δr δr, 也就是其距離原點的長度發生了變化。切向畸變可以

看成坐标點沿着切線方向發生了變化,也就是水準夾角發生了變化 δ θ δθ δθ。

對于徑向畸變,無論是桶形畸變還是枕形畸變,由于它們都是随着離中心的距離增加

而增加。我們可以用一個多項式函數來描述畸變前後的坐标變化:這類畸變可以用和距中

心距離有關的二次及高次多項式函數進行糾正:

x corrected = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y corrected = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{array}{l}{x_{\text {corrected}}=x\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right)} \\ {y_{\text {corrected}}=y\left(1+k_{1} r^{2}+k_{2} r^{4}+k_{3} r^{6}\right)}\end{array} xcorrected​=x(1+k1​r2+k2​r4+k3​r6)ycorrected​=y(1+k1​r2+k2​r4+k3​r6)​

其中 [ x , y ] T [x, y]^{T} [x,y]T 是未糾正的點的坐标, [ x c o r r e c t e d ; y c o r r e c t e d ] T [xcorrected; ycorrected]^T [xcorrected;ycorrected]T 是糾正後的點的坐标,注意它們都是歸一化平面上的點,而不是像素平面上的點。在上式中,對于畸變較小的圖像中心區域,畸變糾正主要是 k 1 k1 k1 起作用。而對于畸變較大的邊緣區域主要是 k 2 k2 k2 起作用。普通攝像頭用這兩個系數就能很好的糾正徑向畸變。對畸變很大的攝像頭,比如魚眼鏡頭,可以加入 k 3 k3 k3 畸變項對畸變進行糾正。

另一方面,對于切向畸變,可以使用另外的兩個參數 p 1 , p 2 p1, p2 p1,p2來進行糾正:

x corrected = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y corrected = y + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{array}{l}{x_{\text {corrected}}=x+2 p_{1} x y+p_{2}\left(r^{2}+2 x^{2}\right)} \\ {y_{\text {corrected}}=y+p_{1}\left(r^{2}+2 y^{2}\right)+2 p_{2} x y}\end{array} xcorrected​=x+2p1​xy+p2​(r2+2x2)ycorrected​=y+p1​(r2+2y2)+2p2​xy​

對于相機坐标系中的一點 P ( X ; Y ; Z ) P(X; Y; Z) P(X;Y;Z),我們能夠通過五個畸變系數找到這個點在像素平面上的正确位置:

1. 将三維空間點投影到歸一化圖像平面。設它的歸一化坐标為 [x; y]T。
2. 對歸一化平面上的點進行徑向畸變和切向畸變糾正。
3. 将糾正後的點通過内參數矩陣投影到像素平面,得到該點在圖像上的正确位置。
1. 首先,世界坐标系下有一個固定的點 P_w;
2. 由于相機在運動,它的運動由 R; t 或變換矩陣描述。 P 的相機坐标為:
P_c= R * P_w + t。
3. 這時的 P_c 仍有 X; Y; Z 三個量,把它們投影到歸一化平面 Z = 1 上,得到 P 的歸
一化相機坐标: Pc = [X/Z; Y /Z; 1]T 。
4. 最後, P 的歸一化坐标經過内參後,對應到它的像素坐标: P_uv = K * P_c。
           

雙目坐标

1.理想情況的雙目相機模型

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

z − f z = b − u l + u r b \frac{z-f}{z}=\frac{b-u_l+u_r}{b} zz−f​=bb−ul​+ur​​, 因為 d = u l − u r d=u_l-u_r d=ul​−ur​,

是以最後 z = f ∗ b d z=\frac{f*b}{d} z=df∗b​

2. 真實的雙目相機模型

相機參數和相機模型各個坐标系(世界坐标系、相機坐标系、圖像坐标系、像素坐标系之間變換)坐标系變換雙目坐标

真實場景的雙目錄影機其實不是嚴格平行向前。是以需要雙目标定得到兩個相機之間的平移和旋轉矩陣。

參考:《視覺slam十四講》

繼續閱讀