《计算机视觉之三维重建》笔记2-相机几何与标定

北邮鲁鹏老师的课程《计算机视觉之三维重建(深入浅出sfm和SLAM核心算法)》 笔记

2,相机几何与标定

2.1 相机模型

Camera
P P P在坐标系 O i j k Oijk Oijk下的坐标为 ( x , y , z ) (x,y,z) (x,y,z),求点 P ′ P' P的像素坐标 ( x ′ , y ′ ) (x',y') (x,y)

图中的成像平面是倒着的,应放在虚拟像平面上求解,容易求得 P ′ P' P的三维坐标为 ( f x z , f y z , f ) (f\frac{x}{z},f\frac{y}{z},f) (fzx,fzy,f),所以 P ′ P' P在图像平面上的二维坐标为 ( f x z , f y z ) (f\frac{x}{z},f\frac{y}{z}) (fzx,fzy)
k , l k,l k,l表示图像 X , Y X,Y X,Y轴方向每米的像素点个数。
u 0 , v 0 u_0, v_0 u0,v0表示图像中心点距离图像左下角的像素个数。
上面 P ′ P' P的坐标原点是图像中心,而像素点坐标以左下角为原点,所以得到 P ′ P' P的像素坐标为 ( f k x z + u 0 , f l y z + v 0 ) (fk\frac{x}{z}+u_0,fl\frac{y}{z}+v_0) (fkzx+u0,flzy+v0)
α = f k , β = f l \alpha=fk,\beta=fl α=fk,β=fl

整理一下,写成其次坐标(这边的点有时写成空间坐标,有时写成齐次坐标,因公式而异,不具体说明了),得到相机模型:
P ′ = M P = [ α 0 u 0 0 0 β v 0 0 0 0 1 0 ] [ x y z 1 ] P'=MP=\left[\begin{array}{c} \alpha&0&u_0&0\\ 0&\beta&v_0&0\\ 0&0&1&0 \end{array}\right] \left[\begin{array}{l}x\\y\\z\\1\end{array}\right] P=MP=α000β0u0v01000xyz1
考虑相机偏斜:
P ′ = M P = [ α − α c o t θ u 0 0 0 β / s i n θ v 0 0 0 0 1 0 ] [ x y z 1 ] P'=MP=\left[\begin{array}{c} \alpha&-\alpha cot\theta&u_0&0\\ 0&\beta/sin\theta&v_0&0\\ 0&0&1&0 \end{array}\right] \left[\begin{array}{l}x\\y\\z\\1\end{array}\right] P=MP=α00αcotθβ/sinθ0u0v01000xyz1

K = [ α − α c o t θ u 0 0 β / s i n θ v 0 0 0 1 ] K=\left[\begin{array}{c} \alpha&-\alpha cot\theta&u_0\\ 0&\beta/sin\theta&v_0\\ 0&0&1 \end{array}\right] K=α00αcotθβ/sinθ0u0v01

P ′ = M P = K [ I , 0 ] P P'=MP=K[I,0]P P=MP=K[I,0]P
M M M为投影矩阵, K K K为相机内参数矩阵
考虑世界坐标系,相机坐标系到世界坐标系的变换为 R , T R,T R,T,为相机的外参数,则:
P = [ R T 0 1 ] P w P=\left[\begin{array}{ll}R&T\\0&1\end{array}\right]P_w P=[R0T1]Pw
带入相机模型:
P ′ = K [ I , 0 ] [ R T 0 1 ] P w = K [ R , T ] P w = M P w P'=K[I,0]\left[\begin{array}{ll}R&T\\0&1\end{array}\right]P_w=K[R,T]P_w=MP_w P=K[I,0][R0T1]Pw=K[R,T]Pw=MPw
相机内参数 K K K有5个自由度,相机外参数 R , T R,T R,T有6个自由度,所以投影矩阵 M M M有11个自由度。

2.2 相机标定

标定问题:给定世界坐标系三维点 P 1 , ⋯   , P n P_1,\cdots,P_n P1,,Pn,以及对应的图像点 p 1 , ⋯   , p n p_1,\cdots,p_n p1,,pn,求相机内外参数 K , R , T K,R,T K,R,T

m i m_i mi表示 M M M的第 i i i行,像素点坐标为 ( u i , v i ) (u_i,v_i) (ui,vi),带入相机模型:
{ − u 1 m 3 P 1 + m 1 P 1 = 0 − v 1 m 3 P 1 + m 2 P 1 = 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}{c} -u_1m_3P_1+m_1P_1=0\\ -v_1m_3P_1+m_2P_1=0\\ \vdots\\ -u_nm_3P_n+m_1P_n=0\\ -v_nm_3P_n+m_2P_n=0\\ \end{array}\right. u1m3P1+m1P1=0v1m3P1+m2P1=0unm3Pn+m1Pn=0vnm3Pn+m2Pn=0
整理一下,把M按行扫描展成列向量 m ⃗ = ( m 1 T m 2 T m 3 T ) \vec{m}=\left(\begin{array}{l}m_1^T\\m_2^T\\m_3^T\end{array}\right) m =m1Tm2Tm3T
P = ( P 1 T 0 − u 1 P 1 T 0 P 1 T − v 1 P 1 T ⋮ P n T 0 − u n P n T 0 P n T − v n P n T ) P=\left(\begin{array}{c} P_1^T&0&-u_1P_1^T\\ 0&P_1^T&-v_1P_1^T\\ &\vdots&\\ P_n^T&0&-u_nP_n^T\\ 0&P_n^T&-v_nP_n^T\\ \end{array}\right) P=P1T0PnT00P1T0PnTu1P1Tv1P1TunPnTvnPnT

将标定问题转化为线性方程组: P m ⃗ = 0 P\vec m=0 Pm =0
求解
step1:三维点不在同一平面上,且 n ≥ 6 n\ge6 n6,齐次方程最小二乘法(1.1.2节)求解得到 M M M
step2:分解 K [ R , T ] = M K[R,T]=M K[R,T]=M,求 K K K

一些约定: R = ( r 1 T r 2 T r 3 T ) , T = ( t x t y t z ) R=\left(\begin{array}{l}r_1^T\\r_2^T\\r_3^T\end{array}\right),T=\left(\begin{array}{l}t_x\\t_y\\t_z\end{array}\right) R=r1Tr2Tr3T,T=txtytz M M M相差一个尺度,可写成 ρ [ A   b ] \rho[A\ b] ρ[A b] A = ( a 1 T a 2 T a 3 T ) , b = ( b 1 b 2 b 3 ) A=\left(\begin{array}{l}a_1^T\\a_2^T\\a_3^T\end{array}\right),b=\left(\begin{array}{l}b_1\\b_2\\b_3\end{array}\right) A=a1Ta2Ta3T,b=b1b2b3已知, ρ \rho ρ未知。 \newline
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 β / s i n θ r 2 T + v 0 r 3 T β / s i n θ t y + v 0 t z r 3 T t z ] = [ ρ A , ρ b ] K[R,T]=\left[\begin{array}{c} \alpha r_1^T-\alpha cot\theta r_2^T+u_0r_3^T&\alpha t_x-\alpha cot\theta t_y+u_0t_z\\ \beta/sin\theta r_2^T+v_0r_3^T&\beta/sin\theta t_y+v_0t_z\\ r_3^T&t_z \end{array}\right]=[\rho A,\rho b] K[R,T]=αr1Tαcotθr2T+u0r3Tβ/sinθr2T+v0r3Tr3Tαtxαcotθty+u0tzβ/sinθty+v0tztz=[ρA,ρb] \newline
{ ρ a 1 ⋅ ρ a 3 = u 0 ρ a 2 ⋅ ρ a 3 = v 0 ρ a 3 ⋅ ρ a 3 = 1 \left\{\begin{array}{l} \rho a_1\cdot\rho a_3=u_0\\ \rho a_2\cdot\rho a_3=v_0\\ \rho a_3\cdot\rho a_3=1 \end{array}\right. ρa1ρa3=u0ρa2ρa3=v0ρa3ρa3=1,得 ρ = ± 1 / ∣ a 3 ∣ \rho=\pm1/|a_3| ρ=±1/a3 ⇒ { u 0 = a 1 ⋅ a 3 / ∣ a 3 ∣ 2 v 0 = a 2 ⋅ a 3 / ∣ a 3 ∣ 2 \Rightarrow\left\{\begin{array}{l}\textcolor{red}{u_0}=a_1\cdot a_3/|a_3|^2\\\textcolor{red}{v_0}=a_2\cdot a_3/|a_3|^2\end{array}\right. { u0=a1a3/a32v0=a2a3/a32 \newline
{ ρ a 3 × ρ a 1 = α r 2 + α c o t θ r 1 ρ a 2 × ρ a 3 = β / s i n θ r 1 \left\{\begin{array}{l} \rho a_3\times\rho a_1=\alpha r_2+\alpha cot\theta r_1\\ \rho a_2\times\rho a_3=\beta/sin\theta r_1 \end{array}\right. { ρa3×ρa1=αr2+αcotθr1ρa2×ρa3=β/sinθr1 \newline
两边取模和两式相乘分别可得: { ρ 2 ∣ a 1 × a 3 ∣ = α / s i n θ ρ 2 ∣ a 2 × a 3 ∣ = β / s i n θ \left\{\begin{array}{l} \rho^2|a_1\times a_3|=\alpha/sin\theta\\ \rho^2|a_2\times a_3|=\beta/sin\theta \end{array}\right. { ρ2a1×a3=α/sinθρ2a2×a3=β/sinθ \newline
ρ 4 ( a 3 × a 1 ) ( a 2 × a 3 ) = α β c o t θ / s i n θ = α β c o s θ / s i n 2 θ \rho^4(a_3\times a_1)(a_2\times a_3)=\alpha\beta cot\theta/sin\theta=\alpha\beta cos\theta/sin^2\theta ρ4(a3×a1)(a2×a3)=αβcotθ/sinθ=αβcosθ/sin2θ
⇒ c o s θ = − ( a 1 × a 3 ) ( a 2 × a 3 ) ∣ a 1 × a 3 ∣ ∣ a 2 × a 3 ∣ \Rightarrow cos\theta=-\frac{(a_1\times a_3)(a_2\times a_3)}{|a_1\times a_3||a_2\times a_3|} cosθ=a1×a3a2×a3(a1×a3)(a2×a3) ⇒ θ \Rightarrow \textcolor{red}\theta θ \newline
⇒ { α = ρ 2 ∣ a 1 × a 3 ∣ s i n θ β = ρ 2 ∣ a 2 × a 3 ∣ s i n θ \Rightarrow \left\{\begin{array}{l} \textcolor{red}{\alpha}=\rho^2|a_1\times a_3|sin\theta\\ \textcolor{red}{\beta}=\rho^2|a_2\times a_3|sin\theta \end{array}\right. { α=ρ2a1×a3sinθβ=ρ2a2×a3sinθ \newline
内参数求解完毕 □ \square

step3:求 R , T R,T R,T

从上面推导中,得到 r 3 = ρ a 3 , r 1 = ( a 2 × a 3 ) ∣ a 2 × a 3 ∣ \textcolor{red}{r_3}=\rho a_3,\textcolor{red}{r_1}=\frac{(a_2\times a_3)}{|a_2\times a_3|} r3=ρa3,r1=a2×a3(a2×a3) ⇒ r 2 = r 3 × r 1 \Rightarrow \textcolor{red}{r_2}=r_3\times r_1 r2=r3×r1
K T = ρ b KT=\rho b KT=ρb ⇒ T = ρ K − 1 b \Rightarrow \textcolor{red}{T}=\rho K^{-1}b T=ρK1b
外参数求解完毕 □ \square
外参数不唯一,有两组值,可以根据先验知识获得唯一值。

2.3 径向畸变相机模型

在这里插入图片描述
如图,无畸变的图像应该是虚线的部分,由于相机的畸变,图像变成了实线的部分的样子,将畸变图像校正:
( λ 0 0 λ ) ( u i v i ) \left(\begin{array}{c}\lambda&0\\0&\lambda \end{array}\right)\left(\begin{array}{c}u_i\\v_i\end{array}\right) (λ00λ)(uivi) 其中, λ = 1 + ∑ p = 1 3 k p d 2 p , d 2 = u i 2 + v i 2 \lambda=1+\sum_{p=1}^{3}{k_pd^{2p}},d^2=u_i^2+v_i^2 λ=1+p=13kpd2p,d2=ui2+vi2。带入相机模型,得到畸变相机模型:
P ′ = [ 1 λ 0 0 0 1 λ 0 0 0 1 ] M P w = Q P w P'=\left[\begin{array}{c}\frac{1}{\lambda}&0&0\\0&\frac{1}{\lambda}&0\\0&0&1\end{array}\right]MP_w=QP_w P=λ1000λ10001MPw=QPw

2.4 径向畸变相机标定

畸变相机标定需要求参数 m i , k i m_i,k_i mi,ki。同相机标定问题,畸变相机标定问题:
{ − u 1 q 3 P 1 + q 1 P 1 = 0 − v 1 q 3 P 1 + q 2 P 1 = 0 ⋮ − u n q 3 P n + q 1 P n = 0 − v n q 3 P n + q 2 P n = 0 \left\{\begin{array}{c} -u_1q_3P_1+q_1P_1=0\\ -v_1q_3P_1+q_2P_1=0\\ \vdots\\ -u_nq_3P_n+q_1P_n=0\\ -v_nq_3P_n+q_2P_n=0\\ \end{array}\right. u1q3P1+q1P1=0v1q3P1+q2P1=0unq3Pn+q1Pn=0vnq3Pn+q2Pn=0
但式中 q i q_i qi k i , m i k_i,m_i ki,mi的非线性函数,所以上述放出是非线性方程:
{ f 1 ( k 1 , k 2 , k 3 , m 1 , m 2 , m 3 ) = 0 f 2 ( k 1 , k 2 , k 3 , m 1 , m 2 , m 3 ) = 0 ⋮ f 2 n ( k 1 , k 2 , k 3 , m 1 , m 2 , m 3 ) = 0 \left\{\begin{array}{c} f_1(k_1,k_2,k_3,m_1,m_2,m_3)=0\\ f_2(k_1,k_2,k_3,m_1,m_2,m_3)=0\\ \vdots\\ f_{2n}(k_1,k_2,k_3,m_1,m_2,m_3)=0 \end{array}\right. f1(k1,k2,k3,m1,m2,m3)=0f2(k1,k2,k3,m1,m2,m3)=0f2n(k1,k2,k3,m1,m2,m3)=0
可以直接用非线性最小二乘得到 k i , m i k_i,m_i ki,mi的解。这边可以先求出 m 1 , m 2 m_1,m_2 m1,m2
{ 1 λ m 1 P i = u i m 3 P i 1 λ m 2 P i = v i m 3 P i \left\{\begin{array}{c} \frac{1}{\lambda}m_1P_i=u_im_3P_i\\ \frac{1}{\lambda}m_2P_i=v_im_3P_i \end{array}\right. { λ1m1Pi=uim3Piλ1m2Pi=vim3Pi 两式相除得:
m 1 P i m 2 P i = u i v i \frac{m_1P_i}{m_2P_i}=\frac{u_i}{v_i} m2Pim1Pi=viui 得到 m 1 , m 2 m_1,m_2 m1,m2的线性方程组:
( v 1 P 1 T − u 1 P 1 T ⋮ ⋮ v n P n T − u n P n T ) ( m 1 T m 2 T ) = 0 \left(\begin{array}{c} v_1P_1^T&-u_1P_1^T\\ \vdots&\vdots\\ v_nP_n^T&-u_nP_n^T\\ \end{array}\right) \left(\begin{array}{c}m_1^T\\m_2^T\end{array}\right)=0 v1P1TvnPnTu1P1TunPnT(m1Tm2T)=0
求得 m 1 , m 2 m_1,m_2 m1,m2,作为上面的非线性方程组的初始解,得到最终的 k i , m i □ k_i,m_i\square ki,mi

猜你喜欢

转载自blog.csdn.net/dragonchow123/article/details/125014131