![](https://i-blog.csdnimg.cn/blog_migrate/1eb12cbd401c25f8d54dfebc9c7b8383.jpeg)
1鱼眼相机模型
设
f
f
f为焦距,
θ
\theta
θ为光线与光轴的夹角,
r
r
r为像点到图像坐标系原点的距离。
则对于针孔相机模型有:
r
=
f
t
a
n
θ
r=ftan\theta
r=ftanθ
鱼眼相机模型通常有四种
(1)等距投影
r
=
f
.
θ
r=f.\theta
r=f.θ
(2)等立体角投影
r
=
2
f
.
s
i
n
(
θ
2
)
r=2f.sin(\frac{\theta}{2})
r=2f.sin(2θ)
(3)正交投影
r
=
f
.
s
i
n
θ
r=f.sin\theta
r=f.sinθ
(4)体视投影
r
=
2
f
.
t
a
n
(
θ
2
)
r=2f.tan(\frac{\theta}{2})
r=2f.tan(2θ)
对于畸变改正,应用Kannala-Brandt 模型,则上面四种投影方式会得到相同的改正形式,改正后的
θ
d
\theta_d
θd:
θ
d
=
k
0
.
θ
+
k
1
.
θ
3
+
k
2
.
θ
5
+
k
3
.
θ
7
+
.
.
.
\theta_d=k_0.\theta+k_1.\theta^3+k_2.\theta^5+k_3.\theta^7+...
θd=k0.θ+k1.θ3+k2.θ5+k3.θ7+...
最常用的为等距投影模型。
2鱼眼等距投影坐标计算
假设相机坐标系为
O
c
X
c
Y
c
Z
c
O_cX_cY_cZ_c
OcXcYcZc,图像坐标系为
x
o
y
xoy
xoy,物体在相机坐标系下的坐标为
P
(
x
,
y
,
z
),
p
1
P(x,y,z),p_1
P(x,y,z),p1(黑色点)为针孔相机投影到图像平面的点,
p
2
p_2
p2(红色点)为鱼眼相机等距投影点,
r
1
(
o
p
1
)
,
r
2
(
o
p
2
)
r_1(op_1),r_2(op_2)
r1(op1),r2(op2)分别为针孔模型、鱼眼模型的像点到图像坐标系原点的距离,P’为P在相机坐标系
O
c
X
c
Y
c
O_cX_cY_c
OcXcYc的投影。
(1)解算
θ
\theta
θ
计算方式1:,则
θ
=
a
r
c
t
a
n
(
(
x
2
+
y
2
)
0.5
/
z
)
\theta=arctan((x^2+y^2)^{0.5}/z)
θ=arctan((x2+y2)0.5/z)。
计算方式2:对xy进行归一化,令
a
=
x
/
z
,
b
=
y
/
z
,
R
2
=
a
2
+
b
2
,
θ
=
a
r
c
t
a
n
(
R
)
a=x/z,b=y/z,R^2=a^2+b^2,\theta=arctan(R)
a=x/z,b=y/z,R2=a2+b2,θ=arctan(R)。
两种方法等效。
(2)计算图像坐标
对于针孔模型而言,光束是沿直线传播的,即
P
,
O
c
,
p
1
P,Oc,p1
P,Oc,p1三点共线。所以:有三角形
O
c
P
P
′
O_cPP'
OcPP′相似于三角形
O
c
p
1
o
O_cp_1o
Ocp1o,所以:向量
p
′
O
c
p'O_c
p′Oc平行于向量
o
p
1
op_1
op1,所以:二者与y轴的夹角相等,记为
β
\beta
β。在相机坐标系中有
s
i
n
(
β
)
=
a
/
R
sin(\beta)=a/R
sin(β)=a/R。在图像坐标系中,有
s
i
n
(
β
)
=
x
1
/
r
1
=
x
2
/
r
2
sin(\beta)=x_1/r_1=x_2/r_2
sin(β)=x1/r1=x2/r2。所以鱼眼相机的图像坐标:
x
2
=
a
.
r
2
/
R
y
2
=
b
.
r
2
/
R
x_2=a.r_2/R\\ y_2=b.r_2/R
x2=a.r2/Ry2=b.r2/R
a,b,R可以根据坐标和计算出来,现在的问题是怎么求解
r
2
r_2
r2?
针对等距模型而言:
r
=
f
.
θ
r=f.\theta
r=f.θ,这里不妨让
f
=
1
f=1
f=1,则
r
=
θ
=
a
r
c
t
a
n
(
R
)
r=\theta=arctan(R)
r=θ=arctan(R),所以对于等距模型而言,其畸变改正后的图像坐标为:
x
2
=
a
.
θ
d
/
R
y
2
=
b
.
θ
d
/
R
x_2=a.\theta_d/R\\ y_2=b.\theta_d/R
x2=a.θd/Ry2=b.θd/R
像素坐标系下坐标为:
u
=
f
x
(
x
2
+
α
.
y
2
)
+
c
x
v
=
f
y
.
y
2
+
c
y
u=f_x(x_2+\alpha .y_2)+cx\\ v=f_y.y_2+cy
u=fx(x2+α.y2)+cxv=fy.y2+cy
f
x
,
f
y
f_x,f_y
fx,fy为焦距,
α
\alpha
α为扭曲系数(不太理解这里为什么引入这个参数),
c
x
,
c
y
cx,cy
cx,cy为像主点坐标。
3鱼眼相机标定
opencv提供了两种模型的标定方法
CMei模型,位于cv::omnidir命名空间中
以及Kannala模型,位于cv::fisheye命名空间。
此外matlab也提供了基于CMei模型的标定方法。
参考:
opencv文档
1
2
球面投影
CMei模型:《Single View Point Omnidirectional Camera Calibration from Planar Grids》
《A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses》
《车载鱼眼相机自标定研究》–石恬