在进行相机标定之前,首先要进行相机的各个坐标的转换,最终得到得到投影矩阵。
1.相机标定:坐标系转换学习中已经详细的讲述了一个点从世界坐标系到像素坐标系下的坐标转换。
已知一点在世界坐标系中的坐标为 ( x w , y w , z w ) (x_w,y_w,z_w) (xw,yw,zw),其转换到像素坐标系下坐标 ( P x i , P x i ) (P_{x_i},P_{x_i}) (Pxi,Pxi)的转换公式如下:
[ P x i ∗ Z c P y i ∗ Z c Z c ] = [ m ∗ f − m ∗ f ∗ c o t θ m ∗ P x 0 n ∗ f / s i n θ n ∗ P y 0 0 1 ] ∗ ( R ∣ − R c ) ∗ [ x w y w z w 1 ] \left[\begin{array}{ccccc} P_{x_i}*Z_c\\ P_{y_i}*Z_c\\ Z_c \end{array}\right]= \left[ \begin{array}{ccccc} m*f&-m*f*cotθ&m*P_x\\ 0&n*f/sinθ&n*P_y\\ 0&0&1 \end{array} \right]*(R|-Rc)* \left[\begin{array}{ccccc} x_w\\ y_w\\ z_w\\ 1 \end{array}\right] ⎣⎡Pxi∗ZcPyi∗ZcZc⎦⎤=⎣⎡m∗f00−m∗f∗cotθn∗f/sinθ0m∗Pxn∗Py1⎦⎤∗(R∣−Rc)∗⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤
这里所得到的坐标是 ( P x i , P x i ) (P_{x_i},P_{x_i}) (Pxi,Pxi)的齐次坐标。
内参矩阵为了方便表述做如下修改:
K = [ m ∗ f − m ∗ f ∗ c o t θ m ∗ P x 0 n ∗ f / s i n θ n ∗ P y 0 0 1 ] = = = = > [ α − α ∗ c o t θ u 0 0 β / s i n θ v 0 0 0 1 ] K=\left[ \begin{array}{ccccc} m*f&-m*f*cotθ&m*P_x\\ 0&n*f/sinθ&n*P_y\\ 0&0&1 \end{array} \right]====> \left[ \begin{array}{ccccc} α&-α*cotθ&u_0\\ 0&β/sinθ&v_0\\ 0&0&1 \end{array} \right] K=⎣⎡m∗f00−m∗f∗cotθn∗f/sinθ0m∗Pxn∗Py1⎦⎤====>⎣⎡α00−α∗cotθβ/sinθ0u0v01⎦⎤
外参矩阵,其中 r 1 , r 2 , r 3 r_1,r_2,r_3 r1,r2,r3为三维列向量:
( R ∣ − R c ) = = = = > [ R ∣ T ] = = = = > [ r 1 T t x r 2 T t y r 3 T t z ] (R|-Rc)====>[R|T]====> \left[ \begin{array}{ccccc} r_1^T&t_x\\ r_2^T&t_y\\ r_3^T&t_z \end{array} \right] (R∣−Rc)====>[R∣T]====>⎣⎡r1Tr2Tr3Ttxtytz⎦⎤
投影矩阵M,其中 m 1 , m 2 , m 3 m_1,m_2,m_3 m1,m2,m3为四维行向量:
M = K ∗ [ R ∣ t ] = [ m ∗ f − m ∗ f ∗ c o t θ m ∗ P x 0 n ∗ f / s i n θ n ∗ P y 0 0 1 ] ∗ ( R ∣ − R c ) = = = = = > [ m 1 m 2 m 3 ] M=K*[R|t]=\left[ \begin{array}{ccccc} m*f&-m*f*cotθ&m*P_x\\ 0&n*f/sinθ&n*P_y\\ 0&0&1 \end{array} \right]*(R|-Rc)=====> \left[ \begin{array}{ccccc} m_1\\ m_2\\ m_3 \end{array} \right] M=K∗[R∣t]=⎣⎡m∗f00−m∗f∗cotθn∗f/sinθ0m∗Pxn∗Py1⎦⎤∗(R∣−Rc)=====>⎣⎡m1m2m3⎦⎤
相机标定需要标定什么呢?
我们在得到上述的坐标转换公式之后,所需要做的就是确定出合理的相机内外参数,这样我们就可以利用该公式,通过世界坐标得到像素坐标了。
我们需要一个标定装置,(类似于棋盘格的东西),大概是这个样子的:
这个标定装置,我们以 O w O_w Ow为世界坐标系的原点,每个格子的大小均已知,故在该坐标系下的每一点的位置坐标均已知。
我们使用相机取拍摄这个标定装置,得到如上边右图的图片。
我们可以在图像中找到世界坐标系中一点的对应点,这个点在图像中的位置,即在像素坐标系中的位置是已知的。
为了方便区分,我们把世界坐标系中的点称为 P P P,而把像素坐标系中的点称为 I I I 。由于我们根据坐标转换公式得到的坐标是 I I I的齐次坐标,这里我们要将其转换成欧式坐标,三维齐次坐标转化为二维欧式坐标,只需要除以齐次坐标的第三维就好了,举个例子:
[ P x i ∗ Z c P y i ∗ Z c Z c ] = [ m 1 m 2 m 3 ] ∗ [ x w y w z w 1 ] = [ m 1 m 2 m 3 ] ∗ W = [ m 1 ∗ w m 2 ∗ w m 3 ∗ w ] \left[\begin{array}{ccccc} P_{x_i}*Z_c\\ P_{y_i}*Z_c\\ Z_c \end{array}\right]= \left[ \begin{array}{ccccc} m_1\\ m_2\\ m_3 \end{array} \right]* \left[\begin{array}{ccccc} x_w\\ y_w\\ z_w\\ 1 \end{array}\right]= \left[ \begin{array}{ccccc} m_1\\ m_2\\ m_3 \end{array} \right]*W= \left[ \begin{array}{ccccc} m_1*w\\ m_2*w\\ m_3*w \end{array} \right] ⎣⎡Pxi∗ZcPyi∗ZcZc⎦⎤=⎣⎡m1m2m3⎦⎤∗⎣⎢⎢⎡xwywzw1⎦⎥⎥⎤=⎣⎡m1m2m3⎦⎤∗W=⎣⎡m1∗wm2∗wm3∗w⎦⎤
要将该坐标转换成欧式坐标:
[ P x i P y i ] = [ ( m 1 ∗ w ) / ( m 3 ∗ w ) ( m 2 ∗ w ) / ( m 3 ∗ w ) ] \left[\begin{array}{ccccc} P_{x_i}\\ P_{y_i} \end{array}\right]= \left[ \begin{array}{ccccc} (m_1*w)/(m_3*w)\\ (m_2*w)/(m_3*w) \end{array} \right] [PxiPyi]=[(m1∗w)/(m3∗w)(m2∗w)/(m3∗w)]
同理,我们可以得到 I I I的欧式坐标,这里P为4×1的列向量(是世界坐标的齐次坐标):
I = [ u v ] = [ ( m 1 ∗ P ) / ( m 3 ∗ P ) ( m 2 ∗ P ) / ( m 3 ∗ P ) ] I=\left[\begin{array}{ccccc} u\\ v \end{array}\right] =\left[\begin{array}{ccccc} (m_1*P)/(m_3*P)\\ (m_2*P)/(m_3*P) \end{array} \right] I=[uv]=[(m1∗P)/(m3∗P)(m2∗P)/(m3∗P)]
于是我们就得到了两个方程:
{ u = ( m 1 ∗ P ) / ( m 3 ∗ P ) − − − − > − u ∗ ( m 3 ∗ P ) + ( m 1 ∗ P ) = 0 v = ( m 2 ∗ P ) / ( m 3 ∗ P ) − − − − > − v ∗ ( m 3 ∗ P ) + ( m 2 ∗ P ) = 0 \left\{ \begin{array}{ccccc} u=(m_1*P)/(m_3*P)---->-u*(m_3*P)+(m_1*P)=0\\ v=(m_2*P)/(m_3*P)---->-v*(m_3*P)+(m_2*P)=0 \end{array} \right. {u=(m1∗P)/(m3∗P)−−−−>−u∗(m3∗P)+(m1∗P)=0v=(m2∗P)/(m3∗P)−−−−>−v∗(m3∗P)+(m2∗P)=0
我们已知M矩阵是一个3×4的矩阵,包含12个未知量,这十二个未知量由内参矩阵和外参矩阵中的参数共同组成。
内参矩阵包含有5个未知参数,外参矩阵包含12个位置参数,一共17个未知参数。但是外参矩阵有包含了6个约束条件,即旋转矩阵的3个列向量的模为1,且列向量互相正交。于是仅需要11个方程便可以求解得到M,即M矩阵的自由度为11。
因此我们至少需要6个点,才可以求解参数。而我们在实际的应用中通常会选取6个以上的点,来获得更加鲁棒(抗干扰)的结果。同时呢,我们还要保证这些点不能够全部来自同一个平面,否则会出现退化解。(不用纠结什么是退化解,注意不要让所有点来自同一个平面即可)
{ − u 1 ∗ ( m 3 ∗ P 1 ) + ( m 1 ∗ P 1 ) = 0 − v 1 ∗ ( m 3 ∗ P 1 ) + ( m 2 ∗ P 1 ) = 0 { − u 2 ∗ ( m 3 ∗ P 2 ) + ( m 1 ∗ P 2 ) = 0 − v 2 ∗ ( m 3 ∗ P 2 ) + ( m 2 ∗ P 2 ) = 0 . . . { − u n ∗ ( m 3 ∗ P n ) + ( m 1 ∗ P n ) = 0 − v n ∗ ( m 3 ∗ P n ) + ( m 2 ∗ P n ) = 0 \left\{\begin{array}{ccccc} -u_1*(m_3*P_1)+(m_1*P_1)=0\\ -v_1*(m_3*P_1)+(m_2*P_1)=0 \end{array}\right.\\ \left\{\begin{array}{ccccc} -u_2*(m_3*P_2)+(m_1*P_2)=0\\ -v_2*(m_3*P_2)+(m_2*P_2)=0 \end{array}\right.\\ ...\\ \left\{\begin{array}{ccccc} -u_n*(m_3*P_n)+(m_1*P_n)=0\\ -v_n*(m_3*P_n)+(m_2*P_n)=0 \end{array}\right. {−u1∗(m3∗P1)+(m1∗P1)=0−v1∗(m3∗P1)+(m2∗P1)=0{−u2∗(m3∗P2)+(m1∗P2)=0−v2∗(m3∗P2)+(m2∗P2)=0...{−un∗(m3∗Pn)+(m1∗Pn)=0−vn∗(m3∗Pn)+(m2∗Pn)=0
于是乎,我们就将相机标定的问题转化成了方程组求解的问题,只需要解出这个方程,就完成了标定。
我们考虑将以上的方程组转换成矩阵方程。
这里我们需要定义两个矩阵 P , m P,m P,m,这里的 P n P_n Pn为4×1的列向量, m 1 , m 2 , m 3 m_1,m_2,m_3 m1,m2,m3为四维行向量
P = [ P 1 T 0 T − u 1 P 1 T 0 P 1 T − V 1 P 1 T . . . . . . . . . P n T 0 T − u n P n T 0 P n T − v 1 P n T ] 2 n ∗ 12 m = [ m 1 T m 2 T m 3 T ] 12 ∗ 1 P=\left[ \begin{array}{ccccc} P_1^T&0^T&-u_1P_1^T\\ 0&P_1^T&-V_1P_1^T\\ ...&...&...\\ P_n^T&0^T&-u_nP_n^T\\ 0&P_n^T&-v_1P_n^T \end{array}\right]_{2n*12} m=\left[ \begin{array}{ccccc} m_1^T\\ m_2^T\\ m_3^T \end{array}\right]_{12*1} P=⎣⎢⎢⎢⎢⎡P1T0...PnT00TP1T...0TPnT−u1P1T−V1P1T...−unPnT−v1PnT⎦⎥⎥⎥⎥⎤2n∗12m=⎣⎡m1Tm2Tm3T⎦⎤12∗1
于是我们就把方程组转换成了矩阵方程: P m = 0 Pm=0 Pm=0
已知上述方程组中的未知参数为11个,但方程的数量大于11个,于是就出现了超定方程组的问题,这导致我们的方程组无解。
于是我们的目标就转换为了寻找一个 m m m使得 P m Pm Pm的值达到最小,即 m i n ∣ ∣ P m ∣ ∣ min||Pm|| min∣∣Pm∣∣。
我们容易发现,当 m m m进行等比例缩小时, P m Pm Pm的值会随着 m m m的值的缩小而缩小,理论上当 m m m趋向于无穷小时, P m Pm Pm的值也会趋向于无穷小。显然,这不是我们想要的,我们需要一个确切的 m m m的值。
因此,在这里我们还要引入一个约束条件 ∣ ∣ m ∣ ∣ = 1 ||m||=1 ∣∣m∣∣=1,这样我们就可以求取到确切的 m m m的值了。
具体的求解方法是对 P P P进行奇异值分解,(奇异值分解??矩阵论杀我!!这里对奇异值分解不做赘述,推导放在下边)
得出结论: m m m为 P P P矩阵最小奇异值的右奇异向量,且 ∣ ∣ m ∣ ∣ = 1 ||m||=1 ∣∣m∣∣=1
我们在求出 m m m后,就可以得到 m 1 , m 2 , m 3 m_1,m_2,m_3 m1,m2,m3,于是乎我们就求解出了投影矩阵 M M M。这里将投影矩阵表示如下 a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3为三维列向量:
M = [ m 1 m 2 m 3 ] = [ A ∣ b ] = [ a 1 T b 1 a 2 T b 2 a 3 T b 3 ] = K ∗ [ R ∣ T ] M= \left[ \begin{array}{ccccc} m_1\\ m_2\\ m_3 \end{array}\right]=[A|b]= \left[ \begin{array}{ccccc} a_1^T&b_1\\ a_2^T&b_2\\ a_3^T&b_3 \end{array}\right]=K*[R|T] M=⎣⎡m1m2m3⎦⎤=[A∣b]=⎣⎡a1Ta2Ta3Tb1b2b3⎦⎤=K∗[R∣T]
上文中我们已经得到了投影矩阵 M M M,根据 M = K [ R ∣ T ] M=K[R|T] M=K[R∣T]可以求解内参数和外参数。推导过程复杂,先上结果吧
K = [ α − α ∗ c o t θ u 0 0 β / s i n θ v 0 0 0 1 ] , [ R ∣ T ] = [ r 1 T t x r 2 T t y r 3 T t z ] K= \left[ \begin{array}{ccccc} α&-α*cotθ&u_0\\ 0&β/sinθ&v_0\\ 0&0&1 \end{array} \right], [R|T]= \left[ \begin{array}{ccccc} r_1^T&t_x\\ r_2^T&t_y\\ r_3^T&t_z \end{array} \right] K=⎣⎡α00−α∗cotθβ/sinθ0u0v01⎦⎤,[R∣T]=⎣⎡r1Tr2Tr3Ttxtytz⎦⎤
由于我们所求到的 M M M并非理想情况下的投影矩阵,因此在转换时需要一个转换系数ρ,来确保转换精度。
ρ M = K ∗ [ R ∣ T ] ρ = ± 1 / ∣ a 3 ∣ ρM=K*[R|T]\\ ρ=±1/|a_3| ρM=K∗[R∣T]ρ=±1/∣a3∣
内参数:
α = ρ 2 ∣ a 1 × a 3 ∣ s i n θ β = ρ 2 ∣ a 2 × a 3 ∣ s i n θ c o s θ = − ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) / [ ∣ a 1 × a 3 ∣ ⋅ ∣ a 2 × a 3 ∣ ] u 0 = ρ 2 ( a 1 ⋅ a 3 ) v 0 = ρ 2 ( a 2 ⋅ a 3 ) α = ρ^2|a_1×a_3|sinθ\\ β = ρ^2|a_2×a_3|sinθ\\ cosθ=-(a_1×a_3)·(a_2×a_3)/[|a_1×a_3|·|a_2×a_3|]\\ u_0=ρ^2(a_1·a_3)\\ v_0=ρ^2(a_2·a_3) α=ρ2∣a1×a3∣sinθβ=ρ2∣a2×a3∣sinθcosθ=−(a1×a3)⋅(a2×a3)/[∣a1×a3∣⋅∣a2×a3∣]u0=ρ2(a1⋅a3)v0=ρ2(a2⋅a3)
外参数:
r 1 = ( a 2 × a 3 ) / ∣ a 2 × a 3 ∣ r 3 = ± a 3 / ∣ a 3 ∣ r 2 = r 3 × r 1 T = ρ K − 1 b r_1=(a_2×a_3)/|a_2×a_3|\\ r_3 = ±a_3/|a_3|\\ r_2 = r_3×r_1\\ T = ρK^{-1}b r1=(a2×a3)/∣a2×a3∣r3=±a3/∣a3∣r2=r3×r1T=ρK−1b
如下是数学公式的推导部分。(写到这里我已经后悔了o(╥﹏╥)o,公式太多了,就大概说一下吧)
在3.3.4中有提到对 P P P的奇异值分解。
P 2 n ∗ 12 = U 2 n ∗ 2 n D 2 n ∗ 12 V 12 ∗ 12 H D = [ △ 0 0 0 ] P_{2n*12}=U_{2n*2n}D_{2n*12}V_{12*12}^H\\ D= \left[ \begin{array}{ccccc} △&0\\ 0&0 \end{array} \right] P2n∗12=U2n∗2nD2n∗12V12∗12HD=[△000]
式中: U , V U,V U,V为酉矩阵, D D D为奇异值矩阵, △ △ △为奇异值对应的对角矩阵
奇异值的算法: P H P P^HP PHP的特征值为 λ 1 ≥ λ 2 ≥ λ 3 ≥ . . . ≥ λ K − 1 ≥ λ k = . . . = λ n = 0 λ_1≥λ_2≥λ_3≥...≥λ_K-1≥λ_k=...=λ_n=0 λ1≥λ2≥λ3≥...≥λK−1≥λk=...=λn=0,我们称 σ i = λ i σ_i=\sqrt{λ_i} σi=λi为矩阵 P P P的奇异值。于是我们就得到了矩阵 D D D。
V H P H P V = [ △ 2 0 0 0 ] , V = ( V 1 , V 2 ) ( V 1 , V 2 ) H P H P ( V 1 , V 2 ) = [ V 1 H P H P V 1 V 1 H P H P V 2 V 2 H P H P V 1 V 2 H P H P V 2 ] = [ △ 2 0 0 0 ] V^HP^HPV= \left[ \begin{array}{ccccc} △^2&0\\ 0&0 \end{array} \right],V=(V_1,V_2)\\ (V_1,V_2)^HP^HP(V_1,V_2)= \left[ \begin{array}{ccccc} V_1^HP^HPV_1&V_1^HP^HPV_2\\ V_2^HP^HPV_1&V_2^HP^HPV_2 \end{array} \right]=\left[ \begin{array}{ccccc} △^2&0\\ 0&0 \end{array} \right]\\ VHPHPV=[△2000],V=(V1,V2)(V1,V2)HPHP(V1,V2)=[V1HPHPV1V2HPHPV1V1HPHPV2V2HPHPV2]=[△2000]
然后求 ( V 1 , V 2 ) (V_1,V_2) (V1,V2):
{ V 1 H P H P V 1 = ( P V 1 ) H P V 1 = △ 2 V 2 H P H P V 2 = ( P V 2 ) H P V 2 = 0 P V 2 = 0 △ − 1 V 1 H P H P V 1 △ − 1 = I \left\{ \begin{array}{ccccc} V_1^HP^HPV_1=(PV_1)^HPV_1=△^2\\ V_2^HP^HPV_2=(PV_2)^HPV_2=0 \end{array} \right.\\ PV_2=0\\ △^{-1}V_1^HP^HPV_1 △^{-1}=I {V1HPHPV1=(PV1)HPV1=△2V2HPHPV2=(PV2)HPV2=0PV2=0△−1V1HPHPV1△−1=I
之后求 ( U 1 , U 2 ) (U_1,U_2) (U1,U2):
U = ( U 1 , U 2 ) U 1 = P V 1 △ − 1 U 2 H U 1 = U 2 H P V 1 △ − 1 = 0 ( 酉 矩 阵 性 质 ) U=(U_1,U_2)\\ U_1 = PV_1 △^{-1}\\ U_2^HU_1=U_2^HPV_1 △^{-1}=0(酉矩阵性质) U=(U1,U2)U1=PV1△−1U2HU1=U2HPV1△−1=0(酉矩阵性质)
m m m为 P P P矩阵最小奇异值的右奇异向量,且 ∣ ∣ m ∣ ∣ = 1 ||m||=1 ∣∣m∣∣=1,即 V V V中最小奇异值对应的奇异向量。
3.3.5中求内外参数的推导
ρ [ a 1 T b 1 a 2 T b 2 a 3 T b 3 ] = ρ M = K ∗ [ R ∣ T ] = [ α r 1 T − α ∗ c o t θ r 2 T + u 0 r 3 T α t x − α ∗ c o t θ ∗ t y + u 0 t z β r 2 T / s i n θ + v 0 r 3 T β t y / s i n θ + v 0 t z r 3 T t z ] ρ \left[ \begin{array}{ccccc} a_1^T&b_1\\ a_2^T&b_2\\ a_3^T&b_3 \end{array}\right]=ρM=K*[R|T]= \left[ \begin{array}{ccccc} αr_1^T-α*cotθr_2^T+u_0r_3^T& αt_x-α*cotθ*t_y+u_0t_z\\ βr_2^T/sinθ+v_0r_3^T& βt_y/sinθ+v_0t_z\\ r_3^T&t_z \end{array} \right] ρ⎣⎡a1Ta2Ta3Tb1b2b3⎦⎤=ρM=K∗[R∣T]=⎣⎡αr1T−α∗cotθr2T+u0r3Tβr2T/sinθ+v0r3Tr3Tαtx−α∗cotθ∗ty+u0tzβty/sinθ+v0tztz⎦⎤
我们可以列出如下方程组:
{ ρ a 1 T = α r 1 T − α ∗ c o t θ r 2 T + u 0 r 3 T − − − > ρ a 1 = α r 1 − α ∗ c o t θ r 2 + u 0 r 3 ρ a 2 T = β r 2 T / s i n θ + v 0 r 3 T − − − > ρ a 2 = β r 2 / s i n θ + v 0 r 3 ρ a 3 T = r 3 T − − − > ρ a 3 = r 3 \left\{ \begin{array}{ccccc} ρa_1^T=αr_1^T-α*cotθr_2^T+u_0r_3^T--->ρa_1=αr_1-α*cotθr_2+u_0r_3\\ ρa_2^T=βr_2^T/sinθ+v_0r_3^T--->ρa_2=βr_2/sinθ+v_0r_3\\ ρa_3^T=r_3^T--->ρa_3=r_3 \end{array}\right.\\ ⎩⎨⎧ρa1T=αr1T−α∗cotθr2T+u0r3T−−−>ρa1=αr1−α∗cotθr2+u0r3ρa2T=βr2T/sinθ+v0r3T−−−>ρa2=βr2/sinθ+v0r3ρa3T=r3T−−−>ρa3=r3
我们做如下计算:
( ρ a 1 ) × ( ρ a 3 ) = ρ 2 ( a 1 × a 3 ) = α r 2 − α ∗ c o t θ r 1 − − − > α = ρ 2 ( a 1 × a 3 ) / { r 2 − c o t θ r 1 } ( ρ a 2 ) × ( ρ a 3 ) = ρ 2 ( a 2 × a 3 ) = β r 1 / s i n θ − − − > β = ρ 2 ( a 2 × a 3 ) s i n θ / r 1 (ρa_1)×(ρa_3)=ρ^2(a_1×a_3)=αr_2-α*cotθr_1--->α=ρ^2(a_1×a_3)/\{r_2-cotθr_1\}\\ (ρa_2)×(ρa_3)=ρ^2(a_2×a_3)=βr_1/sinθ--->β=ρ^2(a_2×a_3)sinθ/r_1 (ρa1)×(ρa3)=ρ2(a1×a3)=αr2−α∗cotθr1−−−>α=ρ2(a1×a3)/{r2−cotθr1}(ρa2)×(ρa3)=ρ2(a2×a3)=βr1/sinθ−−−>β=ρ2(a2×a3)sinθ/r1
∣ ρ a 1 ∣ × ∣ ρ a 3 ∣ = ρ 2 ∣ a 1 × a 3 ∣ = ∣ α ∣ / s i n θ ∣ ρ a 2 ∣ × ∣ ρ a 3 ∣ = ρ 2 ∣ a 2 × a 3 ∣ = ∣ β ∣ / s i n θ |ρa_1|×|ρa_3|=ρ^2|a_1×a_3|=|α|/sinθ\\ |ρa_2|×|ρa_3|=ρ^2|a_2×a_3|=|β|/sinθ ∣ρa1∣×∣ρa3∣=ρ2∣a1×a3∣=∣α∣/sinθ∣ρa2∣×∣ρa3∣=ρ2∣a2×a3∣=∣β∣/sinθ
通过上述式子我们可以的到:
α = ρ 2 ∣ a 1 × a 3 ∣ s i n θ β = ρ 2 ∣ a 2 × a 3 ∣ s i n θ α=ρ^2|a_1×a_3|sinθ\\ β=ρ^2|a_2×a_3|sinθ α=ρ2∣a1×a3∣sinθβ=ρ2∣a2×a3∣sinθ
做如下计算我们可以求得 u 0 , v 0 , c o s θ u_0,v_0,cosθ u0,v0,cosθ都是通过点乘和叉乘得到的(就不推导了吧):
u 0 = ρ 2 ( a 1 ⋅ a 3 ) v 0 = ρ 2 ( a 2 ⋅ a 3 ) c o s θ = − ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) / [ ∣ a 1 × a 3 ∣ ⋅ ∣ a 2 × a 3 ∣ ] u_0=ρ^2(a_1·a_3)\\ v_0=ρ^2(a_2·a_3)\\ cosθ=-(a_1×a_3)·(a_2×a_3)/[|a_1×a_3|·|a_2×a_3|] u0=ρ2(a1⋅a3)v0=ρ2(a2⋅a3)cosθ=−(a1×a3)⋅(a2×a3)/[∣a1×a3∣⋅∣a2×a3∣]
已知我们的旋转矩阵 R R R是一个正交矩阵,因此其行向量和列向量的模均为1,于是可以求解得到 ρ ρ ρ:
ρ a 3 = r 3 ρ ∣ a 3 ∣ = ∣ r 3 ∣ = ± 1 ρ = ± 1 / ∣ a 3 ∣ ρa_3=r_3\\ ρ|a_3|=|r_3|=±1\\ ρ=±1/|a_3| ρa3=r3ρ∣a3∣=∣r3∣=±1ρ=±1/∣a3∣
关于外参数,我们在上述求 α , β α,β α,β的推导中已经求得了 r 1 , r 3 r_1,r_3 r1,r3:
r 1 = ( a 2 × a 3 ) / ∣ a 2 × a 3 ∣ r 3 = ± a 3 / ∣ a 3 ∣ r_1=(a_2×a_3)/|a_2×a_3|\\ r_3 = ±a_3/|a_3|\\ r1=(a2×a3)/∣a2×a3∣r3=±a3/∣a3∣
同样利用旋转矩阵是正交矩阵的性质,可以得到:
r 2 = r 3 × r 1 r_2 = r_3×r_1 r2=r3×r1
由 ρ b = K T ρb=KT ρb=KT 易知, T = K − 1 ρ b = ρ K − 1 b T=K^{-1}ρb=ρK^{-1}b T=K−1ρb=ρK−1b,由于 K , b K,b K,b均为已知的,可求得 T T T
推导完毕!
u 0 = ρ 2 ( a 1 ⋅ a 3 ) v 0 = ρ 2 ( a 2 ⋅ a 3 ) c o s θ = − ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) / [ ∣ a 1 × a 3 ∣ ⋅ ∣ a 2 × a 3 ∣ ] u_0=ρ^2(a_1·a_3)\\ v_0=ρ^2(a_2·a_3)\\ cosθ=-(a_1×a_3)·(a_2×a_3)/[|a_1×a_3|·|a_2×a_3|] u0=ρ2(a1⋅a3)v0=ρ2(a2⋅a3)cosθ=−(a1×a3)⋅(a2×a3)/[∣a1×a3∣⋅∣a2×a3∣]
已知我们的旋转矩阵 R R R是一个正交矩阵,因此其行向量和列向量的模均为1,于是可以求解得到 ρ ρ ρ:
ρ a 3 = r 3 ρ ∣ a 3 ∣ = ∣ r 3 ∣ = ± 1 ρ = ± 1 / ∣ a 3 ∣ ρa_3=r_3\\ ρ|a_3|=|r_3|=±1\\ ρ=±1/|a_3| ρa3=r3ρ∣a3∣=∣r3∣=±1ρ=±1/∣a3∣
关于外参数,我们在上述求 α , β α,β α,β的推导中已经求得了 r 1 , r 3 r_1,r_3 r1,r3:
r 1 = ( a 2 × a 3 ) / ∣ a 2 × a 3 ∣ r 3 = ± a 3 / ∣ a 3 ∣ r_1=(a_2×a_3)/|a_2×a_3|\\ r_3 = ±a_3/|a_3|\\ r1=(a2×a3)/∣a2×a3∣r3=±a3/∣a3∣
同样利用旋转矩阵是正交矩阵的性质,可以得到:
r 2 = r 3 × r 1 r_2 = r_3×r_1 r2=r3×r1
由 ρ b = K T ρb=KT ρb=KT 易知, T = K − 1 ρ b = ρ K − 1 b T=K^{-1}ρb=ρK^{-1}b T=K−1ρb=ρK−1b,由于 K , b K,b K,b均为已知的,可求得 T T T
推导完毕!
计算机视觉 鲁鹏