基本概念
- 定义:
P 1 : 平 面 I 1 l 1 上 的 特 征 点 P_1:平面I_1l_1上的特征点 P1:平面I1l1上的特征点
P 2 : 平 面 I 2 l 1 上 与 P 1 相 匹 配 的 特 征 点 P_2:平面I_2l_1上与P_1相匹配的特征点 P2:平面I2l1上与P1相匹配的特征点
O 1 : 第 一 帧 图 像 的 几 何 中 心 O_1:第一帧图像的几何中心 O1:第一帧图像的几何中心
O 2 : 第 二 帧 图 像 的 几 何 中 心 O_2:第二帧图像的几何中心 O2:第二帧图像的几何中心
P : O 1 P 1 → 与 O 2 P 2 → 在 三 维 空 间 的 交 点 P:\overrightarrow{O_1P_1}与\overrightarrow {O_2P_2}在三维空间的交点 P:O1P1 与O2P2 在三维空间的交点
e 1 , e 2 : O 1 O 2 分 别 与 图 像 平 面 I 1 l 1 和 I 2 l 2 的 交 点 e_1,e_2:O_1O_2分别与图像平面I_1l_1和I_2l_2的交点 e1,e2:O1O2分别与图像平面I1l1和I2l2的交点 - 引出概念:
极平面(Epipolarplane): O 1 , O 2 , P O_1,O_2,P O1,O2,P三点构成的平面
极点(Epipoles): e 1 , e 2 e_1,e_2 e1,e2
基线: O 1 O 2 O_1O_2 O1O2
极线(Epipolar line): P 1 e 1 ; P 2 e 2 P_1e_1;P_2e_2 P1e1;P2e2
対极约束
-
已知
K : 相 机 内 参 矩 阵 K:相机内参矩阵 K:相机内参矩阵
R , t : 两 个 坐 标 系 的 相 对 运 动 R,t:两个坐标系的相对运动 R,t:两个坐标系的相对运动
s 1 p 1 = K P , s 2 p 2 = K ( R P + t ) s_1p_1=KP,s_2p_2=K(RP+t) s1p1=KP,s2p2=K(RP+t)
在齐次坐标系下求解: s 1 p 1 ≅ p 1 ; s 2 p 2 ≅ p 2 s_1p_1 \cong p_1;s_2p_2 \cong p_2 s1p1≅p1;s2p2≅p2 -
推导
(1):取 x 1 = K − 1 p 1 , x 2 = K − 1 p 2 x_1=K^{-1}p_1,x_2=K^{-1}p_2 x1=K−1p1,x2=K−1p2
得到: x 2 ≅ R x 1 + t x_2 \cong Rx_1+t x2≅Rx1+t
(2):左右两边同时左乘 t × t\times t×(t的反对称矩阵)
t × x 2 ≅ t × R x 1 + 0 t\times x_2\cong t\times Rx_1+0 t×x2≅t×Rx1+0
(3):左右两边同时左乘 X 2 T X_2^T X2T
x 2 T ( t × ) x 2 ≅ x 2 T ( t × ) R x 1 x_2^T(t×)x_2 \cong x_2^T(t\times)R x_1 x2T(t×)x2≅x2T(t×)Rx1
(4): ( t × ) x 2 (t×)x_2 (t×)x2得到的向量与 x 2 , t x_2,t x2,t必然垂直,得到対极约束式:
x 2 T ( t × ) R x 1 = 0 或 : P 2 T K − 1 ( t × ) R K − 1 P 1 = 0 x_2^T(t\times)R x_1=0\\ 或:\\ P_2^TK^{-1}(t×)RK^{-1}P_1=0 x2T(t×)Rx1=0或:P2TK−1(t×)RK−1P1=0
(5):基础矩阵、本质矩阵:
本质矩阵(Essential Matrix): E = t × R E=t×R E=t×R
基础矩阵(Fundamental Matrix): F = K − T ( t × ) R K − 1 F=K^{-T}(t×)RK^{-1} F=K−T(t×)RK−1
存在如下关系 x 2 T E x 1 = p 2 T F P 1 = 0 x_2^TEx_1=p_2^TFP_1=0 x2TEx1=p2TFP1=0 -
相机姿态求解步骤:
(1):根据配对特征点求出E和F
(2):根据 E E E或 F F F求出 R , t R,t R,t
本质矩阵求解
-
性质
(1):本质矩阵的内在性质:被指矩阵的奇异值,必有两值相等,第三个值为0,证明
(2):E乘以任意非零常数,依然满足対极约束
(3):由于旋转和平移各有3个自由度,故 t × R t×R t×R应当有6个自由度,因为尺度不变性,E实际上只有5个自由度 -
八点法求解本质矩阵
(1):归一化坐标: x 1 = [ u 1 v 1 1 ] T x_1=\left[\begin{matrix}u_1&v_1&1\end{matrix}\right]^T x1=[u1v11]T, x 2 = [ u 2 v 2 1 ] T x_2=\left[\begin{matrix}u_2&v_2&1\end{matrix}\right]^T x2=[u2v21]T,根据対极约束有:
[ u 2 v 2 1 ] [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] [ u 1 v 1 1 ] = 0 \left[\begin{matrix}u_2&v_2&1\end{matrix}\right] \left[\begin{matrix}e_1&e_2&e_3\\e_4&e_5&e_6\\e_7&e_8&e_9\\ \end{matrix}\right]\left[\begin{matrix}u_1\\v_1\\1\end{matrix}\right]=0 [u2v21]⎣⎡e1e4e7e2e5e8e3e6e9⎦⎤⎣⎡u1v11⎦⎤=0
(2):把矩阵E展开,写成向量形式:
e = [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] T e=\left[\begin{matrix}e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9\end{matrix}\right]^T e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T
(3):把対极约束改写为与e有关的线性形式:
[ u 2 u 1 , u 2 v 1 , u 2 , v 2 u 1 , v 2 v 1 , v 2 , u 1 , v 1 , 1 ] T e = 0 \left[\begin{matrix}u_2u_1,u_2v_1,u_2,v_2u_1,v_2v_1,v_2,u_1,v_1,1\end{matrix}\right]^Te=0 [u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]Te=0
(4):得到8个特征点构造方程求解:
[ u 2 1 u 1 1 , u 2 1 v 1 1 , u 2 1 , v 2 1 u 1 1 , v 2 1 v 1 1 , v 2 1 , u 1 1 , v 1 1 , 1 u 2 2 u 1 2 , u 2 2 v 1 2 , u 2 2 , v 2 2 u 1 2 , v 2 2 v 1 2 , v 2 2 , u 1 2 , v 1 2 , 1 . . . u 2 8 u 1 8 , u 2 8 v 1 8 , u 2 8 , v 2 8 u 1 8 , v 2 8 v 1 8 , v 2 8 , u 1 8 , v 1 8 , 1 ] [ e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ] = 0 \left[\begin{matrix}u^1_2u^1_1,u^1_2v^1_1,u^1_2,v^1_2u^1_1,v^1_2v^1_1,v^1_2,u^1_1,v^1_1,1\\ u^2_2u^2_1,u^2_2v^2_1,u^2_2,v^2_2u^2_1,v^2_2v^2_1,v^2_2,u^2_1,v^2_1,1\\ ...\\ u^8_2u^8_1,u^8_2v^8_1,u^8_2,v^8_2u^8_1,v^8_2v^8_1,v^8_2,u^8_1,v^8_1,1\\ \end{matrix}\right]\left[\begin{matrix}e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9\\ \end{matrix}\right]=0 ⎣⎢⎢⎡u21u11,u21v11,u21,v21u11,v21v11,v21,u11,v11,1u22u12,u22v12,u22,v22u12,v22v12,v22,u12,v12,1...u28u18,u28v18,u28,v28u18,v28v18,v28,u18,v18,1⎦⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡e1e2e3e4e5e6e7e8e9⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0
SVD求解相机运动 R , t R,t R,t
-
对本质矩阵进行 S V D SVD SVD分解:
∑ = d i a g ( λ 1 , λ 2 , λ 3 ) \sum=diag(\lambda_1,\lambda_2,\lambda_3) ∑=diag(λ1,λ2,λ3)
E = U ∑ V T E=U\sum V^T E=U∑VT -
假设 λ 1 > λ 2 > λ 3 \lambda_1>\lambda_2>\lambda_3 λ1>λ2>λ3,重写SVD分解为:
E = U d i a g ( λ 1 + λ 2 2 , λ 1 + λ 2 2 , 0 ) V T E=Udiag(\frac{\lambda_1+\lambda_2}{2},\frac{\lambda_1+\lambda_2}{2},0)V^T E=Udiag(2λ1+λ2,2λ1+λ2,0)VT -
对于任意一个 E E E,可以存在两个可能的 t , R t,R t,R预期对应:
R Z ( π 2 ) : 表 示 沿 Z 轴 旋 转 9 0 。 得 到 R_Z(\frac{\pi}{2}):表示沿Z轴旋转90^。得到 RZ(2π):表示沿Z轴旋转90。得到
t 1 × = U R Z ( π 2 ) ∑ U T , R 1 = U R Z T ( π 2 ) V T t 2 × = U R Z ( − π 2 ) ∑ U T , R 2 = U R Z T ( − π 2 ) V T t_1×=UR_Z(\frac{\pi}{2})\sum U^T,R_1=UR_Z^T(\frac{\pi}{2})V^T\\ t_2×=UR_Z(-\frac{\pi}{2})\sum U^T,R_2=UR^T_Z(-\frac{\pi}{2})V^T t1×=URZ(2π)∑UT,R1=URZT(2π)VTt2×=URZ(−2π)∑UT,R2=URZT(−2π)VT -
将任意一点带入4个解求得正确的解(只有一个)
单应矩阵
资料
描述两个平面之间的映射关系。
如果两幅图像的所有特征点都落在同一平面上(墙、地面).
-
基本概念:
(1):相机坐标系
3D空间点在相机系下的坐标P为:
P = [ x y z ] P=\left[\begin{matrix}x\\y\\z\end{matrix}\right] P=⎣⎡xyz⎦⎤
(2):相机坐标系到像素系的齐次做标:
K = [ f x 0 c x 0 f y c y 0 0 1 ] : 相 机 内 参 K=\left[\begin{matrix}f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\end{matrix}\right]:相机内参 K=⎣⎡fx000fy0cxcy1⎦⎤:相机内参
q : 像 素 齐 次 做 标 q:像素齐次做标 q:像素齐次做标
q = [ u v 1 ] = 1 z K P q=\left[\begin{matrix}u\\v\\1\end{matrix}\right]=\frac{1}{z}K_P q=⎣⎡uv1⎦⎤=z1KP
(3):平面参数(3D空间点 p p p)所在的平面在相机系下的平面参数为:
n : 平 面 法 向 量 n:平面法向量 n:平面法向量
d : 相 机 系 原 点 到 平 面 距 离 d:相机系原点到平面距离 d:相机系原点到平面距离
{ n , d } \{n,d\} {n,d}
并且满足:
n T ∗ p + d = 0 n^T*p+d=0 nT∗p+d=0 -
平面参数:由像素系计算相机系
(1):由像素系坐标计算相机系坐标:
p = z K − 1 q ( z 未 知 , 无 法 求 出 ) p=zK^{-1}q(z未知,无法求出) p=zK−1q(z未知,无法求出)
(2):有平面参数得:
n T ∗ p + d = n T z K − 1 q + d = 0 n^T*p+d=n^TzK^{-1}q+d=0 nT∗p+d=nTzK−1q+d=0
得到: z = − d n T K − 1 q p = d n T K − 1 q ∗ K − 1 q z=-\frac{d}{n^TK^{-1}q} \\ p=\frac{d}{n^TK^{-1}q}*K^{-1}q z=−nTK−1qdp=nTK−1qd∗K−1q -
单应矩阵:由像素系 a 计算像素系 b
(1):由像素a系计算像素b系
P a : a 坐 标 系 下 的 特 征 点 P_a:a坐标系下的特征点 Pa:a坐标系下的特征点
P b : b 坐 标 系 下 的 与 a 相 对 应 的 特 征 点 P_b:b坐标系下的与a相对应的特征点 Pb:b坐标系下的与a相对应的特征点
R b a : b 系 下 a 系 的 特 征 点 姿 态 或 者 a 系 到 b 系 的 坐 标 旋 转 变 换 R_{ba}:b系下a系的特征点姿态或者a系到b系的坐标旋转变换 Rba:b系下a系的特征点姿态或者a系到b系的坐标旋转变换
t b a : b 系 下 a 系 1 的 位 置 或 者 a 系 到 b 系 的 坐 标 旋 转 变 换 t_{ba}:b系下a系1的位置或者a系到b系的坐标旋转变换 tba:b系下a系1的位置或者a系到b系的坐标旋转变换
[ P b 1 ] = [ R b a t b a 0 1 ] [ P a 1 ] \left[\begin{matrix}P_b\\1\end{matrix}\right]=\left[\begin{matrix}R_{ba}&t_{ba}\\0&1\end{matrix}\right]\left[\begin{matrix}P_a\\1\end{matrix}\right] [Pb1]=[Rba0tba1][Pa1]
P b = R b a P a + t b a P_b=R_{ba}P_a+t_{ba} Pb=RbaPa+tba
得到两个坐标系的对应像素关系为:
p = z K − 1 q p=zK^{-1}q p=zK−1q
z b K b − 1 q b = z a R b a K a − 1 q a + t b a z_bK^{-1}_bq_b=z_aR_{ba}K^{-1}_aq_a+t_{ba} zbKb−1qb=zaRbaKa−1qa+tba
得到a系像素标到的b系像素:
q b = z a z b K b R b a K a − 1 q a + 1 z b K b t b a q_b=\frac{z_a}{z_b}K_bR_{ba}K_a^{-1}q_a+\frac{1}{z_b}K_bt_{ba} qb=zbzaKbRbaKa−1qa+zb1Kbtba
(2):加入平面参数
z = − d n T K − 1 q z=-\frac{d}{n^TK^{-1}q} z=−nTK−1qd
q b = z a z b K b R b a K a − 1 q a + 1 z b K b t b a q_b=\frac{z_a}{z_b}K_bR_{ba}K_a^{-1}q_a+\frac{1}{z_b}K_bt_{ba} qb=zbzaKbRbaKa−1qa+zb1Kbtba
q b = z a z b K b R b a K a − 1 q a + 1 z b K b t b a = K b R b a ( I + 1 d a n a T ) K a − 1 q a q_b=\frac{z_a}{z_b}K_bR_{ba}K^{-1}_aq_a+\frac{1}{z_b}K_bt_{ba}\\ =K_bR_{ba}(I+\frac{1}{d_a}n_a^T )K_a^{-1}q_a qb=zbzaKbRbaKa−1qa+zb1Kbtba=KbRba(I+da1naT)Ka−1qa
(3):定义单应矩阵
q b = H b a q a H b a = K b R b a ( I + 1 d a t a b n a T ) K a − 1 ( 单 应 矩 阵 ) q_b=H_{ba}q_a\\ H_{ba}=K_bR_{ba}(I+\frac{1}{d_a}t_{ab}n^T_a)K_a^{-1}(单应矩阵) qb=HbaqaHba=KbRba(I+da1tabnaT)Ka−1(单应矩阵) -
单应矩阵求解:
(1)建立方程: [ u 2 v 2 1 ] ≃ [ H 11 H 12 H 13 H 21 H 22 H 23 H 31 H 32 1 ] [ u 1 v 1 1 ] \left[\begin{matrix}u_2\\v_2\\1\end{matrix}\right] \simeq \left[\begin{matrix}H_{11}&H_{12}&H_{13}\\ H_{21}&H_{22}&H_{23}\\ H_{31}&H_{32}&1\end{matrix}\right] \left[\begin{matrix}u_1\\v_1\\1\end{matrix}\right] ⎣⎡u2v21⎦⎤≃⎣⎡H11H21H31H12H22H32H13H231⎦⎤⎣⎡u1v11⎦⎤
(2)存在如下阶:
{ u 2 = H 11 u 1 + H 12 v 1 + H 13 H 31 u 1 + H 32 v 1 + 1 v 2 = H 21 u 1 + H 22 v 1 + H 23 H 31 u 1 + H 32 v 1 + 1 \begin{cases} u_2=\frac{H_{11}u_1+H_{12}v_1+H_{13}}{H_{31}u_1+H_{32}v_1+1}\\ v_2=\frac{H_{21}u_1+H_{22}v_1+H_{23}}{H_{31}u_1+H_{32}v_1+1} \end{cases} {u2=H31u1+H32v1+1H11u1+H12v1+H13v2=H31u1+H32v1+1H21u1+H22v1+H23
(3)通过4个相匹配的特征点即可求解:
[ u 1 1 v 1 1 1 0 0 0 − u 1 1 u 2 1 − v 1 1 u 2 1 0 0 0 u 1 1 v 1 1 1 − u 1 1 v 2 1 − v 1 1 v 2 1 u 1 2 v 1 2 1 0 0 0 − u 1 2 u 2 2 − v 1 2 u 2 2 0 0 0 u 1 2 v 1 2 1 − u 1 2 v 2 2 − v 1 2 v 2 2 u 1 3 v 1 3 1 0 0 0 − u 1 3 u 2 3 − v 1 3 u 2 3 0 0 0 u 1 3 v 1 3 1 − u 1 3 v 2 3 − v 1 3 v 2 3 u 1 4 v 1 4 1 0 0 0 − u 1 4 u 2 4 − v 1 4 u 2 4 0 0 0 u 1 4 v 1 4 1 − u 1 4 v 2 4 − v 1 4 v 2 4 ] [ H 11 H 12 H 13 H 21 H 22 H 23 H 31 H 32 1 ] = [ u 1 v 1 u 2 v 2 u 3 v 3 u 4 v 4 ] \left[\begin{matrix}u^1_1&v^1_1&1&0&0&0&-u^1_1u_2^1&-v^1_1u^1_2\\ 0&0&0&u^1_1&v^1_1&1&-u^1_1v_2^1&-v^1_1v^1_2\\ u^2_1&v^2_1&1&0&0&0&-u^2_1u_2^2&-v^2_1u^2_2\\ 0&0&0&u^2_1&v^2_1&1&-u^2_1v_2^2&-v^2_1v^2_2\\ u^3_1&v^3_1&1&0&0&0&-u^3_1u_2^3&-v^3_1u^3_2\\ 0&0&0&u^3_1&v^3_1&1&-u^3_1v_2^3&-v^3_1v^3_2\\ u^4_1&v^4_1&1&0&0&0&-u^4_1u_2^4&-v^4_1u^4_2\\ 0&0&0&u^4_1&v^4_1&1&-u^4_1v_2^4&-v^4_1v^4_2\\ \end{matrix}\right] \left[\begin{matrix}H_{11}\\H_{12}\\H_{13}\\ H_{21}\\H_{22}\\H_{23}\\ H_{31}\\H_{32}\\1\end{matrix}\right] =\left[\begin{matrix}u_1\\v_1\\u_2\\v_2\\u_3\\v_3\\u_4\\v_4\end{matrix}\right] ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u110u120u130u140v110v120v130v140101010100u110u120u130u140v110v120v130v1401010101−u11u21−u11v21−u12u22−u12v22−u13u23−u13v23−u14u24−u14v24−v11u21−v11v21−v12u22−v12v22−v13u23−v13v23−v14u24−v14v24⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡H11H12H13H21H22H23H31H321⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡u1v1u2v2u3v3u4v4⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤