6.换一个视角看世界:前端-视觉里程计之对极几何

1. 对极几何是立体视觉中的几何关系。

其中有以下概念:对极点(Pole):对极点是极坐标系中的一个点,用于描述一条直线的对应点。对于一条直线上的所有点,它们在对极坐标系中的对极点是相同的。对极点在极坐标系中通常表示为 (r, θ),其中 r 是对极点到原点的距离,θ 是对极点与某一固定线段的夹角。

对极线(Polar line):对极线是与一个点对应的一组直线。对于一个点在极坐标系中的对极点,通过这个点可以画出无数条过该点的直线,而这些直线在另一个极坐标系中的对应点所形成的曲线就是对极线。对极线上的每一点都与原始点的对极点对应。

对极平面(Polar plane):对极平面是包含所有对极线的平面。对于一个给定的点集合,通过每个点都可以画出一条对极线,所有这些对极线所在的平面就是对极平面。对极平面在极坐标系中通常用于描述两个不同的投影图形之间的关系。

2. 对极约束(Epipolar constraint)是指在极几何中的对极线上的点与其对应点之间存在的几何关系。根据对极约束,对极线上的点和其对应点之间的连线必定会通过两个对极点。这个约束条件可以用于计算和推断在不同视角下的图像之间的对应关系,例如在立体视觉中用于三维重构和深度估计等应用。

假设有两个相机,它们分别捕捉到的图像为图像1和图像2。我们用 P1 表示图像1中的一个点,P2 表示图像2中与 P1 对应的点。

对极约束可以表示为:P2^T * F * P1 = 0其中,F 是一个 3x3 的矩阵,称为基础矩阵。

3. 八点法(Eight-point algorithm)是一种常用于计算对极约束的方法。

重要步骤:...

对于每对匹配点(P1,P2),将它们的坐标表示为齐次坐标形式(x,y,1)。然后,将每对匹配点的齐次坐标组合成一个线性方程:
[x1 * x2, x1 * y2, x1, y1 * x2, y1 * y2, y1, x2, y2, 1]对于所有的匹配点对,形成一个线性方程组,可以表示为A * f = 0,其中 A 是一个 N x 9 的矩阵,每行对应一个匹配点对的线性方程,f 是一个 9x1 的矩阵,表示基础矩阵的参数。

通过对线性方程组进行奇异值分解(SVD),可以求解出 A * f = 0 的最小二乘解。奇异值分解得到的解 f 是一个9x1的向量,但基础矩阵是一个3x3的矩阵,因此需要将 f 重构为3x3的基础矩阵 F。

...

4.本质矩阵是在立体视觉中用于恢复相机运动的重要工具。它描述了两个相机之间的几何关系,并可以通过分解来恢复相机的旋转和平移运动。下面是使用本质矩阵恢复相机运动的基本步骤:

数据准备:需要两个相机的内参数矩阵(相机矩阵)K1 和 K2,以及一组匹配点对的像素坐标 P1 和 P2。这些匹配点对应于两个相机拍摄的图像中的特征点。

计算本质矩阵:使用至少8对匹配点对的像素坐标 P1 和 P2,利用八点法(Eight-point algorithm)计算出本质矩阵 E。

矩阵分解:通过对本质矩阵E 进行奇异值分解(SVD),可以将 E 分解为 E = U * S * V^T,其中 U 和 V 是正交矩阵,S 是对角矩阵。在这个分解中,S 的对角元素为 (s, s, 0),其中 s 是奇异值。恢复旋转和平移:根据矩阵分解的结果,可以得到四个可能的解,即旋转矩阵R 和平移向量 t 的组合。这些解分别为:R = U * W * V^T, t = ±u3,其中 W 是一个特殊的反对称矩阵,u3 是矩阵 U 的第三列。

选择正确的解:在四个解中,只有一个解对应于实际的相机运动。可以通过对解进行一些约束条件的检查来选择正确的解。常用的约束条件包括前方约束(即特征点的深度为正)和相机前后关系(即相机的运动方向一致)等。
反投影:通过使用相机内参数矩阵 K1 和 K2,可以将像素坐标 P1 和 P2 转换为相机坐标系下的三维点坐标。这可以通过 P1 = K1^(-1) * p1 和 P2 = K2^(-1) * p2 计算得到。

5.单应矩阵,也称为单应性矩阵或透视变换矩阵,是在计算机视觉中用于描述两个平面之间的投影关系的矩阵。它可以将一个平面上的点映射到另一个平面上,通常用于图像对齐、图像拼接和相机标定等应用。
假设有两个平面,分别为平面1和平面2,我们有一组对应点,其中平面1上的点 P1(x1, y1) 对应于平面2上的点 P2(x2, y2)。单应矩阵 H 的计算步骤如下:

数据准备:收集到一组对应点的坐标,包括平面1上的点 P1 和平面2上的点 P2。
构建线性方程组:对于每对对应点(P1,P2),根据单应性约束,可以得到下面的线性方程:
[x1, y1, 1, 0, 0, 0, -x1 * x2, -y1 * x2, -x2]
[0, 0, 0, x1, y1, 1, -x1 * y2, -y1 * y2, -y2]
对于所有的对应点对,形成一个线性方程组,可以表示为 A * h = 0,其中 A 是一个 2N x 9 的矩阵,每两行对应一个对应点对的线性方程,h 是一个 9x1 的矩阵,表示单应矩阵的参数。
解算单应矩阵:通过对线性方程组进行奇异值分解(SVD),可以求解出 A * h = 0 的最小二乘解。奇异值分解得到的解 h 是一个9x1的向量,但单应矩阵是一个3x3的矩阵,因此需要将 h 重构为3x3的单应矩阵 H。
归一化:通常,为了提高数值稳定性,还可以对单应矩阵进行归一化处理。一种常用的方法是通过对矩阵 H 进行尺度归一化,使得 H(3, 3) = 1。
返回单应矩阵:最终得到的归一化单应矩阵即为估计出的单应矩阵。

6.用单应矩阵恢复相机运动可以通过奇异值分解的方法。分解的结果会有八组解,此时会把八组解都进行验证,取重投影误差最小的一组,作为最优解。 


 7. 通过相机运动估计三角测量,可以将特征点的像素坐标转换为相机坐标系下的三维坐标。 

相机运动估计:使用某种方法(如本质矩阵或单应矩阵)估计相机的旋转矩阵R 和平移向量 t。

三角测量:对于每个特征点的像素坐标对(P1, P2),通过三角测量计算得到特征点在相机坐标系下的三维坐标。

a. 将像素坐标 P1 和 P2 分别通过相机内参数矩阵 K1 和 K2 进行反投影,得到归一化平面上的坐标。
P1_normalized = K1^(-1) * P1
P2_normalized = K2^(-1) * P2

b. 使用已知的相机运动(旋转矩阵 R 和平移向量 t)将 P1_normalized 和 P2_normalized 转换为相机坐标系下的坐标。
P1_camera = R * P1_normalized - t
P2_camera = R * P2_normalized - t

c. 通过三角测量方法(如最小二乘法或直接线性变换)估计特征点在相机坐标系下的三维坐标 P3D。
P3D = Triangulate(P1_camera, P2_camera)重复上述步骤,对所有的特征点进行三角测量,得到它们在相机坐标系下的三维坐标。
 

思考: 

1.本质矩阵的自由度为多少?

本质矩阵是一个3x3的矩阵,秩为2,特征值为(α, α, 0),其中α是一个非零实数。
因此它有5个自由度。这意味着对于给定的两个相机,通过至少5个对应点的像素坐标,就可以计算出唯一的本质矩阵。

2.直接法求本质矩阵的过程涉及求解齐次线性方程,而对于齐次线性方程的解,要么只有零解,要么有无穷多个解,这里取哪一个解呢?
        如果齐次线性方程组只有零解,即所有未知变量均为零,那么在直接法中,我们会得到零本质矩阵。这种情况通常表示两个相机之间没有有效的几何关系,或者输入数据存在问题。
        对于齐次线性方程组存在无穷多个解的情况,我们需要选择一个特定的解。在这种情况下,我们可以通过奇异值分解(SVD)的性质来选择解。本质矩阵的性质要求其奇异值为(α, α, 0),其中α是一个非零实数。因此,我们可以选择解中的一个非零奇异向量与这些奇异值对应,以获得非零解。
        总之,如果齐次线性方程组只有零解,那么得到的本质矩阵将为零矩阵。如果齐次线性方程组有无穷多个解,我们可以选择一个非零解,通常选择与本质矩阵的奇异值对应的非零奇异向量作为解的表示。选择哪一个非零解可能会产生微小的差异,但不会影响本质矩阵的基本性质和应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值