背景
相机标定核心公式复习
公式
原理
我们可以将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,它的前两维就是还没有经过相机畸变矫正过的坐标值,我们把他们分别设为 mx 和 my
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 就是 mr ,x 就是 mx ,y 就是 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
当然了你也可以说,我们想求的是增加了偏移 \xi 的 P_s。但由于我们已经知道了偏移 \xi ,所以这个问题并不关键
对比以上的 M 和 P_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模型,并给出了推导公式。
简单来说:在拥有相机内参数及各种畸变系数时,我们能做的有两种
- 由真实物理坐标返回它在图像中的像素坐标
- 由像素坐标得到入射光线的表示
评论(0)
您还未登录,请登录后发表或查看评论