一、前言
在很多图像处理中,需要使用相机参数来校正图像畸变。相机参数的获取往往需要复杂的标定过程,耗时耗力。
对于一些消费级相机,其本身畸变较小,可以人工计算理想模型下的参数来近似相机参数。我们就可以使用这个近似参数快速进行代码测试(好吧,其实是我懒得做标定😁)
二、相机参数简介
相机参数主要包含两个部分:相机内参矩阵、相机畸变参数。
1. 相机内参矩阵
f
x
f_x
fx是x方向上焦距的像素长度,
f
y
f_y
fy是y方向上焦距的像素长度。
(
c
x
,
c
y
)
(c_x, c_y)
(cx,cy)是相机成像中心的像素坐标。
2. 相机畸变参数
相机畸变分为径向畸变和切向畸变。
径向畸变:
x d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_d = x(1+k_1r^2+k_2r^4+k_3r^6) xd=x(1+k1r2+k2r4+k3r6)
y d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y_d = y(1+k_1r^2+k_2r^4+k_3r^6) yd=y(1+k1r2+k2r4+k3r6)
切向畸变:
x d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) x_d = x+2p_1xy+p_2(r^2+2x^2) xd=x+2p1xy+p2(r2+2x2)
y d = y + p 1 ( r 2 + 2 x 2 ) + 2 p 2 x y y_d = y+p_1(r^2+2x^2)+2p_2xy yd=y+p1(r2+2x2)+2p2xy
(r为距离图像成像中心点的距离,
x
d
,
y
d
x_d,y_d
xd,yd为畸变后的图像坐标,
x
,
y
x,y
x,y为去畸变的图像坐标)
按照上述,相机畸变参数为:
(
k
1
,
k
2
,
k
3
,
p
1
,
p
2
)
(k_1, k_2, k_3, p_1, p_2)
(k1,k2,k3,p1,p2)
三、相机参数简单计算
1. 相机内参矩阵
理想情况下,相机的成像中心在图像的正中心,示意图如下所示。
根据三角函数关系,可得:
这里的
f
f
f是相机焦距,
F
O
V
FOV
FOV是视场角,
w
w
w是图像宽度。
算出来
d
x
d_x
dx是x方向上每个像素的实际长度,单位是mm/像素。
算出来
f
x
f_x
fx是x方向上焦距的像素长度,是我们想要的参数。
因为
F
O
V
FOV
FOV是相对图像宽度而言的,理论上只能计算
f
x
f_x
fx,但理想情况下,两个方向上CCD单位尺寸一致,即可得
f
y
=
f
x
f_y=f_x
fy=fx
由于相机的成像中心在图像的正中心,可得
c
x
=
w
/
2
,
c
y
=
h
/
2
c_x=w/2,c_y=h/2
cx=w/2,cy=h/2
即相机内参矩阵为:
2. 相机畸变参数
理想情况下,相机没有畸变,那么
(
k
1
,
k
2
,
k
3
,
p
1
,
p
2
)
=
(
0
,
0
,
0
,
0
,
0
)
(k_1, k_2, k_3, p_1, p_2)=(0, 0,0,0,0)
(k1,k2,k3,p1,p2)=(0,0,0,0,0)
3. 计算案例
我使用的是大疆Phantom4 Pro V2的云台相机,在官网上查到参数:
F
O
V
=
84
度
FOV=84度
FOV=84度
对于
3840
∗
2160
3840*2160
3840∗2160的分辨率,可计算出
那么相机内参矩阵为
相机畸变参数为:
(
k
1
,
k
2
,
k
3
,
p
1
,
p
2
)
=
(
0
,
0
,
0
,
0
,
0
)
(k_1, k_2, k_3, p_1, p_2)=(0, 0,0,0,0)
(k1,k2,k3,p1,p2)=(0,0,0,0,0)