目录
0 拍照的死亡角度
拍照死亡角度一般指的是将自己脸盆子拍得特别大,拍出用鼻孔看人的狰狞面目,比如下面这张照片。在拍照的死亡角度下,镜头畸变会产生失真,让你的体态更圆润、厚实,因此部分美颜软件里人像修正中会有“去畸变”这一项功能。本文就从计算机视觉的角度谈一谈镜头畸变原理。
1 透视相机模型
透视相机模型描述了三维空间中的点与二维图像平面上像素间的映射关系。
根据小孔成像原理,透视相机的成像点与空间点之间方向相反,如图所示。为得到与空间点方向相同的成像点,将成像面沿着光轴移动到归一化成像面,接下来的讨论以归一化成像面为准。
在确定归一化成像面后,从空间点
W
X
~
^W\!\tilde{X}
WX~到像素点
u
~
\tilde{u}
u~的映射可分为两步:
- 将 W X ~ ^W!\tilde{X} WX
映射到归一化成像面的成像点 C x ~ ^C!\tilde{x} Cx,对应的映射关系称为**相机外参(Extrinsic)**; - 将 C x ~ ^C!\tilde{x} Cx
映射到像素平面的像素 u ~ \tilde{u} u,对应的映射关系称为**相机内参(Intrinsic)**。上述各点均处于投影空间,采用齐次坐标。
2 相机矩阵
设世界坐标系
{
W
}
\left\{ \boldsymbol{W} \right\}
{W}相对于透视相机坐标系
{
C
}
\left\{ \boldsymbol{C} \right\}
{C}的位姿为
W
C
T
=
[
W
C
R
C
p
w
0
0
1
]
_{\boldsymbol{W}}^{\boldsymbol{C}}\!\boldsymbol{T}=\left[ \begin{matrix} _{\boldsymbol{W}}^{\boldsymbol{C}}\;\!\!\!\boldsymbol{R}& ^{\boldsymbol{C}}\!\boldsymbol{p}_{w_0}\\ 0& 1\\\end{matrix} \right]
WCT=[WCR0Cpw01]
考虑到从三维空间降维到二维平面,设世界坐标值
[
W
X
W
Y
W
Z
1
]
T
\left[ \begin{matrix} ^{\boldsymbol{W}\!}\!X& ^{\boldsymbol{W}\!}\!\!\:\!\:Y& ^{\boldsymbol{W}\!}\!Z& 1\\\end{matrix} \right] ^T
[WXWYWZ1]T,则
C
x
~
=
[
1
0
0
0
0
1
0
0
0
0
1
0
]
,
W
C
T
W
X
~
=
[
C
X
C
Y
C
Z
]
^{\boldsymbol{C}}\!\tilde{x}=\left[ \begin{matrix} 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 0\\\end{matrix} \right] {\color{white} ,}_{\boldsymbol{W}}^{\boldsymbol{C}}\!\boldsymbol{T}^{\,\,\boldsymbol{W}}\!\!\tilde{X}=\left[ \begin{array}{c} ^{\boldsymbol{C}}\!X\\ ^{\boldsymbol{C}}Y\\ ^{\boldsymbol{C}}\!Z\\\end{array} \right]
Cx~=⎣⎡100010001000⎦⎤,WCTWX~=⎣⎡CXCYCZ⎦⎤
在上述推导过程中,称
M
E
=
[
1
0
0
0
0
1
0
0
0
0
1
0
]
,
W
C
T
=
[
W
C
R
C
p
w
0
]
\boldsymbol{M}_{\boldsymbol{E}}=\left[ \begin{matrix} 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 0\\\end{matrix} \right] {\color{white} ,}_{\boldsymbol{W}}^{\boldsymbol{C}}\!\boldsymbol{T}=\left[ \begin{matrix} _{\boldsymbol{W}}^{\boldsymbol{C}}\;\!\!\!\boldsymbol{R}& ^{\boldsymbol{C}}\!\boldsymbol{p}_{w_0}\\\end{matrix} \right]
ME=⎣⎡100010001000⎦⎤,WCT=[WCRCpw0]
为相机外参矩阵。通常令尺度因子
C
Z
=
1
^{\boldsymbol{C}}\!Z=1
CZ=1,
C
x
~
=
[
C
X
C
Z
C
Y
C
Z
1
]
T
=
[
C
x
^
C
y
^
1
]
T
^{\boldsymbol{C}}\!\tilde{x}=\left[ \begin{matrix} \frac{^{\boldsymbol{C}}\!X}{^{\boldsymbol{C}}\!Z}& \frac{^{\boldsymbol{C}}Y}{^{\boldsymbol{C}}\!Z}& 1\\\end{matrix} \right] ^T=\left[ \begin{matrix} ^{\boldsymbol{C}}\!\hat{x}& ^{\boldsymbol{C}}\!\hat{y}& 1\\\end{matrix} \right] ^T
Cx~=[CZCXCZCY1]T=[Cx^Cy^1]T
从
C
x
~
^C\!\tilde{x}
Cx~到像素
u
~
\tilde{u}
u~的映射用三维**内参矩阵
K
K
K**来表示,即
u
~
=
K
C
x
~
=
[
f
u
s
c
u
0
f
v
c
v
0
0
1
]
C
x
~
\tilde{u}=\boldsymbol{K}^C\!\tilde{x}=\left[ \begin{matrix} f_u& s& c_u\\ 0& f_v& c_v\\ 0& 0& 1\\\end{matrix} \right] \,\,^C\!\tilde{x}
u~=KCx~=⎣⎡fu00sfv0cucv1⎦⎤Cx~
其中
- 如图(a)所示,参数 c u c_u cu、 c v c_v cv用于中心映射——将光轴与归一化成像面的交点,即成像面中心点映射到像素平面中心,其取决于拜耳阵列与光轴如何对齐。
- 如图(b)所示,参数 f u f_u fu、 f v f_v fv用于归一化——将矩形的传感器阵列映射为正方形
- 如图©所示,参数 s s s用于正交化——当传感器阵列不正交或传感器平面与光轴不垂直时,需要引入 纠正畸变。
3 镜头畸变
上述透视相机模型基于针孔无限小的假设,但在现实中,光线通过镜头将使相机内部复杂化,产生明显的径向失真——场景中的线条在图像中显示为曲线。**径向畸变(Radial Distortion)**有两种类型:
- 筒体畸变(Barrel Distortion)
- 枕形失真(Pincushion Distortion)
此外由于相机组装过程中,透镜不能和成像面严格平行,会引入**切向畸变(Tangential Distortion)**。
针对具有镜头畸变的相机,不能直接应用透视相机模型,通常需要先通过多项式模型修正这种几何偏差,即:
{
x
^
=
x
(
1
+
κ
1
r
2
+
κ
2
r
4
)
+
2
p
1
x
y
+
p
2
(
r
2
+
2
x
2
)
y
^
=
y
(
1
+
κ
1
r
2
+
κ
2
r
4
)
+
p
1
(
r
2
+
2
y
2
)
+
2
p
2
x
y
\begin{cases} \hat{x}=x\left( 1+\kappa _1r^2+\kappa _2r^4 \right) +2p_1xy+p_2\left( r^2+2x^2 \right)\\ \hat{y}=y\left( 1+\kappa _1r^2+\kappa _2r^4 \right) +p_1\left( r^2+2y^2 \right) +2p_2xy\\\end{cases}
{x^=x(1+κ1r2+κ2r4)+2p1xy+p2(r2+2x2)y^=y(1+κ1r2+κ2r4)+p1(r2+2y2)+2p2xy
其中
r
2
=
x
2
+
y
2
r^2=x^2+y^2
r2=x2+y2,
κ
1
\kappa _1
κ1、
κ
2
\kappa _2
κ2称为**径向畸变参数**,
p
1
p_1
p1、
p
2
p_2
p2称为**切向畸变参数**;
(
x
,
y
)
(x,y)
(x,y)为畸变坐标,
(
x
^
,
y
^
)
\left( \hat{x},\hat{y} \right)
(x^,y^)为无畸变坐标。
🚀 计算机视觉基础教程说明
章号 内容
0 色彩空间与数字成像
1 计算机几何基础
2 图像增强、滤波、金字塔
3 图像特征提取
4 图像特征描述
5 图像特征匹配
6 立体视觉
7 项目实战
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《机器人原理与技术》
- 《机器学习强基计划》
- 《计算机视觉教程》
- …
👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
版权归原作者 Mr.Winter` 所有, 如有侵权,请联系我们删除。