背景

相机标定核心公式复习
公式

原理

我们可以将mei模型理解为,在 z 轴添加了一个偏移\xi ,使得球型水平入射的光线也可以投影到图像的像素区域内

1. 物理xyz 求 像素uv

通过以下过程,根据物理点的信息,和我们已经标定好的相机模型,可以得到该点在图像上的坐标

1.1 找到xyz与uv之间的关系

假设物理真实的点的坐标为

P = (x, y, z)^T

这个物理点,我们可以这样理解:从坐标原点发出一束光线,这条光线上的某个点就是 P 。进一步假设在坐标原地附近有一个半径为 1 的球,那么这束光线与单位球的交点是什么呢?

对坐标进行一次归一化操作,点 P 就映射到了归一化球面坐标系中(物理点 P 就打到了单位球上)归一化操作如下:

r = \sqrt{x^2+y^2+z^2}

P_s = (x/r, y/r, z/r)^T

但注意的是,由于偏移 \xi ,这个单位球面的球心并不是原来的球心。假设原来的球心是 C_m ,现在的球心在 z 方向有了偏移 \xi
那么映射到单位球面的点,实际坐标为

P_s = (x/r, y/r, z/r+\xi)^T

我们对这个映射点,进行 z 轴的归一化,因为图像平面可没有什么 z 方向的信息

M = (x/r(z/r+\xi), y/r(z/r+\xi), 1)^T

M = (x/(z+r\xi), y/(z+r\xi), 1)^T

1.2 利用内参中的畸变系数,完成畸变矫正

我们不妨将归一化坐标设为M,它的前两维就是还没有经过相机畸变矫正过的坐标值,我们把他们分别设为 mxmy

M = (mx, my, 1)^T

映射点M到坐标原点的距离 mr

mr = \sqrt{mx^2 + my^2}

所谓畸变矫正,我们可以这样理解。在没有透镜的情况下,物理点将通过针孔模型准确的打到图像平面上。现实相机总会包含透镜,使得光线在穿过透镜时发生折射,映射的位置发生了变化,图像也就产生了畸变。我们根据相机的畸变参数,添加到计算中,让针孔模型发生扭曲。开玩笑的说,畸变矫正实际上就是搞一下破坏。

继续上面的Mei模型探讨。剩下的工作就是正常的针孔相机模型了。针孔相机模型一共有5个参数,分别是3个径向畸变系数,和2个切向畸变系数。全部的公式如下:

\triangle{x} = x(k_1 r^2 + k_2 r^4 + k_3 r^6) + 2p_1xy+p_2(r^2+2x^2)

\triangle{y} = y(k_1 r^2 + k_2 r^4 + k_3 r^6) + p_1(r^2+2y^2)+2p_2xy

x_{distorted} = x + \triangle{x}

y_{distorted} = y + \triangle{y}

以上公式就是畸变公式。我们将我们正在讨论的Mei模型变量带入,r 就是 mrx 就是 mxy 就是 my

\triangle{mx} = mx(k_1 mr^2 + k_2 mr^4 + k_3 mr^6) + 2p_1mxmy+p_2(mr^2+2mx^2)

\triangle{my} = my(k_1 mr^2 + k_2 mr^4 + k_3 mr^6) + p_1(mr^2+2my^2)+2p_2mxmy

1.3 利用内参矩阵K,算出u 和 v

那么令畸变后的坐标为 M_{distortion}

M_{distortion} = (x/(z+r\xi) + \triangle{mx}, y/(z+r\xi) + \triangle{my}, 1)^T

最后将加了畸变模型的坐标通过相机内参矩阵 K 投影到像素坐标系中就好了

2. 像素uv 求 归一化球面坐标

通过以下过程,根据像素坐标,和我们已经标定好的相机模型,求出归一化球面坐标系中的坐标 P_s(未偏移 \xi ,坐标原点为 C_m

2.1 像素 uv 和归一化球面坐标之间的关系

拥有的是图像坐标,写成这样

M = (x/r(z/r+\xi), y/r(z/r+\xi), 1)^T

要求的是归一化球面坐标系上的坐标 P_s,写成这样

P_s = (x/r, y/r, z/r)^T

当然了你也可以说,我们想求的是增加了偏移 \xiP_s。但由于我们已经知道了偏移 \xi ,所以这个问题并不关键

对比以上的 MP_s 的公式,我们发现只要求一个数,我们就能直接算出 P_s

这是因为:

P[0] = \lambda M[0]

P[1] = \lambda M[1]

P[2] = (\lambda - \xi) M[2]

其中 \lambda = z/r + \xi

接下来我们根据已知的图像坐标来求 \lambda 就好了

2.2 根据公式计算

\lambda = z/r + \xi = (z + r\xi) / r

\lambda = \frac{1}{\sqrt{(\frac{x}{z + r\xi})^2+ (\frac{y}{z + r\xi})^2 + (\frac{z}{z + r\xi})^2}}

\lambda = \frac{1}{\sqrt{(\frac{x}{z + r\xi})^2+ (\frac{y}{z + r\xi})^2 + (\frac{z + r\xi - r\xi}{z + r\xi})^2}}

\lambda = \frac{1}{\sqrt{(\frac{x}{z + r\xi})^2+ (\frac{y}{z + r\xi})^2 + (\frac{z/r + \xi - \xi}{z/r + \xi})^2}}

\lambda = \frac{1}{\sqrt{(\frac{x}{z + r\xi})^2+ (\frac{y}{z + r\xi})^2 + (1-\frac{\xi}{\lambda })^2}}

\lambda = \frac{1}{\sqrt{(mx)^2+ (my)^2 + (1-\frac{\xi}{\lambda })^2}}

这时我们发现,只有一个未知数 \lambda 了。继续求解

((mx)^2+ (my)^2)\lambda^2 + (\lambda-\xi)^2 = 1

(1 + (mx)^2+ (my)^2)\lambda^2 - 2\xi\lambda + (-1+\xi^2) = 0

根据公式 ax^2+bx+c = 0 求解 x=\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

我们取 \lambda 的正根

\lambda = \frac{2\xi + \sqrt{4\xi^2 + 4(1+(mx)^2 + (my)^2)(1-\xi^2)}}{2(1+(mx)^2 + (my)^2)}

\lambda = \frac{\xi + \sqrt{\xi^2 + (1+(mx)^2 + (my)^2)(1-\xi^2)}}{1+(mx)^2 + (my)^2}

\lambda = \frac{\xi + \sqrt{1 + ((mx)^2 + (my)^2)(1-\xi^2)}}{1+(mx)^2 + (my)^2}

2.3 求解:

利用这个公式求出 \lambda 之后,我们可以对归一化平面坐标 M 乘以 \lambda 就会得到归一化球面坐标 P_s ( 原点为 C_p ),再对 z 轴的值减去 \lambda 就可以得到归一化球面坐标了(原点为 C_m


M = (x/r(z/r+\xi), y/r(z/r+\xi), 1)^T

每一项乘以 \lambda,就得到了

P_s = (x/r, y/r, z/r+\xi)^T

最后的 z 减去 \xi,就得到了

P_s = (x/r, y/r, z/r)^T

3. 像素uv 求 对应射线

与第2小节很相似

  • 射线表示

    图像每个像素,对应着物理世界的一条射线。这条射线上所有的点,归一化平面坐标均为 M = (u, v, 1)^T

​ 假设这条射线是 (u, v, m)^T

​ 我们的目标就是求出这个 m 的值

  • 计算

    第二小节我们给出了归一化球面坐标 P_s 的表示,事实上 P_s 也是这个射线上的一点

    P_s = (u\lambda, v\lambda, \lambda-\xi)^T

    P_s 和 这条射线的向量表示,实际上是统一尺度的,中间只差了一个系数,也就是:

    L = \lambda P_s

    所以 m 的值就是

m = (\lambda-\xi)/\lambda = 1 - \xi/\lambda = 1- \xi\frac{1+(mx)^2 + (my)^2}{\xi + \sqrt{\xi^2 + (1+(mx)^2 + (my)^2)(1-\xi^2)}}

m=1- \xi\frac{1+(mx)^2 + (my)^2}{\xi + \sqrt{1 + ((mx)^2 + (my)^2)(1-\xi^2)}}

总结

这篇文章,讲解了Mei模型,并给出了推导公式。

简单来说:在拥有相机内参数及各种畸变系数时,我们能做的有两种

  1. 由真实物理坐标返回它在图像中的像素坐标
  2. 由像素坐标得到入射光线的表示