之前讲到了Unified Camera Model模型,该模型是借助于一个虚拟的单位球来模拟相机的畸变,而本文要讲的Extended Unified Camera Model与它十分相似,只是将单位球变成了椭球,这个椭球在光轴方向上的轴长度为1,而平行于像平面的两个轴为对应的模型参数,具体的如下文所讲。
模型介绍
同样我画了一个简易图用来简单地描述一下这个模型,假设椭球面的方程为
β
(
x
2
+
y
2
)
+
z
2
=
1
\beta(x^2+y^2)+z^2=1
β(x2+y2)+z2=1,对于相机坐标系下一点
P
(
x
,
y
,
z
)
P(x, y, z)
P(x,y,z),将其归一化到椭球平面上得到点
P
s
=
(
x
β
(
x
2
+
y
2
)
+
z
2
,
y
β
(
x
2
+
y
2
)
+
z
2
,
z
β
(
x
2
+
y
2
)
+
z
2
)
P_s=({x \over {\sqrt{\beta(x^2+y^2)+z^2}}}, {y \over {\sqrt{\beta(x^2+y^2)+z^2}}}, {z \over {\sqrt{\beta(x^2+y^2)+z^2}}})
Ps=(β(x2+y2)+z2x,β(x2+y2)+z2y,β(x2+y2)+z2z)同样,可以找到一个以虚拟光心(与原光心只存在光轴上的平移,设平移量为
ξ
\xi
ξ)为原点的虚拟相机坐标系,那么此时
P
s
P_s
Ps在虚拟相机坐标系下的坐标变为
P
s
′
=
(
x
β
(
x
2
+
y
2
)
+
z
2
,
y
β
(
x
2
+
y
2
)
+
z
2
,
z
β
(
x
2
+
y
2
)
+
z
2
+
ξ
)
P'_s=({x \over {\sqrt{\beta(x^2+y^2)+z^2}}}, {y \over {\sqrt{\beta(x^2+y^2)+z^2}}}, {z \over {\sqrt{\beta(x^2+y^2)+z^2}}}+\xi)
Ps′=(β(x2+y2)+z2x,β(x2+y2)+z2y,β(x2+y2)+z2z+ξ)投影到像平面中,可以得到归一化到焦平面上的点坐标为
p
d
=
(
x
z
+
ξ
β
(
x
2
+
y
2
)
+
z
2
,
y
z
+
ξ
β
(
x
2
+
y
2
)
+
z
2
,
1
)
p_d=({x\over{z + \xi\sqrt{\beta(x^2+y^2)+z^2}}}, {y\over{z + \xi\sqrt{\beta(x^2+y^2)+z^2}}}, 1)
pd=(z+ξβ(x2+y2)+z2x,z+ξβ(x2+y2)+z2y,1)
上述过程就是改模型的投影过程,然后来看一下反投影过程,同样假设在
O
P
s
OP_s
OPs上存在一点
P
s
′
=
(
x
d
,
y
d
,
z
′
)
P_s'=(x_d, y_d, z')
Ps′=(xd,yd,z′),该点投影到归一化焦平面上时与
P
s
P_s
Ps对应的时同一个点,从而可以得到
z
′
+
ξ
β
(
x
d
2
+
y
d
2
)
+
z
′
2
=
1
{z' + \xi\sqrt{\beta(x_d^2+y_d^2)+z'^2}}=1
z′+ξβ(xd2+yd2)+z′2=1
syms r xi z b
solve(z + xi * sqrt(z^2 + b * r^2) == 1, z)
z ′ = ξ 1 + β r 2 ( 1 − ξ 2 ) − 1 ξ 2 − 1 z' ={ {\xi \sqrt{1+\beta r^2(1-\xi^2)}-1} \over {\xi^2-1}} z′=ξ2−1ξ1+βr2(1−ξ2)−1
投影过程
- 设相机坐标系下一点 P c = ( x c , y c , z c ) P_c=(x_c, y_c, z_c) Pc=(xc,yc,zc),将其归一化到椭球面上 P s = ( x s , y s , z s ) = ( x c ρ , y c ρ , z c ρ ) P_s=(x_s, y_s, z_s) = ({{x_c}\over\rho}, {y_c \over \rho}, {{z_c} \over \rho}) Ps=(xs,ys,zs)=(ρxc,ρyc,ρzc),其中 ρ = β ( x c 2 + y c 2 ) + z c 2 \rho={\sqrt{\beta(x_c^2+y_c^2)+z_c^2}} ρ=β(xc2+yc2)+zc2。
- 转换到虚拟像平面上得到 p = ( x p , y p , 1 ) = ( x s z s + ξ ρ , y s z s + ξ ρ , 1 ) p=(x_p, y_p, 1)=({x_s \over {z_s + \xi \rho}}, {y_s \over {z_s + \xi\rho}}, 1) p=(xp,yp,1)=(zs+ξρxs,zs+ξρys,1) 。
- 对 p p p添加畸变(参考针孔模型加畸变),得到 p d = ( x d , y d , 1 ) p_d=(x_d, y_d, 1) pd=(xd,yd,1),该步骤是可选项。
- 得到像素坐标 u = f x x d + c x , v = f y y d + c y u = f_xx_d + cx, v = f_yy_d + cy u=fxxd+cx,v=fyyd+cy。
反投影过程
- 设图像上某个点 p = (u, v);
- 得到归一化焦平面上坐标 p d = ( u − c x f x , u − c y f y , 1 ) p_d=({{u-cx}\over f_x}, {{u-cy}\over f_y},1) pd=(fxu−cx,fyu−cy,1).
- 进行去畸变处理,可参考针孔相机模型去畸变,得到 p u d = ( x u d , y u d , 1 ) p_ud = (x_{ud}, y_{ud},1) pud=(xud,yud,1) 。
- 转换到相机坐标系下 P c = ( x u d , y u d , ξ 1 + β r 2 ( 1 − ξ 2 ) − 1 ξ 2 − 1 ) P_c = (x_{ud}, y_{ud}, { {\xi \sqrt{1+\beta r^2(1-\xi^2)}-1} \over {\xi^2-1}}) Pc=(xud,yud,ξ2−1ξ1+βr2(1−ξ2)−1),其中, r 2 = x u d 2 + y u d 2 r^2=x_{ud}^2+y_{ud}^2 r2=xud2+yud2。
- 归一化到椭球面上。
雅可比计算
感兴趣的可以参考之前的一些相机模型中介绍的方法,我实在时不想编辑公式了。