- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
鱼眼相机是一种具有非常宽视野的相机,通常会产生强烈的径向畸变。鱼眼相机模型旨在捕捉这种畸变,以便能够准确地处理和校正图像。鱼眼相机模型通常使用多项式函数来描述径向畸变。
定义:设P是世界参考系中的一个3D点,其坐标为X(存储在矩阵X中)。点P在相机参考系中的坐标向量为:
X
c
=
R
X
+
T
X_c = R X + T
Xc=RX+T
其中R是对应于旋转向量ω的旋转矩阵:
R
=
r
o
d
r
i
g
u
e
s
(
ω
)
R=rodrigues(ω)
R=rodrigues(ω);称
x
,
y
,
z
x,y,z
x,y,z 为
X
c
Xc
Xc的三个坐标:
x
=
X
c
1
y
=
X
c
2
z
=
X
c
3
x = X_{c1} \\ y = X_{c2} \\ z = X_{c3}
x=Xc1y=Xc2z=Xc3
针孔投影坐标P为[a;b],其中
a
=
x
z
和
b
=
y
z
a = \frac{x}{z} \quad \text{和} \quad b = \frac{y}{z}
a=zx和b=zy
r
2
=
a
2
+
b
2
和
θ
=
arctan
(
r
)
r^2 = a^2 + b^2 \quad \text{和} \quad \theta = \arctan(r)
r2=a2+b2和θ=arctan(r)
鱼眼畸变:
θ
d
=
θ
(
1
+
k
1
θ
2
+
k
2
θ
4
+
k
3
θ
6
+
k
4
θ
8
)
\theta_d = \theta (1 + k_1 \theta^2 + k_2 \theta^4 + k_3 \theta^6 + k_4 \theta^8)
θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)
畸变点的坐标为
[
x
′
;
y
′
]
[x′;y′]
[x′;y′],其中
x
′
=
(
θ
d
r
)
a
和
y
′
=
(
θ
d
r
)
b
x' = \left(\frac{\theta_d}{r}\right) a \quad \text{和} \quad y' = \left(\frac{\theta_d}{r}\right) b
x′=(rθd)a和y′=(rθd)b
最终转换为像素坐标:最终的像素坐标向量 [u;v]为:
u
=
f
x
(
x
′
+
α
y
′
)
+
c
x
v
=
f
y
y
′
+
c
y
u = f_x (x' + \alpha y') + c_x \\ v = f_y y' + c_y
u=fx(x′+αy′)+cxv=fyy′+cy
总结
通用相机模型 139包括透视投影,但没有畸变校正。