前言
本系列旨在记录武大遥感开设的《计算机视觉与模式识别》这门课程相关内容。原本是为了应对这门课程的期末考试,从而整理了一系列笔记。在课程结束后,笔者决定在此开源共享,帮助遥感学子以及广大读者入门计算机视觉领域。
介于武大开设的这门课对于未接触过CV的同学来说确实是比较“硬核”:对于课前不预习课后不复习的小白来说,就没有几节课听得懂,上课的PPT也基本是学会了的人才看的懂。。。于是,笔者记录的整个系列会力求语言通俗易懂,争取让小白也能学会。虽然不会涉及到过于深奥的知识,但是对于基础入门来说也完全足够。
建议读者可以对照《智能摄影测量学导论》这本书进行知识梳理,书籍的PDF版可以在评论区获取。
本系列内容会包括单视和多视觉几何、光束法平差和滤波、图像匹配和三维重建、经典统计和机器学习、深度学习等相关的知识。内容均基于个人理解完成,如有错误,欢迎指正!
1.物理基础
其实这一部分不需要了解太多,知道大概有什么即可。
光
光是一种电磁波,具有波粒二象性,通常认为光沿直线传播(实际在不均匀介质中可能并不会直线传播,但影响不大可以忽略)。
为什么要研究光呢?因为对于传统传感器来说,都是依靠光学原理进行成像的,少数例如LiDAR会使用微波等技术进行遥感探测。本系列也会介绍相关光学成像原理,不必担心。
摄影平台
计算机视觉和摄影测量与遥感的核心都是对视觉信息的处理,两者在算法上有相近之处。以拍摄平台(也就是传感器的载体)作为划分:
- 摄影测量与遥感:卫星、飞机、飞艇;无人机;车载测图系统;水下和深空平台等载体
- 计算机视觉:手持、机器人、车辆等载体
另外,按遥感领域来说,还分为航天摄影测量、航空摄影测量、地面近景摄影测量等,了解即可。
光学传感器
光学传感器说白了,就是相机。
这里要知道什么是CCD(光纤通信和电荷耦合器件)。CCD能够利用电子来捕获光线,原理是光电效应,是能够用于成像的元件。搭载CCD元件的相机即为数字摄像机。摄影测量中使用的专业光学相机,其主要成像器件就是CCD。
另外,互补式金属氧化物半导体CMOS,也可以作为成像器件使用。
相机的成像过程。就是光子从物体出发,经过相机的透镜到达CCD,被CCD捕获的光子会引起电压的变化,这些电压变化通过模数转换变为二进制01代码,记录在磁盘中,即为一个图像文件。
经由相机拍摄,三维的世界会被记录在二维的小小的一张像片中(有没有想到三体中的二向箔)。关于计算机视觉的研究中,一个重要的研究问题就是如何从二维的图像中恢复三维的世界,也就是三维重建。此处知道有这个事即可,具体内容会在之后章节具体讲述。
2.几何变换
几何变换是摄影测量学科的核心,需要重点掌握。什么是几何变换?例如把三维的世界点,通过某种方式映射到二维像片中,这种映射就是几何变换。接下来详细介绍。
点
二维空间中,点坐标的表示可以写为 x = ( x , y ) x=(x,y) x=(x,y),在二维基础上扩充一维,表示为 x = ( x , y , 1 ) x=(x,y,1) x=(x,y,1)。这种表示方法就是齐次坐标表达,例如 ( 2 x , 2 y , 2 ) . . . . . . ( k x , k y , k ) (2x,2y,2)......(kx,ky,k) (2x,2y,2)......(kx,ky,k),想要从齐次坐标恢复为二维坐标,只需要将前两项除以第三项即可。
有一个例外,就是摄影测量中的“灭点”,也就是二维图像中平行线在无穷远处的交点(如下图的红色点)
灭点的坐标表示为
(
x
,
y
,
0
)
(x,y,0)
(x,y,0)。所以齐次坐标的引入,可以帮助表达灭点、灭线等摄影测量中的专业内容,同时也能简化一些公式的推导。并且一般的摄影测量都是基于点完成的。
线、面
线的表达为 l = ( a , b , c ) l=(a,b,c) l=(a,b,c),表示在二维空间中由方程 a x + b y + c = 0 ax+by+c=0 ax+by+c=0 构成的一条直线。
关于线和点的一些几何关系可以由如下表达
- 点在线上: x ⋅ l = 0 x·l=0 x⋅l=0
- 线线相交: x = l 1 × l 2 x=l_1×l_2 x=l1×l2
- 两点一线: l = x 1 × x 2 l=x_1×x_2 l=x1×x2
- 灭线 ( 0 , 0 , 1 ) (0,0,1) (0,0,1)
面的表达为 π \pi π,在二维图像中,表达的就是空间本身。在三维空间中,可以表达为 π = ( a , b , c , d ) \pi=(a,b,c,d) π=(a,b,c,d),由方程 a x + b y + c z + d = 0 ax+by+cz+d=0 ax+by+cz+d=0表示。面的用处不多,不多赘述。
角
二维平面角一般用
θ
\theta
θ 表示。一个点在绕某个角度
θ
\theta
θ进行逆时针旋转的时候,可以用旋转矩阵
R
\mathbf{R}
R来表示,如下
其中
x
1
x_1
x1表示原始点,
x
2
x_2
x2表示旋转之后的点。
三维中的角度可以用欧拉角进行表示,其旋转矩阵可以表示为如下
其中,三个角度分别代表绕y-x-z轴旋转。三维中的角度不要求掌握,了解即可。
几何变换的层次
这里的几何变换单指同一个维度的变换,例如二维变换到二维,三维变换到三维。为方便书写,之后以2D和3D表示二维和三维。
1.刚体变换。指的是平移 T T T+旋转 R R R
2.相似变换。 在刚体变换的基础上加入缩放因子
λ
\lambda
λ。其实就是类似小学的相似三角形的道理,能够保证图像的形状不发生变化,大小可能变化。公式如下
x
2
=
λ
[
R
∣
T
]
x
1
x_2=\lambda[R|T]x_1
x2=λ[R∣T]x1写成矩阵形式为
3.仿射变换。继续放开条件,保证平行线依旧平行,不保证形状不变,可以写为
仿射变换有6个参数控制。
4.射影变换。射影变换的情况最普遍,只保持直线依旧是直线 这一个条件,故又称作“保线变换”。其他相似、平行等不再成立。有9个参数控制,不过可以把
h
33
h_{33}
h33设置为1,这样就只有8个未知参数控制
其中,
H
H
H又叫做单应性矩阵,是一个非奇异矩阵,可逆且
H
⋅
H
−
1
=
E
H·H^{-1}=E
H⋅H−1=E。
从3D到2D的几何变换——投影
上面介绍的一些几何变换都是单个维度下的变化,现在介绍跨维度的变换。
其实相机成像也就是从真实的3D世界映射到平面的2D像片,所以研究两个维度的相互转换十分重要。
1.正射投影。用X表示3D坐标,x表示2D平面坐标。将三维世界中的坐标点垂直投射在二维平面上,公式为
x
=
[
λ
I
∣
0
]
X
x=[\lambda I|0]X
x=[λI∣0]X
其中
λ
\lambda
λ用来建立两套坐标系之间的比例关系。正射投影式制作数字正射影像DOM的基础。
2.仿射投影。一种特殊的透视投影。先平行的投影到平均参考面 Π r \Pi_r Πr,然后再普通透视投影到二维平面 π \pi π上。在卫星摄影中常用。
如图中
P
P
P和
Q
Q
Q点先相互平行的投影到同一个参考平面
Π
r
\Pi_r
Πr上,表示为
P
′
P'
P′和
Q
′
Q'
Q′,然后再中心投影(透视投影)到成像面上。
3.透视投影。其实也就是小孔成像,也被叫做中心投影。想想初中物理学过的小孔成像原理。透视投影是物体到平面或线阵相机最普遍的成像方式,简单表示为
x
=
[
X
Z
Y
Z
1
]
T
x=[\frac{X}{Z}\quad \frac{Y}{Z}\quad 1]^T
x=[ZXZY1]T其中X,Y,Z代表物点的三维坐标,x表示物点投射在平面上的坐标。公式具体如何推导此处不用细究,后文会讲。
相机坐标系及共线方程
图像坐标一般用原点在左上角的左手系,物体坐标则是右手世界系,此外还可能涉及一系列中间坐标系,所以,物像之间需要一定的转换,使两套观测值(二维和三维)处在同一个坐标系下。于是有了相机坐标系
相机的内方位元素为
K
K
K,用
x
c
x_c
xc表示相机坐标,x是像片的像素坐标,有如下转换公式
x
=
K
x
c
x=Kx_c
x=Kxc其中
K
K
K展开成矩阵为
其中
s
s
s代表剪形畸变,用来确定x轴和y轴是否垂直,通常取
s
=
0
s=0
s=0;
f
x
f_x
fx和
f
y
f_y
fy分别代表相机在x轴和y轴的焦距,一般取
f
x
=
f
y
=
f
f_x=f_y=f
fx=fy=f;
x
0
x_0
x0和
y
0
y_0
y0代表相机光轴打在影像面上形成的坐标,一般是投影面中心点。整个
K
K
K矩阵代表相机的内方位元素,只和相机自身有关,代表相机的自身性质。
上式完成了二维像片向相机坐标系的转换,那么三维世界的坐标点也要转换到相机坐标系之下。利用三维刚体变换进行转换,如下式: X c = [ R ∣ T ] X w X_c=[R|T]X_w Xc=[R∣T]Xw其中 X c X_c Xc代表相机坐标, X w X_w Xw代表世界坐标, R R R和 T T T统称为外方位元素。
读者可能会疑惑,为什么一个是小写 x c x_c xc,另一个是大写 X c X_c Xc。这里进行说明: X c = [ X c , Y c , Z c ] X_c=[X_c,Y_c,Z_c] Xc=[Xc,Yc,Zc]是三维的坐标,而 x c = 1 Z c [ X c , Y c , Z c ] x_c=\frac{1}{Z_c}[X_c,Y_c,Z_c] xc=Zc1[Xc,Yc,Zc]也是三维的坐标,两者都是表示的同一个三维世界点在相机坐标系下的三维坐标,只不过相差了一个比例因子 1 Z c \frac{1}{Z_c} Zc1,所以 x c x_c xc又称作归一化坐标,用比例因子进行了归一化,很好理解吧。
因为 X c X_c Xc和 x c x_c xc只相差一个比例因子 λ = 1 Z c \lambda=\frac{1}{Z_c} λ=Zc1,于是联立前两个式子,有 x = λ K [ R ∣ T ] X w = λ X ~ x=\lambda K[R|T]X_w=\lambda \tilde{X} x=λK[R∣T]Xw=λX~这个式子表示了二维像片上的坐标 x x x 和三维世界点坐标 X c X_c Xc之间的转换关系。为了消除比例因子 λ \lambda λ,用上述方程展开式的第一二行比上三行得到统一相机坐标系后的透视投影方程: x = X ~ Z ~ ; y = Y ~ Z ~ x=\frac{\tilde{X}}{\tilde{Z}};y=\frac{\tilde{Y}}{\tilde{Z}} x=Z~X~;y=Z~Y~如果相机检校(后续会单独出一篇文章讲述)已经完成,也就是获得了内方位矩阵 K K K,具体来说就是知道了 x 0 , y 0 , f x_0,y_0,f x0,y0,f三个参数。那么,令 X ˉ \bar{X} Xˉ作为转换到相机坐标系下的三维点,有 X ˉ = [ R ∣ T ] X w \bar{X}=[R|T]X_w Xˉ=[R∣T]Xw,把该式以及内方位元素代入上述透视投影方程,解得二维像片 x x x和相机坐标系下的三维坐标 X ˉ \bar{X} Xˉ之间的关系如下: x − x 0 = − f X ˉ Z ˉ ; y − y 0 = − f Y ˉ Z ˉ x-x_0=-f\frac{\bar{X}}{\bar{Z}};y-y_0=-f\frac{\bar{Y}}{\bar{Z}} x−x0=−fZˉXˉ;y−y0=−fZˉYˉ这个式子就是最终的共线条件方程,是单像解析的基础,也是摄影测量常用的形式,可以说非常重要,务必牢记。(注意:其中f前面的负号是为了和世界坐标系的Z轴一致)
当然,如果相机检校未完成,也就是内方位元素
K
K
K未知,那么可以把相机内外方位元素写在一起得到相机矩阵
P
P
P
P
=
K
[
R
∣
T
]
P=K[R|T]
P=K[R∣T]P矩阵表达了中心投影(透视投影)下物像的几何关系,也就是中心投影的几何关系由相机矩阵P决定
x
=
λ
P
X
w
x=\lambda PX_w
x=λPXw
小结
本节简单介绍了相关基础知识。其中物理基础作了解即可,几何变换部分需要熟练掌握。几何变换以及共线条件方程是贯穿整个课程的基础,必须理解,读者务必仔细研读文章,不要有数学恐惧,其实认真揣摩一下还是很容易明白的。有什么不懂的地方可以百度、ChatGPT、以及评论区提出都可以,不过最好还是自己独立思考,锻炼思维。