2D-2D:对极约束

对极约束

对极几何的地位:对极几何(Epipolar Geometry)是Structure from Motion问题中,相机在不同位置拍摄场景,所成两幅图像中对应坐标点存在的几何关系,是SFM中2D-2D求解两帧图像间相机位姿的基本模型。
匹配的特征点 p 1 p_1 p1 p 2 p_2 p2
在这里插入图片描述
两幅图像 I 1 I_1 I1 I 2 I_2 I2。第一帧到第二帧图像的运动R,t。两个相机的中心分别为 O 1 O_1 O1 O 2 O_2 O2 I 1 I_1 I1中特征点 p 1 p_1 p1,在 I 2 I_2 I2上对应的特征点 p 2 p_2 p2。如果二者匹配正确,则两点对应同一空间点在两个成像平面上的投影。 p 1 p_1 p1,在 I 2 I_2 I2 O 1 p 1 → \overrightarrow{O_1p_1} O1p1 O 2 p 2 → \overrightarrow{O_2p_2} O2p2 在三维空间中相交于点P。 O 1 , O 2 , P {O_1,O_2,P} O1,O2,P三点可以确定一个平面,称为极平面(Epipolar plane)。 O 1 O 2 {O_1O_2} O1O2称为基线(Baseline)。称极平面与两个像平面 I 1 I_1 I1 I 2 I_2 I2的交线 l 1 l_1 l1 l 2 l_2 l2,称为极线。

几何关系,从代数的角度描述

在第一帧的坐标系下,P的空间位置 [ X Y Z ] T \left[\begin{matrix}X&Y&Z \end{matrix}\right]^T [XYZ]T,根据针孔相机模型,相机成像平面一点的像素坐标 p p p和该点在世界坐标系下的3D坐标 P P P存在 p = K P p=KP p=KP的关系,其中 K K K为相机内参。采用齐次坐标表示为: d p = K P dp=KP dp=KP其中d是空间点深度(为了将 p p p的齐次项变为1), p p p P P P都是齐次坐标。以第一个相机坐标系作为参照,两个像素点的像素位置(up to scale)为 (1) d 1 p 1 = K P d_1p_1=KP\tag{1} d1p1=KP(1) (2) d 2 p 2 = K ( R P + t ) d_2p_2=K(RP+t)\tag{2} d2p2=K(RP+t)(2)其中K为相机内参矩阵,R为从第一个相机坐标系到第二个相机坐标系的旋转矩阵(Rotation),t为从第一个相机坐标系到第二个相机坐标系的平移向量(Translation)。如果写成齐次坐标的形式,上式可写成非零常数下成立的等式:
(3) p 1 = K P p_1=KP\tag{3} p1=KP(3) (4) p 2 = K ( R P + t ) p_2=K(RP+t)\tag{4} p2=K(RP+t)(4)现在取: (5) x 1 = K − 1 p 1 x_1=K^{-1}p_1\tag{5} x1=K1p1(5) (6) x 2 = K − 1 p 2 x_2=K^{-1}p_2\tag{6} x2=K1p2(6) x 1 , x 2 x_1,x_2 x1x2是两个像素点的归一化平面(相机坐标系?)上的坐标,带入上式得: (7) x 2 = R x 1 + t x_2=Rx_1+t\tag{7} x2=Rx1+t(7)两边同时左乘 t ∧ t^\wedge t,相当于两侧同时与t做外积: (8) t ∧ x 2 = t ∧ R x 1 t^\wedge x_2=t^\wedge Rx_1\tag{8} tx2=tRx1(8)两边同时左乘 x 2 T x_2^T x2T: (9) x 2 T t ∧ x 2 = x 2 T t ∧ R x 1 x_2^Tt^\wedge x_2=x_2^Tt^\wedge Rx_1\tag{9} x2Ttx2=x2TtRx1(9)观察等式左侧, t ∧ x 2 t^\wedge x_2 tx2是一个与t和 x 2 x_2 x2都垂直的向量。把它再和 x 2 x_2 x2做内积时,将得到0。因此 (10) x 2 T t ∧ R x 1 = 0 x_2^Tt^\wedge Rx_1=0\tag{10} x2TtRx1=0(10),重新带入 p 1 , p 2 p_1,p_2 p1,p2,有: (11) p 2 T K − T t ∧ R K − 1 p 1 = 0 p_2^TK^{-T}t^\wedge R K^{-1}p_1=0\tag{11} p2TKTtRK1p1=0(11)(10),(11)式都称为对极约束。
将中间部分记作两个矩阵:
E = t ∧ R , F = K − T E K − 1 , x 2 T E x 1 = p 2 T F p 1 E=t^\wedge R,F=K^{-T}EK^{-1},x^T_2Ex_1=p^T_2Fp_1 E=tR,F=KTEK1,x2TEx1=p2TFp1
对极约束描述了匹配点 x 2 x_2 x2 E x 1 Ex_1 Ex1这条直线上这样的几何关系。相机位姿求解:

  1. 通过匹配点对求解E或F。
  2. 分解E或F求出R,t。
  3. 备注:E和F只相差相机内参,SLAM通常已知内参,实践中采用形式更简洁的E。

几何关系,从几何的角度描述

对极约束,几何解释1

如图,对极平面 O 1 O 2 P O_1O_2P O1O2P,物点P在左像平面上的像点 p l p_l pl,在左像平面上的像点 p r p_r pr,左相机光心 O 1 O_1 O1在右像平面成像点 e r e_r er,右相机光心 O 2 O_2 O2在左像平面成像点 e l e_l el,其中 e l , e r e_l,e_r eler称为极点, p l e l , p r e r p_le_l,p_re_r plelprer称为极线。对极约束描述的是物点在左相机平面上所成像点 p l p_l pl,在右相机平面一定在极线 p r e r p_re_r prer上。
在这里插入图片描述
两个相机的坐标系存在如下关系: x 2 x_2 x2
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对极约束几何解释2

对极约束中很常见的图。它表示的是一个运动的相机在两个不同位置的成像,左右两个平行四边形分别是相机在不同位置的成像平面, C 0 , C 1 C_0, C_1 C0,C1分别是两个位置中相机的光心,也就是针孔相机模型中的针孔 P P P是空间中的一个三维点, p 0 p 1 p_0p_1 p0p1分别是P点在不同成像平面上对应的像素点。 C 0 C 1 P p 0 p 1 C_0C_1Pp_0p_1 C0C1Pp0p1组成的平面叫极平面。
在这里插入图片描述
极平面与成像平面的交线叫极线,两个光心和成像平面的交点叫极点。
在这里插入图片描述
在这里插入图片描述
三个向量共面,即 (2-1) C 0 P 0 → ⋅ ( C 0 P 0 → × C 1 P 1 → \overrightarrow{C_0P_0}\cdot(\overrightarrow{C_0P_0} \times \overrightarrow{C_1P_1} \tag{2-1} C0P0 (C0P0 ×C1P1 (2-1)
p 0 , p 1 p_0,p_1 p0,p1都是图像上的二维点。把它们变成三维的方向向量来考虑,即只考虑方向,不考虑起点或终点。假设一个归一化的图像平面,该平面上焦距f=1,因此,在以 C 0 C_0 C0为原点的坐标系下, p 0 = ( x 0 y 0 1 ) C 0 p_0=\left(\begin{matrix}x_0&y_0&1 \end{matrix}\right)_{C_0} p0=(x0y01)C0,以 C 1 C_1 C1为坐标系 p 1 = ( x 1 y 1 1 ) C 1 p_1=\left(\begin{matrix}x_1&y_1&1 \end{matrix}\right)_{C_1} p1=(x1y11)C1,在 C 0 C 1 p 0 p 1 C_0C_1p_0p_1 C0C1p0p1组成的极平面上,保证 C 0 P 0 → \overrightarrow{C_0P_0} C0P0 的方向不变,在极平面上移动时,结论仍然成立。
p 0 , p 1 p_0,p_1 p0p1不在同一个坐标系里,将所有点的坐标都转换到以 p 0 p_0 p0为原点的坐标系,方向向量仅与方向有关,而与起始位置无关,因此只考虑旋转。从 C 1 C_1 C1坐标系到 C 0 C_0 C0坐标系的旋转矩阵R,那么 R p 1 Rp_1 Rp1就是 p 1 p_1 p1在以 C 0 C_0 C0为原点的坐标系中的坐标了。
(2-1) C 0 P 0 → ⋅ ( C 0 P 0 → × C 1 P 1 → \overrightarrow{C_0P_0}\cdot(\overrightarrow{C_0P_0} \times \overrightarrow{C_1P_1} \tag{2-1} C0P0 (C0P0 ×C1P1 (2-1)最左边向量 C 0 p 0 C_0p_0 C0p0可以用 p 0 p_0 p0表示,向量 C 0 C 1 C_0C_1 C0C1就是光心 C 1 C_1 C1相对于 C 0 C_0 C0的平移,记为t,向量 C 1 p 1 C_1p_1 C1p1根据前面的结论,可以用 R p 1 Rp_1 Rp1表示,因此上式可表达为:
p 0 ⋅ ( t × R p 1 ) p_0\cdot(t\times Rp_1) p0(t×Rp1)
这个式子是根据对极几何得到的,因此称为对极约束。
其中 ( t × R ) = t ∧ R = E (t\times R)=t^{\wedge }R=E (t×R)=tR=E称为本质矩阵或本征矩阵。因此: p 0 E p 1 = 0 p_0Ep_1=0 p0Ep1=0根据此式,可求出极线方程。
根据理论:点 p p p在直线 l l l上的充分必要条件是直线 l l l的系数与 p p p的齐次坐标 p ′ p' p的内积为0。即 l T ⋅ p ′ = 0 l^T\cdot p'=0 lTp=0
E p 1 Ep_1 Ep1看作是直线的方程, p 0 p_0 p0看作是直线上的点,即 E p 1 Ep_1 Ep1是以 C 0 C_0 C0为原点坐标系中的极线了。如图中红线所示:
在这里插入图片描述
题目:现有一个运动着的相机拍摄的连续两张图片,其中特征点匹配部分已经完成。请根据两帧图像对应的匹配点计算基础矩阵,并利用该矩阵绘制出前10个特征点对应的极线。

注释

叉乘与矩阵和向量相乘的变换推导

向量 a = [ a 1 a 2 a 3 ] a=\left[\begin{matrix}a_1&a_2&a_3 \end{matrix}\right] a=[a1a2a3], b = [ b 1 b 2 b 3 ] b=\left[\begin{matrix}b_1&b_2&b_3 \end{matrix}\right] b=[b1b2b3],内积描述向量间的投影关系, a ⋅ b = a T b = ∑ i = 1 3 a i b i = ∣ a ∣ ∣ b ∣ c o s ⟨ a , b ⟩ a\cdot b=a^Tb= \sum_{i=1}^3a_ib_i=| a | | b | cos\left \langle a,b\right \rangle ab=aTb=i=13aibi=abcosa,b
外积描述两个向量张成的四边形的有向面积: a × b = [ i j k a 1 a 2 a 3 b 1 b 2 b 3 ] = [ a 2 b 3 − a 3 b 2 a 3 b 1 − a 1 b 3 a 1 b 2 − a 2 b 1 ] b = △ [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] b = a ∧ b a \times b= \left[ \begin{matrix} i &j &k\\ a_1&a_2&a_3\\b_1&b_2&b_3\\ \end{matrix} \right]=\left[\begin{matrix}a_2b_3-a_3b_2\\a_3b_1-a_1b_3\\a_1b_2-a_2b_1 \end{matrix}\right]b\overset{\bigtriangleup}{=}\left[\begin{matrix}0&-a_3&a_2\\a_3&0&-a_1\\-a_2&a_1&0\end{matrix}\right]b=a^\wedge b a×b=ia1b1ja2b2ka3b3=a2b3a3b2a3b1a1b3a1b2a2b1b=0a3a2a30a1a2a10b=ab。引入 ∧ ^\wedge 符号(反对称符号),把a写成一个反对称矩阵,可以把 a × b a \times b a×b写成矩阵与向量的乘法 a ∧ b a^\wedge b ab,把外积变成了线性运算。外积只对三维向量存在定义。外积还可以表示向量的旋转。a到b的旋转可以通过右手定则来确定方向,用a,b之间的夹角确定大小,用3个实数来描述,即向量 ω \omega ω

叉乘与点乘的关系

两个向量的叉乘结果是一个同时垂直于这两个向量的向量。
叉乘只在三维空间中有定义,比如两个向量 a和b 的叉乘写作 a x b,它是与向量 a, b都垂直的向量,其方向通过右手定则决定。
除了叉乘,还有点乘,a点乘b的定义是
a ⋅ b = ∣ a ∣ ∣ b ∣ c o s ( θ ) a\cdot b=| a | | b | cos(θ) ab=abcos(θ)

因此如果两个互相垂直的向量点乘,cos(θ) = 0,点乘结果也为0。

点p在直线上的充分必要条件是直线l的系数与p的齐次坐标 p ′ p' p的内积为0

l T p ˙ ′ = 0 l^T\dot p'=0 lTp˙=0

初次整理笔记,理解还不是特别深刻,先到这吧,以后有了新理解再来补充。

参考文献

《视觉SLAM十四讲:从理论到实践》第7讲7.3.1
从零开始一起学习SLAM | 不推公式,如何真正理解对极约束? https://zhuanlan.zhihu.com/p/48666442
https://www.cnblogs.com/clarenceliang/p/6704970.html
https://www.jianshu.com/p/032e61a23cc0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2D-SRNCP(也称为二维稀疏重建和低秩约束)是一种用于图像恢复和超分辨率重建的算法。它基于稀疏表示和低秩分解的理论,能够从低分辨率图像中恢复高分辨率的细节,并保持图像的纹理细节和准确性。 要下载2D-SRNCP算法的MATLAB和C代码,可以通过以下几个步骤进行操作: 首先,打开MATLAB或C的官方网站,进入下载页面。 然后,在搜索框中输入“2D-SRNCP算法”,搜索相关材料。 接下来,找到适合您操作系统的版本和语言(MATLAB或C),并点击下载链接。 下载完成后,将文件解压缩到您选择的目录中。 打开MATLAB软件或C编译器,将解压缩的文件导入到您的工作环境中。可以使用文本编辑器打开代码文件,查看算法的实现细节和相关函数。 在MATLAB中,您可以运行代码并通过提供输入图像进行测试。通过调整算法的参数,您可以尝试不同的配置,并观察输出图像的质量和细节恢复程度。 在C语言编译器中,您需要按照特定的编译和运行步骤来运行算法。首先,将代码编译为可执行文件,并确保所有的依赖库和头文件都正确安装。然后,通过命令行或集成开发环境(IDE)运行可执行文件,并提供输入图像进行测试。 总之,通过按照上述步骤下载和使用2D-SRNCP算法的MATLAB和C代码,您可以实现图像恢复和超分辨率重建的功能,并探索算法的性能和效果。这将有助于提高图像处理和计算机视觉领域的相关应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值