The Pinhole Camera

目录

Camera Calibration(相机标定)

 3D Depth Estimation

Homography(单应性)


上图显示了一个投影中心为 O 且主轴平行于 Z 轴的相机。 图像平面位于焦点处,因此距 O 的焦距为 f。3D 点 P = (X; Y;Z) 在坐标 P_{c} = (u; v) 处的相机图像平面上成像。 我们将首先找到将3D P 射到 2DP_{c}的相机校准矩阵 C。 正如我们之前所见,我们可以使用相似三角形找到 P_{c}

                                               \large \frac{f}{Z} =\frac{u}{X} = \frac{v}{Y}      \large u=\frac{fX}{Z}       \large v = \frac{fY}{Z}

 使用P_{c} 的齐次坐标,我们可以将其写为

                                                          \large \begin{pmatrix} u\\ v\\ w \end{pmatrix} = \begin{pmatrix} f & 0& 0\\ 0 & f & 0\\ 0 & 0&1 \end{pmatrix} \begin{pmatrix} X\\ Y\\ Z \end{pmatrix}

  \large {P_{c}}=(u,v,w) = (\frac{fX}{Z}, \frac{fY}{Z}, 1),P 仍然不在齐次坐标系中

 接下来,如果 2D 图像坐标系的原点与 Z 轴与图像平面相交的位置不重合,我们需要将 Pc 平移到所需的原点。平移定义为\large ({t_{w}}, t_{v}), 则u,v变成

                                                   \large (u,v) = (\frac{fX}{Z} + t_{w}, \frac{fY}{Z}+ t_{v})

所以写成矩阵的形式可以变成:

                                                       \large \begin{pmatrix} u\\ v\\ w \end{pmatrix} = \begin{pmatrix} f & 0& t_{u}\\ 0 & f & t_{v}\\ 0 & 0&1 \end{pmatrix} \begin{pmatrix} X\\ Y\\ Z \end{pmatrix}

现在,在上式中 中,Pc 以英寸为单位。 由于这是一个相机图像,我们需要用英寸来表示它。为此,我们需要知道相机的分辨率(以像素/英寸为单位。如果像素是正方形的,则摄像机图像坐标的 u 和 v 方向的分辨率将相同。 然而,对于更一般的情况,我们假设矩形像素在 u 和 v 方向上分别具有 mu 和 mv 像素/英寸的分辨率。 因此,要以像素为单位测量 \large P_{c},其 u 和 v 坐标应分别乘以 mu 和 mv。 因此

                                     \large (u,v) = (m_{u} \frac{fX}{Z} +m_{u} t_{w},m_{v}\frac{fY}{Z}+ m_{v}t_{v})

可以表达为矩阵的形式:

                        \begin{pmatrix} u\\ v\\ w \end{pmatrix} = \begin{pmatrix} m_{u}f & 0&m_{u} t_{u}\\ 0 & m_{v}f &m_{v} t_{v}\\ 0 & 0&1 \end{pmatrix} \begin{pmatrix} X\\ Y\\ Z \end{pmatrix} = \begin{pmatrix} \alpha _{u} & 0& u_{o}\\ 0 & \alpha _{v}&v_{o}\\ 0 & 0&1 \end{pmatrix}P=KP

K 仅取决于相机的内在参数,如焦距、主轴,因此定义了相机的内在参数。 有时 K 也有一个偏斜参数 s,K由下式给出

                                                                K=\begin{pmatrix} \alpha _{u} & s& u_{o}\\ 0 & \alpha _{v}&v_{o}\\ 0 & 0&1 \end{pmatrix}
这通常会出现图像坐标轴 u 和 v 彼此不正交。 请注意,K 是一个上三角3*3矩阵.这通常称为相机内参矩阵。现在,如果相机的投影中心不在 (0; 0; 0) 并且以任意方式定向(不一定 z 垂直于图像平面),那么 我们需要旋转和平移以使相机坐标系与图 1 中的配置一致。首先要让相机平移到 XYZ 坐标原点(T_{x}, T_{y}, T_{z} ) 给出。 让用于使主轴与 Z 轴重合的旋转由 3\times 3 旋转矩阵R给出。然后通过首先应用平移然后旋转形成的矩阵由3\times 4矩阵给出

                                                                             E = (R|RT)

称为外参数矩阵。 因此,完整的相机变换现在可以表示为

                                                           K(R|RT) = (KR|KRT)=KR(I|T)

所以

                                                                 {P_{c}} = KR(I|T)P = CP

C 是一个3\times 4 矩阵,通常称为完整的相机校准矩阵。 请注意,由于 C 是 3\times 4 我们需要 P 在 4D 齐次坐标中,而由 CP 导出的 P_{c}将在 3D 齐次坐标中。 通过将 Pc 的前两个坐标除以第三个坐标,将获得投影在相机图像平面上的精确 2D 位置。

Camera Calibration(相机标定)

        在这节中,我们将看到如何找到 C 以及如何将其分解以获取内部和外部参数。这里C是完整的完整的相机校准矩阵。给定C,我们知道

                                                       C= (KR|KRT)=(M|MT)

其中M=KR。给定C,我们可以找到 M,它是作为 C 的左3\times 3子矩阵。使用 RQ 分解将 M 分解为两个 3 3 矩阵M=AB,其中 A 是上三角,B是正交矩阵(即B^{^{T}}B=I)。 这个上三角形 A 对应于 KB 对应于旋转 R。让c_{4} 表示 C 的最后一列。从前面的等式:

                                                                            MT=c_{4}

                                                                            T =M^{^{-1}}c_{4}

因此,给定 C,我们可以通过这个过程找到内参和外参矩阵。 但是,现在下一个问题是,如何为任何通用相机找到 C? 为此,我们需要找到 3D 点与其在相机图像上的投影之间的对应关系。 如果我们知道3D 点P_{1}对应的相机图像坐标P_{c_{1}},那么

                                                                            P_{c_{1}}=CP_{1}

或者:

                                                                       \begin{pmatrix} u_{1}\\ v_{1}\\ w_{1} \end{pmatrix} = C\begin{pmatrix} X_{1}\\ Y_{1}\\ Z_{1}\\ 1 \end{pmatrix}

但是,请注意,我们正在检测的 2D 相机图像坐标是(\frac{u_{1}}{w_{1}},\frac{v_{1}}{w_{1}}) = (u_{1}^{'}, v_{1}^{'})

请注意,找到 C 意味着我们已经找到了 C 的所有 12 个未知量。因此,我们试图解决 12 个未知数。 设 C 的行由 r_{i} 给出,i=1,2,3. 因此

                                                                          C = \begin{pmatrix} r_{1}\\ r_{2}\\ r_{3} \end{pmatrix}

由于我们知道对应 P_{1}P_{c_{1}},我们知道

                                                                     u_{1}^{'}=\frac{u_{1}}{w_{1}}=\frac{r_{1} . P_{1}}{r_{3}.P_{1}}

                                                                      v_{1}^{'}=\frac{v_{1}}{w_{1}}=\frac{r_{2} . P_{1}}{r_{2}.P_{1}}

这给了我们两个线性方程:

                                                                  u_{1}^{'}(r_{3} . P_{1})-r_{1} . P_{1}=0

                                                                  v_{1}^{'}(r_{3} . P_{1})-r_{2} . P_{1}=0

 请注意,在这两个方程中,只有r_{1}r_{2}r_{3}的元素是未知数。 因此,我们发现每个 3D 到 2D 对应生成两个线性方程。 要解决 12 个未知数,我们至少需要 6 个这样的对应关系。 通常为了获得更好的精度,使用多于 6 个对应关系,并且使用奇异值分解(SVD)方法求解由此形成的线性方程组的超定系统以生成 C 的 12 个未知量。一般使用基准的图像处理方法确定对应关系。

 3D Depth Estimation

         现在我们将看到在给定 P_{c}C 的情况下,我们如何估计 3D点P 的确切位置。假设我们有一个 3D 点P_{1},其图像在相机上由矩阵C_{1}定义的由 P_{C_{1}} 给出。 点 P 在齐次坐标中表示为 (X,Y,Z,W)。 所以,我们知道

                                                              P_{C_{1}} = \begin{pmatrix} u_{1}\\ v_{1}\\ w_{1} \end{pmatrix} = C_{1}\begin{pmatrix} X\\ Y\\ Z\\ W \end{pmatrix}

再次注意,我们在相机图像中检测到的 2D 点具有坐标(\frac{u_{1}}{w_{1}},\frac{v_{1}}{w_{1}}) = (u_{1}^{'}, v_{1}^{'}),因此,校准矩阵C_{1}的行由下式给出r_{i}^{C_{1}},i=0,1,2,从上式,可以得到两个线性方程:

                                                                u_{1}^{'}(r_{3}^{C_{1}} . P_{1})-r_{1}^{C_{1}} . P_{1}=0

                                                                v_{1}^{'}(r_{3}^{C_{1}} . P_{1})-r_{2}^{C_{1}} . P_{1}=0

因此,我们可以从每个相机生成两个线性方程。 我们有 4 个未知数要由解决,X,Y,Z,W。 因此,我们至少需要两个相机(具有不同的校准矩阵C),并且我们需要在这个相机的图像上找到相同 3D 点 P对应图像平面点P_{C_{2}}.在两个不同的相机图像上找到相同 3d 点对应得像素点是一个难题(Finding the image of the same 3D points on two different cameras images is a hard problem.)。这就是人类需要两只眼睛来解决深度的原因。另外,请注意,这个数学只考虑了像视差这样的双目线索。 我们人类仍然可以用一只眼睛在一定程度上分辨深度的原因,是因为我们使用了几种动眼神经和单眼线索。 这些不适用于相机,因此无法使用单个相机进行深度估计。 当然,为了获得更高的精度,通常会使用两个以上的摄像机(称为立体装置),并使用奇异值分解来求解产生的超定线性方程。

Homography(单应性)

如果两个相机看到位于平面上的点,则无需经过显式相机校准即可轻松找到它们之间的关系。 这种关联两个相机的关系称为单应性。 图 2 说明了这种情况。 让我们假设一个点P_{\pi }位于平面\pi上。 让平面的法线由 N=(a,b,c) 定义。 因此平面方程公式aX+bY+cZ+d=0=>\begin{pmatrix} a& b& c & 1 \end{pmatrix} \begin{pmatrix} X\\ Y\\ Z\\ d \end{pmatrix} = 0,

矩阵由下式给出

                                                              \begin{pmatrix} N & 1 \end{pmatrix} .P =0

P是3D世界中任意一点。两个相机由校准矩阵定义C_{1}C_{2}C_{1}C_{2}的图像平面分别为P_{\pi }^{1}P_{\pi }^{2}

故:

                                                           P_{\pi }^{1} =\begin{pmatrix} u_{1}\\ v_{1}\\ w_{1} \end{pmatrix}=C_{1}P_{\pi }

                                                         P_{\pi }^{2} =\begin{pmatrix} u_{2}\\ v_{2}\\ w_{2} \end{pmatrix}=C_{2}P_{\pi }        

asd
图2 二个相机看到同一个场景的单应性

 这意味着在3D中,点 P_{\pi }位于射线( u_{1},v_{1} ,w_{1}, 0)^{T}上.然而,比例因子是未知的。 让这个未知的比例因子由\tau表示。 然后我们得到

                                                         P_{\pi } =\begin{pmatrix} u_{1}\\ v_{1}\\ w_{1}\\\tau \end{pmatrix}=\begin{pmatrix} P_{\pi }^{1} \\ \tau \end{pmatrix}

 又因为P_{\pi }位于平面\pi上,由\begin{pmatrix} N & 1 \end{pmatrix} .P =0\tau =-N.P_{\pi }^{1},因此

                                                          P_{\pi } =\begin{pmatrix} u_{1}\\ v_{1}\\ w_{1}\\\tau \end{pmatrix}=\begin{pmatrix} I\\ -N\end{pmatrix}P_{\pi }^{1}

注意,I是3\times 3矩阵,N是1\times 3矩阵,所以\begin{pmatrix} I\\ -N\end{pmatrix}4\times 3矩阵。令C_{2}=\begin{pmatrix} A_{2}& a_{2} \end{pmatrix},A_{2}3\times 3矩阵,a_{2}3\times 1向量。

                                                    P_{\pi }^{2} =C_{2}P_{\pi }=\begin{pmatrix} A_{2}& a_{2} \end{pmatrix}\begin{pmatrix} I\\ -N\end{pmatrix}P_{\pi }^{1}

请注意,第一个矩阵是3\times 4矩阵,第二个矩阵是4\times 3矩阵。 因此,这两者相乘将得到一个3\times 3 矩阵。 这就是我们所说的单应性 H。因此

                                                        P_{\pi }^{2} =(A_{2}- a_{2}N)P_{\pi }^{1}=HP_{\pi }^{1}

注意a_{2}3\times 1矩阵,N是1\times 3矩阵,因此,a_{2}N3\times 3矩阵,所以可以被A_{2}所减,得到单应矩阵。因此H是3\times 3矩阵,它将一个相机图像与另一个图像相关联并定义单应性使用这个矩阵,来自一个相机的图像可以被扭曲到另一个相机的视图

请注意,相机校准矩阵 C 和单应性 H 都可以矫正一个比例因子(等比例缩小和放大)。因此,我们可以假设右下方的元素为 1。这将找到 C 时的未知数从 12 减少到 11。类似地,在计算 H 时,未知数为 8。所以,为了计算H,不得不从二个相机看向一个平面,必须找到两个相机看到的平面上同一点的图像。所以,简单来说我们需要知道两个相机中的对应点分别为P_{\pi }^{1}P_{\pi }^{2}。从每个对应关系中,我们可以生成两个线性方程。 要找到 H 中的 8 个未知数,我们只需要 4 个对应关系。 因此,现在无需进行完整的相机校准(为两台相机找到 11 个参数导致 22 个参数)使用这 8 个单应性参数,我们可以将一台相机与另一台相机联系起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值