双目视觉中,在有标定板的条件下,如何获得相机之间的相对旋转和平移?如何推导
时间: 2024-05-20 13:15:23 浏览: 143
在双目视觉中,我们需要获得相机之间的相对旋转和平移关系,才能进行深度计算和三维重建等操作。一种常用的方法是使用标定板来获得相机的内参和外参,进而计算相对旋转和平移。
以下是推导过程:
设左右相机分别为 $L$ 和 $R$,它们的投影矩阵(即内参和外参的组合)分别为 $P_L$ 和 $P_R$。
假设标定板的平面与左相机坐标系重合,则我们可以在左相机图像上检测出标定板的角点,并通过标定板的实际尺寸计算出其在左相机坐标系下的三维坐标,记为 $X_L$。
同样地,我们在右相机图像上也可以检测出标定板的角点,并计算出其在右相机坐标系下的三维坐标,记为 $X_R$。
由于标定板的三维坐标是已知的,我们可以将 $X_L$ 和 $X_R$ 分别投影到左右相机的图像平面上,得到它们在图像上的对应点,分别记为 $x_L$ 和 $x_R$。
因为标定板平面与左相机坐标系重合,所以 $X_L$ 的坐标可以直接表示为 $(X, Y, 0, 1)$,其中 $X$ 和 $Y$ 分别为其在标定板坐标系下的横纵坐标。同样地,$X_R$ 的坐标可以表示为 $(X - T_x, Y - T_y, -T_z, 1)$,其中 $(T_x, T_y, T_z)$ 表示左相机坐标系相对于右相机坐标系的平移向量。
由于标定板的三维坐标是已知的,我们可以列出以下两个方程:
$$P_L X_L = x_L$$
$$P_R X_R = x_R$$
将 $X_L$ 和 $X_R$ 的坐标代入上述方程,得到:
$$P_L \begin{bmatrix} X \\ Y \\ 0 \\ 1 \end{bmatrix} = \begin{bmatrix} u_L \\ v_L \\ 1 \end{bmatrix}$$
$$P_R \begin{bmatrix} X - T_x \\ Y - T_y \\ -T_z \\ 1 \end{bmatrix} = \begin{bmatrix} u_R \\ v_R \\ 1 \end{bmatrix}$$
其中 $(u_L, v_L)$ 和 $(u_R, v_R)$ 分别表示 $x_L$ 和 $x_R$ 在左右相机图像上的像素坐标。
将投影矩阵 $P_L$ 和 $P_R$ 的分解形式带入上述方程,可以得到以下形式:
$$\begin{bmatrix} u_L \\ v_L \\ 1 \end{bmatrix} = K_L \begin{bmatrix} R_L & -R_L t_L \\ 0^T & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ 0 \\ 1 \end{bmatrix}$$
$$\begin{bmatrix} u_R \\ v_R \\ 1 \end{bmatrix} = K_R \begin{bmatrix} R_R & -R_R t_R \\ 0^T & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ 0 \\ 1 \end{bmatrix}$$
其中 $K_L$ 和 $K_R$ 分别表示左右相机的内参矩阵,$R_L$ 和 $R_R$ 分别表示左右相机的旋转矩阵,$t_L$ 和 $t_R$ 分别表示左右相机的平移向量。
我们可以将上述方程写成以下形式:
$$\begin{bmatrix} u_L \\ v_L \end{bmatrix} = \begin{bmatrix} f_L & 0 & c_{uL} & 0 \\ 0 & f_L & c_{vL} & 0 \end{bmatrix} \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_{xL} \\ r_{21} & r_{22} & r_{23} & t_{yL} \\ r_{31} & r_{32} & r_{33} & t_{zL} \end{bmatrix} \begin{bmatrix} X \\ Y \\ 0 \\ 1 \end{bmatrix}$$
$$\begin{bmatrix} u_R \\ v_R \end{bmatrix} = \begin{bmatrix} f_R & 0 & c_{uR} & 0 \\ 0 & f_R & c_{vR} & 0 \end{bmatrix} \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_{xR} \\ r_{21} & r_{22} & r_{23} & t_{yR} \\ r_{31} & r_{32} & r_{33} & t_{zR} \end{bmatrix} \begin{bmatrix} X \\ Y \\ 0 \\ 1 \end{bmatrix}$$
其中 $f_L$ 和 $f_R$ 分别表示左右相机的焦距,$(c_{uL}, c_{vL})$ 和 $(c_{uR}, c_{vR})$ 分别表示左右相机的主点坐标。
我们可以将上述方程进一步简化,得到以下形式:
$$u_L = f_L \frac{r_{11}X + r_{12}Y + r_{13}}{r_{31}X + r_{32}Y + r_{33}} + c_{uL}$$
$$v_L = f_L \frac{r_{21}X + r_{22}Y + r_{23}}{r_{31}X + r_{32}Y + r_{33}} + c_{vL}$$
$$u_R = f_R \frac{r_{11}X + r_{12}Y + r_{13} - t_{xR}}{r_{31}X + r_{32}Y + r_{33} - t_{zR}} + c_{uR}$$
$$v_R = f_R \frac{r_{21}X + r_{22}Y + r_{23} - t_{yR}}{r_{31}X + r_{32}Y + r_{33} - t_{zR}} + c_{vR}$$
我们可以将这个方程组表示为向量形式:
$$\begin{bmatrix} u_L \\ v_L \\ u_R \\ v_R \end{bmatrix} = \begin{bmatrix} X \\ Y \end{bmatrix}^T \begin{bmatrix} \alpha_L \\ \beta_L \\ \alpha_R \\ \beta_R \end{bmatrix}$$
其中 $\alpha_L, \beta_L, \alpha_R, \beta_R$ 分别表示投影矩阵中的参数。
由于我们可以通过角点检测得到一些已知的像素点和对应的三维坐标,因此可以使用最小二乘法求解出相机之间的相对旋转和平移关系,从而得到左相机坐标系相对于右相机坐标系的平移向量 $(T_x, T_y, T_z)$ 和旋转矩阵 $R$。
阅读全文