0.前言
本着带着问题学习效果更佳的原则。此处,我们提出以下几个问题,并在下文的描述中一个一个解决。
- 摄像头的成像原理是什么?
- 2维图像中的像素坐标系是怎么定义的?摄像头的3维世界坐标系是怎么定义的?
- 如果给定2维图像中的任意一个像素点,如何知道该像素点在世界坐标系下的3维坐标?
- 如果给定3维坐标点,如何能够反算出对应的2维图像中的像素点?
1. 单目摄像头内参
内参是摄像头固有的属性,如同一件衣服,一旦裁剪完成,衣袖的长短就是固定的,但就如同世界上没有相同的一片雪花那样。世界上也没有完全一样尺寸的衣服。同理,每一个摄像头的内参都是不同的,包括焦距,像素中心点的偏移,光心的偏移,成像的畸变系数等参数。这些参数需要我们像求解一个含有未知数的方程那样,通过已知的参数,如标定板中的各个角点的相对坐标来值,构建多元线性方程,并将其求解得出。
1.1 摄像头成像原理
初中的时候我们就已经学会了小孔成像原理,穿过小孔的成像是倒立的,利用相似性原理,我们可以构造出以下公式:
f
Z
=
x
′
X
=
y
′
Y
\frac{f}{Z} = \frac{x^\prime}{X} = \frac{y^\prime}{Y}
Zf=Xx′=Yy′
其中X, Y, Z是世界坐标系下的点。
1.2 坐标系的定义
- 像素坐标系定义:坐标表示为(U, V),其中图像的左上方为原点O, 向右为U,与世界坐标系的X轴平行;向下为V,与世界坐标系的Y轴平行。
- 世界坐标系定义:坐标表示为(X, Y, Z),人站在摄像头正后面,摄像头代替人的眼睛,此时,前方是Z轴,右手方向是X轴,正下方是Y轴。
1.3 摄像头内参
内参数通常出场就会标定,如果没有办法获得可以使用棋盘格的方法进行标定。
f
x
f_x
fx为摄像头焦距
f
f
f乘上系数
α
\alpha
α后得到的值,即
f
x
=
f
α
f_x=f\alpha
fx=fα,
f
y
f_y
fy同理。本质上是将成像数值通过缩放系数映射到成像平面中的各个像素点上。
Z
[
u
v
1
]
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
X
Y
Z
]
=
K
p
Z\left[ \begin{matrix} u\\v\\1 \end{matrix} \right]= \left[ \begin{matrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} X\\Y\\Z \end{matrix} \right]=\bold{Kp}
Z
uv1
=
fx000fy0cxcy1
XYZ
=Kp
其中
K
\bold{K}
K为内参矩阵,
f
x
f_x
fx,
f
y
f_y
fy,
c
x
c_x
cx,
c
y
c_y
cy 的单位都是像素。