对极几何,从本质上理解应该是很简单的。

理解向量的内积(点积)和外积(叉积)是掌握对极几何的基础。

向量内积(点积)

定义: 向量的内积(或点积)是一种向量运算,结果是一个标量。对于两个向量 $ \mathbf{a} $ 和 $ \mathbf{b} $,它们的点积定义为: $$ \mathbf{a} \cdot \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos(\theta) $$ 其中 $ |\mathbf{a}| $ 和 $ |\mathbf{b}| $ 分别是向量的长度,$ \theta $ 是两个向量之间的角度。

几何意义: 点积的几何意义是衡量两个向量在相同方向上的相似程度。点积的结果反映了一个向量在另一个向量方向上的投影长度与另一个向量长度的乘积。当两个向量正交时(即 $ \theta = 90^\circ $),它们的点积为零。

数学推理: 在坐标形式中,如果有 $ \mathbf{a} = (a_1, a_2, a_3) $ 和 $ \mathbf{b} = (b_1, b_2, b_3) $,则点积为: $$ \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + a_3b_3 $$ 这是通过将相应的坐标相乘然后求和来计算的。

向量外积(叉积)

定义: 向量的外积(或叉积)是一种向量运算,结果是一个向量。对于两个向量 $ \mathbf{a} $ 和 $ \mathbf{b} $,它们的叉积定义为: $$ \mathbf{a} \times \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \sin(\theta) \mathbf{n} $$ 其中 $ \mathbf{n} $ 是垂直于向量 $ \mathbf{a} $ 和 $ \mathbf{b} $ 所在平面的单位向量,方向由右手规则确定(即当你的右手的指向从 $ \mathbf{a} $ 转向 $ \mathbf{b} $ 时,你的拇指指向 $ \mathbf{n} $)。

几何意义: 叉积的几何意义是创建一个正交于原始两个向量的新向量,其长度等于原始向量构成的平行四边形的面积。这使得叉积非常适合用来计算面积、体积以及定义旋转轴。

数学推理: 在坐标形式中,如果有 $ \mathbf{a} = (a_1, a_2, a_3) $ 和 $ \mathbf{b} = (b_1, b_2, b_3) $,则叉积为: $$ \mathbf{a} \times \mathbf{b} = (a_2b_3 - a_3b_2, a_3b_1 - a_1b_3, a_1b_2 - a_2b_1) $$ 这是通过计算每个坐标分量的二维行列式来确定的,其中每个分量的计算排除了它所在的行和列。

可视化

  1. 内积:想象两个向量从同一点出发,内积可以视为其中一个向量在另一个向量方向上的影子长度乘以另一个向量的长度。

  2. 外积:想象两个向量形成一个平行四边形,叉积向量的方向垂直于这个平行四边形,长度等于其面积

在对极几何中,叉积用于计算极线,点积用于验证点是否在极线上。这种方式连接了视觉几何和代数表示,是理解和应用立体视觉核心原理的基础。

解释并推导如何从单应性矩阵 $ H $ 和一对匹配的点 $ p_1 $ 和 $ p_2 $ 的关系中导出具体的方程。

单应矩阵 $ H $ 和点的映射

单应矩阵 $ H $ 是一个 3x3 矩阵,用于将一幅图像中的点 $ p_1 $ 映射到另一幅图像中的点 $ p_2 $,并且这种映射考虑了旋转、平移、缩放和透视变形。这种映射在齐次坐标中表示为:

$$ p_2 \sim H p_1 $$

其中 $ p_1 = (x_1, y_1, 1)^T $ 和 $ p_2 = (x_2, y_2, 1)^T $ 是两个图像中对应点的齐次坐标。

推导过程

如果单应矩阵 $ H $ 表示为: $$ H = \begin{bmatrix} h_{11} & h_{12} & h_{13} \ h_{21} & h_{22} & h_{23} \ h_{31} & h_{32} & h_{33} \end{bmatrix} $$

那么,应用单应矩阵到点 $ p_1 $ 上,我们得到: $$ \begin{bmatrix} x_2’ \ y_2’ \ w_2' \end{bmatrix} = H \begin{bmatrix} x_1 \ y_1 \ 1 \end{bmatrix} = \begin{bmatrix} h_{11}x_1 + h_{12}y_1 + h_{13} \ h_{21}x_1 + h_{22}y_1 + h_{23} \ h_{31}x_1 + h_{32}y_1 + h_{33} \end{bmatrix} $$

在齐次坐标中,实际的像素坐标 $ (x_2, y_2) $ 需要通过除以第三个坐标 $ w_2’ $ 来归一化: $$ x_2 = \frac{x_2’}{w_2’} = \frac{h_{11}x_1 + h_{12}y_1 + h_{13}}{h_{31}x_1 + h_{32}y_1 + h_{33}} $$ $$ y_2 = \frac{y_2’}{w_2’} = \frac{h_{21}x_1 + h_{22}y_1 + h_{23}}{h_{31}x_1 + h_{32}y_1 + h_{33}} $$

构建线性方程

要从这些关系中构建可解的线性方程,我们通常在实际操作中使用如下的线性方程形式,通过消除分母(即乘以分母),避免直接处理非线性项: $$ x_2 (h_{31}x_1 + h_{32}y_1 + h_{33}) = h_{11}x_1 + h_{12}y_1 + h_{13} $$ $$ y_2 (h_{31}x_1 + h_{32}y_1 + h_{33}) = h_{21}x_1 + h_{22}y_1 + h_{23} $$

这些方程允许我们将问题转化为线性系统,从而使用最小二乘法等方法求解 $ H $ 矩阵的各个元素,通常需要至少4对点来提供足够的方程以解决单应性矩阵中的8个自由度问题。

当然,我可以帮您梳理和理解投影矩阵的概念和数学推导过程。在计算机视觉和图形学中,投影矩阵用于将三维空间中的点转换到二维图像平面上。

投影矩阵的基础

投影矩阵通常用于描述三维点如何映射到二维视图中,这涉及到两种主要的投影方式:正射投影和透视投影。

  1. 正射投影(Orthographic Projection):

    • 在正射投影中,视点无限远,投影光线平行,因此不考虑深度信息的变化。
    • 正射投影矩阵忽略了Z轴的影响,仅仅是一个简化的2D投影。
  2. 透视投影(Perspective Projection):

    • 在透视投影中,三维空间中的点根据其深度(距离观察点的远近)在图像平面上有不同的缩放,模拟了人眼或相机镜头的视觉效果。
    • 透视投影矩阵考虑了点的深度,使得远处的物体在图像平面上显得更小。

透视投影矩阵的数学推导

透视投影的数学模型基于简化的相机模型,通常使用针孔相机模型(Pinhole Camera Model)来描述。在这个模型中,一个三维点 $ P = (X, Y, Z) $ 被映射到二维图像平面上的点 $ p = (x, y) $。

步骤1: 相机内参矩阵

相机的内参矩阵 $ K $ 包含了焦距和主点(图像中心)坐标: $$ K = \begin{bmatrix} f_x & 0 & c_x \ 0 & f_y & c_y \ 0 & 0 & 1 \end{bmatrix} $$ 其中 $ f_x, f_y $ 是相机在x和y方向上的焦距(以像素为单位),$ c_x, c_y $ 是图像中心的坐标。

步骤2: 三维到二维的映射

在针孔相机模型中,三维点 $ P $ 到图像平面的映射可以通过以下公式表示: $$ x = f_x \frac{X}{Z} + c_x $$ $$ y = f_y \frac{Y}{Z} + c_y $$

步骤3: 齐次坐标表示

使用齐次坐标,上面的映射可以表示为矩阵乘法: $$ \begin{bmatrix} x \ y \ 1 \end{bmatrix} = \frac{1}{Z} K \begin{bmatrix} X \ Y \ Z \end{bmatrix} $$ 这里 $ \frac{1}{Z} $ 表示深度的倒数,确保了透视投影中深度的影响。

步骤4: 综合外参

考虑到相机的位置和方向,外参矩阵 $ [R | t] $ 描述了从世界坐标系到相机坐标系的旋转和平移,完整的投影矩阵 $ P $ 为: $$ P = K [R | t] $$ 这个矩阵综合了内参和外参,描述了从世界坐标系到图像平面的完整变换。

结论

投影矩阵 $ P $ 将三维空间中的点通过透视变换映

射到二维图像平面上,这一过程考虑了相机的焦距、图像中心、旋转和平移。这是计算机视觉和图形学中核心的数学工具,用于场景的重建、增强现实、3D渲染等多种应用。

Bundle Adjustment (BA) 和重投影误差之间存在直接的关联,但它们代表了不同的概念。简单来说,BA 是一个优化过程,而重投影误差是这个过程中需要最小化的一个关键量。下面详细解释这两者的关系和区别:

重投影误差

重投影误差是在三维计算机视觉中测量的一个误差,它描述的是观测到的图像点与通过相机模型和估计的三维场景点重投影回图像平面上的点之间的差异。这种差异是通过欧氏距离(通常是像素单位)来度量的。具体来说,如果你有一个三维点的估计位置和相机的位置及其参数,你可以通过相机的投影模型计算出这个三维点在图像上的预期位置。重投影误差就是这个计算出的位置与实际观测到的位置之间的偏差。

数学上,如果 $ P $ 是三维点,$ x $ 是对应的图像观测点,相机参数为 $ \theta $,则重投影的点为 $ \pi(P, \theta) $(其中 $ \pi $ 是投影函数),重投影误差 $ e $ 可以表达为:

$$ e = | x - \pi(P, \theta) | $$

这里的范数通常是 L2 范数,即欧氏距离。

Bundle Adjustment (BA)

Bundle Adjustment 是一个全局优化过程,用于同时调整多个三维点位置和多个相机的位置及其参数,以便最小化所有观测中的重投影误差。BA 通常被建模为一个非线性最小二乘问题,目标是找到能够最小化所有重投影误差的三维点坐标和相机参数。

如果你有多个相机观测和很多三维点,BA 会调整这些点和相机的参数,使得通过所有相机模型重投影这些点时产生的误差总和最小。因此,BA 的数学模型可以表达为:

$$ \min_{P_i, \theta_j} \sum_{i,j} | x_{ij} - \pi(P_i, \theta_j) |^2 $$

这里 $ P_i $ 表示三维点集,$ \theta_j $ 表示相机参数集,$ x_{ij} $ 是三维点 $ P_i $ 在相机 $ j $ 中的观测位置。

总结

总之,重投影误差是衡量单个三维点和相机配置下的误差量,而 BA 是一个优化过程,它通过调整所有的三维点位置和相机参数来最小化整个系统的总重投影误差。BA 在各种应用中都非常重要,特别是在需要精确重建场景和相机轨迹的场景中,如高精度地图制作、机器人导航、增强现实等。