针孔模型 & 透镜
- 1.将物体放在胶片前面,物体的每个点都会打在胶片上。
- 2.添加屏障,减少模糊。这样物体的每个点对应胶片中的对应点。
针孔摄像机:
- f f f = 焦距。
- o o o = 光圈 = 针孔 = 摄像机中心。
下面我们需要将摄像机坐标系上的点转换为像平面坐标系上的点:
i i i 、 j j j 、 k k k 轴表示 x x x、 y y y、 z z z 。
从 i i i 轴向里看去:
同理从
j
j
j 轴向下看去也有类似公式,这样便有:
P
=
[
x
y
z
]
→
P
′
=
[
x
′
y
′
]
P = \begin{bmatrix} x \\ y \\ z \\ \end{bmatrix} \rightarrow P' = \begin{bmatrix} x' \\ y' \\ \end{bmatrix}
P=
xyz
→P′=[x′y′]
其中:
{
x
′
=
f
x
z
y
′
=
f
y
z
\left\{ \begin{aligned} x' & = f \frac{x}{z}\\ y' & = f \frac{y}{z}\\ \end{aligned} \right.
⎩
⎨
⎧x′y′=fzx=fzy
下面我们讨论光圈尺寸对成像影响:
随着光圈的缩小,成像效果:越来越清晰、越来越暗。
如何应对到达胶片的光线变少?这便有了下面的透镜。
- 透镜将多条光线聚焦到胶片上,增加了照片的亮度
- 透镜将光线聚焦到胶片上:
- 所有平行于光轴的光线都会会聚到焦点,焦点到透镜中心的距离称为焦距。
- 穿过中心的光线的方向不发生改变。
近轴折射模型:
由折射定律: f = R 2 ( n − 1 ) f = \frac{R}{2(n-1)} f=2(n−1)R 。其中 R R R 为透镜球面半径, n n n 为透镜折射系数。
由上面的针孔模型可知:
{
x
′
=
z
′
x
z
y
′
=
z
′
y
z
\left\{ \begin{aligned} x' & = z' \frac{x}{z}\\ y' & = z' \frac{y}{z}\\ \end{aligned} \right.
⎩
⎨
⎧x′y′=z′zx=z′zy
其中
z
′
=
f
+
z
o
z' = f + z_o
z′=f+zo
透镜问题:失焦
透镜将光线聚焦到胶片上,物体“聚焦”有特定距离,这便有了景深现象。
透镜问题: 径向畸变 透镜工艺问题。
- 径向畸变:图像像素点以畸变中心为中心点,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变
例子:
产生原因:光线在远离透镜中心的地方比靠近中心的地方更加弯曲
摄像机几何
从像平面到像素平面:
- 1.偏置。
我们从针孔/透镜模型中得到了摄像机坐标系转换到像平面坐标系的公式,但真实的像素坐标系的坐标原点在左下角,因此还需要加个偏移,将像平面坐标转换为像素坐标。
- 2.单位变换。
像坐标中的x和y是长度单位(米m)还需要转化为像素单位(pixel)。
乘以转换系数 k k k 和 l l l ,其单位为 p i x e l / m pixel/m pixel/m
这便有了从
P
P
P 到
P
′
P'
P′ 的转换公式。
P
=
(
x
,
y
,
z
)
→
P
′
=
(
α
x
z
+
c
x
,
β
y
z
+
c
y
)
P=(x,y,z) \rightarrow P'=(\alpha \frac{x}{z} + c_x,\beta\frac{y}{z} + c_y)
P=(x,y,z)→P′=(αzx+cx,βzy+cy)
从
P
P
P 到
P
′
P'
P′ 的变换不是线性的。我们使用下面的方法进行线性转换。
欧式空间与齐次坐标:
在欧式空间(笛卡尔空间)中,使用坐标描述2D/3D几何非常合适,例如2维欧式空间中的点表示为(x , y),3维空间中点表示为(x , y , z)。但是这种方法不适用于透视空间,当一个点位于无穷远处时,该点的欧氏空间坐标中会出现 ∞ \infty ∞,这显然不合适,而使用齐次坐标能够很好的解决此问题。
齐次坐标就是在欧氏空间表示的基础上增加一个额外的变量w来表示原本的坐标 ( X , Y ) (X,Y) (X,Y),并同时需要令 x = X × w x = X \times w x=X×w , y = Y × w y = Y \times w y=Y×w ,最终得到齐次坐标 ( x , y , w ) (x, y, w) (x,y,w) , w w w 为非0变量,只有点在无穷远处时才等于0。
当点在二维空间的无穷远处时,它的笛卡尔坐标系为 ( ∞ , ∞ ) (\infty,\infty) (∞,∞) ,但是在齐次坐标系中令 w = 0 w = 0 w=0 就能表示它在无穷处了,而不必使用 ∞ \infty ∞ 来表示。因此将点 ( X , Y ) (X,Y) (X,Y) 移动到无穷远时,可以直接使用齐次坐标 ( X , Y , 0 ) (X,Y,0) (X,Y,0) 来表示。
笛卡尔坐标与齐次坐标是一对多的关系,齐次坐标族 ( a X , a Y , a ) (aX,aY,a) (aX,aY,a) , ( b X , b Y , b ) (bX,bY,b) (bX,bY,b) 等都表示笛卡尔坐标 ( X , Y ) (X,Y) (X,Y) 。
普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:
- 从普通坐标转换成齐次坐标时
- 如果 ( x , y , z ) (x,y,z) (x,y,z) 是个点,则变为 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1);
- 如果 ( x , y , z ) (x,y,z) (x,y,z) 是个向量,则变为 ( x , y , z , 0 ) (x,y,z,0) (x,y,z,0)
- 从齐次坐标转换成普通坐标时
- 如果是 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1) ,则知道它是个点,变成 ( x , y , z ) (x,y,z) (x,y,z) ;
- 如果是 ( x , y , z , w ) (x,y,z,w) (x,y,z,w) ,则变为 ( x w , y w , z w ) (\frac{x}{w}, \frac{y}{w},\frac{z}{w}) (wx,wy,wz);
- 如果是 ( x , y , z , 0 ) (x,y,z,0) (x,y,z,0) ,则知道它是个向量,仍然变成 ( x , y , z ) (x,y,z) (x,y,z)
- 齐次坐标中的投影变换:
将欧式坐标 P ′ = ( α x z + c x , β y z + c y ) P'=(\alpha \frac{x}{z} + c_x,\beta\frac{y}{z} + c_y) P′=(αzx+cx,βzy+cy) 转换为齐次坐标 P h ′ P'_h Ph′ :
P h ′ = [ α x + c x z β y + c y z z ] = [ α 0 c x 0 0 β c y 0 0 0 1 0 ] [ x y z 1 ] = M P P'_h = \begin{bmatrix} \alpha x + c_x z \\ \beta y + c_y z \\ z \end{bmatrix} = \begin{bmatrix} \alpha & 0 & c_x & 0 \\ 0 & \beta & c_y & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = MP Ph′= αx+cxzβy+cyzz = α000β0cxcy1000 xyz1 =MP
其中 P h = [ x y z 1 ] P_h = \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} Ph= xyz1 ,也就是 P P P 的齐次坐标。
- 摄像机偏斜。带畸变的 M M M 矩阵:
M = [ α − α c o t θ c x 0 0 β s i n θ c y 0 0 0 1 0 ] M = \begin{bmatrix} \alpha & -\alpha cot \theta & c_x & 0 \\ 0 & \frac{\beta}{sin\theta} & c_y & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} M= α00−αcotθsinθβ0cxcy1000
摄像机坐标下的摄像机模型:
P
′
=
[
α
−
α
c
o
t
θ
c
x
0
0
β
s
i
n
θ
c
y
0
0
0
1
0
]
[
x
y
z
1
]
=
M
P
=
K
[
I
0
]
P' = \begin{bmatrix} \alpha & -\alpha cot \theta & c_x & 0 \\ 0 & \frac{\beta}{sin\theta} & c_y & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = MP = K \begin{bmatrix} I & 0 \end{bmatrix}
P′=
α00−αcotθsinθβ0cxcy1000
xyz1
=MP=K[I0]
其中
M
M
M 为投影矩阵。
K
=
[
α
−
α
c
o
t
θ
c
x
0
β
s
i
n
θ
c
y
0
0
1
]
K = \begin{bmatrix} \alpha & -\alpha cot \theta & c_x\\ 0 & \frac{\beta}{sin\theta} & c_y\\ 0 & 0 & 1 \end{bmatrix}
K=
α00−αcotθsinθβ0cxcy1
K
K
K 为摄像机内参数矩阵。内参数决定了摄像机坐标系下空间点到图像点的映射。
K K K 有5个自由度: α \alpha α、 β \beta β、 θ \theta θ、 c x c_x cx、 c y c_y cy
规范化投影变换:
上面得到的 P ′ = [ x y z ] P' = \begin{bmatrix} x \\ y \\ z \end{bmatrix} P′= xyz 是齐次坐标( P ′ P' P′ 是三行一列),需要转换为欧式坐标为 [ x z y z ] \begin{bmatrix} \frac{x}{z} \\ \frac{y}{z} \end{bmatrix} [zxzy]
引入世界坐标系:
- 摄像机坐标系描述三维物体的空间信息是否方便?
- 如何将物体从世界坐标系转到摄像机坐标系?
引入
R
R
R 、
T
T
T 矩阵,可以将世界坐标系
P
w
P_w
Pw 转换为摄像机坐标系
P
P
P :
P
=
[
R
T
0
1
]
P
w
=
[
R
T
0
1
]
[
x
w
y
w
z
w
1
]
P = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} P_w = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x_w \\ y_w \\ z_w \\ 1 \end{bmatrix}
P=[R0T1]Pw=[R0T1]
xwywzw1
有了摄像机坐标系
P
P
P,便通过上面推导转换为像素坐标系:
P
′
=
K
[
I
0
]
P
=
K
[
I
0
]
[
R
T
0
1
]
P
w
=
K
[
R
T
]
P
w
P' = K \begin{bmatrix} I & 0 \end{bmatrix} P = K \begin{bmatrix} I & 0 \end{bmatrix} \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} P_w = K \begin{bmatrix} R & T \end{bmatrix} P_w
P′=K[I0]P=K[I0][R0T1]Pw=K[RT]Pw
其中
[
R
T
]
\begin{bmatrix} R & T \end{bmatrix}
[RT] 被称为外参数矩阵,
K
K
K 为内参数矩阵。
M
=
K
[
R
T
]
M = K \begin{bmatrix} R & T \end{bmatrix}
M=K[RT]
M
M
M 为投影矩阵。
注意维度:
P
3
×
1
′
=
M
P
w
=
K
3
×
3
[
R
T
]
3
×
4
P
w
4
×
1
P'_{3\times1} = MP_w = K_{3\times3} \begin{bmatrix} R & T \end{bmatrix}_{3\times4} {P_w}_{4\times1}
P3×1′=MPw=K3×3[RT]3×4Pw4×1
设
M
=
[
m
1
m
2
m
3
]
M = \begin{bmatrix} m_1 \\ m_2 \\ m_3 \end{bmatrix}
M=
m1m2m3
,其中
m
i
m_i
mi 为一行4列。
P
′
=
M
P
w
=
[
m
1
P
w
m
2
P
w
m
3
P
w
]
P' = MP_w = \begin{bmatrix} m_1P_w \\ m_2P_w \\ m_3P_w \end{bmatrix}
P′=MPw=
m1Pwm2Pwm3Pw
转换为欧式空间(像素坐标):
(
m
1
P
w
m
3
P
w
,
m
2
P
w
m
3
P
w
)
(\frac{m_1P_w}{m_3P_w},\frac{m_2P_w}{m_3P_w})
(m3Pwm1Pw,m3Pwm2Pw)
这便是完整的摄像机模型(透视投影摄像机).
其他摄像机模型
当相对场景深度小于其与相机的距离时:弱透视投影摄像机:
各种摄像机模型的应用场合:
- 正交投影
- 更多应用在建筑设计(AUTOCAD)或者工业设计行业
- 弱透视投影在数学方面更简单
- 当物体较小且较远时准确,常用于图像识别任务
- 透视投影对于3D到2D映射的建模更为准确
- 用于运动恢复结构或SLAM