相机外参和内参矩阵

相机与变换

一、内参与外参概念

在计算机视觉中,特别是在相机标定和立体视觉领域,内参(Intrinsic Parameters)和外参(Extrinsic Parameters)是非常重要的概念。它们与相机的几何属性和姿态有关。

  • 内参(Intrinsic Parameters): 内参是描述相机内部属性的参数,包括焦距、主点(光学中心)坐标、畸变系数等。内参通常在相机标定时确定,因为它们通常对于特定相机型号是固定的,不随时间变化。一旦相机内参被确定,它们在相机的使用过程中通常是保持不变的。
  • 外参(Extrinsic Parameters): 外参是描述相机在世界坐标系中的位置和姿态的参数,通常包括旋转矩阵和平移向量。外参在不同的相机位置或拍摄时刻可能会发生变化。例如,在立体视觉中,如果有两个相机,那么它们的相对位置和方向会在每次移动相机时发生变化,从而导致外参的变化。如果相机不发生位置和方向的变化,比如相机固定在一个固定位置,那么外参在很长一段时间内可能保持不变。然而,如果相机的位置或方向发生变化,例如移动相机或更改拍摄角度,外参会随之变化

二、四个坐标系

四个坐标系的意义,世界坐标系(参考坐标系)摄像机坐标系图像物理坐标系像素坐标系

  1. 世界坐标系就是物体在真实世界中的坐标,比如黑白棋盘格的世界坐标系原点定在第一个棋盘格的顶点,\(X_w\)\(Y_w\)\(Z_w\)互相垂直,\(Z_w\)方向就是垂直于棋盘格面板的方向。可见世界坐标系是随着物体的大小和位置变化的,单位是长度单位。只要棋盘格的大小决定了,无论板子怎么动,棋盘格角点坐标一般就不再变动(因为是相对于世界坐标系原点的位置不变),且认为是\(Z_w=0\)
  2. 相机坐标系以光心为原点,以平行于图像的\(x\)\(y\)方向为\(X_c\)轴和\(Y_c\)轴,\(Z_c\)轴和光轴平行,\(X_c\)\(Y_c\)\(Z_c\)互相垂直,单位是长度单位。
  3. 图像物理坐标系以主光轴和图像平面交点为坐标原点(一般为图像中心),\(x\)\(y\)方向如图所示,单位是长度单位。
  4. 图像像素坐标系以图像的左上顶点为坐标原点,\(u\)\(v\)方向平行于\(x\)\(y\)方向,单位是以像素计。

相机成像过程一般涉及到四个坐标系的变换,变换关系为:\((U,V,W)\)是世界坐标系,经过刚体变换(如:旋转、平移)后变为了相机坐标系,再次经过透视投影转变为了图像坐标系,最后经仿射变换转换为了像素坐标系\((u,v)\)

我们考虑最简单的小孔成像模型:

为了分析的方便,经常将成像平面沿小孔(光心)对称处理,使图像不再倒立,如图中蓝色实线所指平面。

三、相机外参

首先,处于真实世界中的物体都有一个默认坐标系,称为世界坐标系\(O-X_{w}Y_{w}Z_{w}\)。不同的相机可能会从不同的角度进行拍摄。即不同的\(\phi\)\(\theta\) (\(\phi \in [0,2\pi]\)\(\theta \in [-\frac{\pi}{2}, \frac{\pi}{2}]\))以及此时小孔位置的三维坐标。即我们可以通过绕\(Z_{w}\)轴和绕\(X_{w}\)轴旋转坐标系、然后再对坐标系进行平移,来将世界坐标系上的一个点转移到相机坐标系下的表示。假设此时相机的位置是\((x,y,z)\),那么可以先绕\(X_{w}\)轴旋转\(\phi\),再绕\(Z_{w}\)轴旋转\(\theta\):

\[\begin{gathered} R_\theta=\begin{bmatrix}\cos\theta&-\sin\theta&0\\\sin\theta&\cos\theta&0\\0&0&1\end{bmatrix} , \qquad R_{\phi}=\begin{bmatrix}1&0&0\\0&\cos\phi&-\sin\phi\\0&\sin\phi&\cos\phi\end{bmatrix} \\ R=R_\theta R_\phi=\begin{bmatrix}\cos\theta&-\sin\theta\cos\phi&\sin\theta\sin\phi\\\sin\theta&\cos\theta\cos\phi&-\cos\theta\sin\phi\\0&\sin\phi&\cos\phi\end{bmatrix} \end{gathered} \]

同时,平移向量可以表示为\(T=[x,y,z]\),那么我们可以通过齐次坐标构造一个位姿矩阵\(C\):

\[C=\begin{bmatrix}\mathop{R}\limits_{3 \times 3 }&\mathop{T}\limits_{3\times1}\\\mathbf{0}&1\end{bmatrix} \]

矩阵\(C\)又叫相机外参。这样就能通过左乘\(C\)将世界坐标转换成相机坐标(w2c):

\[\begin{bmatrix}x_c\\y_c\\z_c\\1\end{bmatrix}=\begin{bmatrix}\mathop{R}\limits_{3 \times 3 }&\mathop{T}\limits_{3\times1}\\\mathbf{0}&1\end{bmatrix}\begin{bmatrix}x_w\\y_w\\z_w\\1\end{bmatrix} \]

四、相机内参

接着考虑上图ii的下面部分,假设相机坐标下的点\(P(x_c,y_c,z_c)\),焦距为\(f_c\),物理成像平面上的点\(p=(x,y)\)。则点\(P\)经过相机的光心\(O\)投影到物理成像平面为点\(p\)。由相似三角形可以得到:

\[\frac{x_c}x=\frac{y_c}y=\frac{z_c}{f_c} \]

写成矩阵形式为:

\[z_c\begin{bmatrix}x\\y\\1\end{bmatrix}=\begin{bmatrix}f_c&0&0\\0&f_c&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_c\\y_c\\z_c\end{bmatrix} \]

最后得到了投影平面上图像的坐标,但要注意,我们此时仍然在物理坐标系下。即如果现在这些字母都有个单位的话,那么它们应该是米或毫米。距离我们熟悉的图片还有一步:从图像坐标系变换至像素坐标系。为了实现这一点,我们进行了水平和竖直方向的伸缩变换以及平移变换,将坐标系的原点从光心转移到(通常时候)图像的左上角:

假设在物理成像表面固定着像素平面\(O-UV\),设\(p\)在像素平面坐标系上的坐标为\((u,v)\)。我们设像素坐标在\(U\)轴上缩放\(\alpha\)倍,在\(V\)轴上缩放了\(\beta\)倍。同时,原点平移了\((c_x,c_y)\)。可以得到\(p\)与像素坐标的关系:

\[u=\alpha x+c_x \]

\[v=\beta y+c_y \]

带入\(P(x_c,y_c,z_c)\)\(p=(x,y)\)的关系可得:

\[u=\alpha f_c \frac{x_c}{z_c}+c_x=f_x\frac{x_c}{z_c}+c_x \]

\[v=\beta f_c \frac{y_c}{z_c}+c_y=f_y\frac{y_c}{z_c} + c_y \]

其中,我们用\(f_x\)替换了\(\alpha f_c\)\(f_y\)替换了\(\beta f_c\)\(f_x,f_y\)的单位是像素。

用齐次坐标,写为矩阵形式:

\[\begin{pmatrix}u\\v\\1\end{pmatrix}=\frac{1}{z_c}\begin{pmatrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{pmatrix}\begin{pmatrix}x_c\\y_c\\z_c\end{pmatrix}=\frac{1}{z_c}\mathbf{K}P \]

这里\(c_x\)一般近似为\(W/2\)\(c_y\)一般近似为\(H/2\)。所以整个的这个变换过程可以整理成:

\[\begin{aligned} z_{c}\begin{bmatrix}u\\v\\1\end{bmatrix} &= \begin{bmatrix}\frac{1}{dx} & 0 & c_x\\0 & \frac{1}{dy} & c_y\\0 & 0 & 1\end{bmatrix}\begin{bmatrix}f_c & 0 & 0 & 0\\0 & f_c & 0 & 0\\0 & 0 & 1 & 0\end{bmatrix}\begin{bmatrix}R_{3 \times 3} & T_{3\times1}\\0 & 1\end{bmatrix}\begin{bmatrix}x_w\\y_w\\z_w\\1\end{bmatrix} \\ &= \begin{bmatrix}f_x & 0 & c_x & 0\\0 & f_y & c_y & 0\\0 & 0 & 1 & 0\end{bmatrix}\begin{bmatrix}R_{3 \times 3} & T_{3\times1}\\0 & 1\end{bmatrix}\begin{bmatrix}x_w\\y_w\\z_w\\1\end{bmatrix} \\ &= \begin{bmatrix}f_x & 0 & c_x & 0\\0 & f_y & c_y & 0\\0 & 0 & 1 & 0\end{bmatrix}\begin{bmatrix}x_c\\y_c\\z_c\\1\end{bmatrix} \\ &= \left[\begin{array}{ccc|c}f_x & 0 & c_x & 0\\0 & f_y & c_y & 0\\0 & 0 & 1 & 0\end{array}\right] \begin{bmatrix}x_c\\y_c\\z_c\\1\end{bmatrix} \end{aligned} \]

其中,\(f_x=\frac{f_c}{\mathrm{d}x},f_y=\frac {f_c}{\mathrm{d}y}\)。表示将物理坐标上的焦距映射进像素尺寸\((dx,dy)\)中的缩放,然而其实大多数情况下其实都有\(dx=dy\),即像素是一个正方形。得到的第一个矩阵简记为\(K\),也叫相机内参。获取相机内参和外参的方法即相机标定。

posted @ 2024-06-12 18:25  Serfeliz  阅读(1693)  评论(0编辑  收藏  举报