Stanford cs231A与cs231N是分别从传统方法和深度学习方法介绍计算机视觉的一些技术与应用。这本课程适合作为计算机视觉的入门课程,分别从目标的几何学和语义学上两个角度对图像进行分析。

slide 10: Active stereo & Volumetric stereo

使用一个光源发射器来代替相机,能够解决两张图片之间的关联问题。

通常可以使用激光,从上到下扫描这个物体的表面,可以获得一个非常精确的三维结构信息。

traditional stereo

传统的三维成像的方法:

volumetric stereo

slide

2019/09/26

silde 9: Detectors and descriptors

Detectors:

边缘: 图片中深度不连续,表面朝向不连续,反射、光照不连续的位置。

可以使用传统的canny算法进行边缘的检测,通常图片可以进行平滑或求导处理。

角点corner/blob光斑识别:角点通常较为突出,且具有重复性,局部性。可以使用harris角点检测算法来检测。

光斑可以使用拉普拉斯或高斯来检测:

常用的检测器SIFT:

HOG:

slide

2019/09/25

slide 8: Fitting and Matching

问题定义:

特征点匹配问题存在着许多难以解决的问题:

  • nosiy
  • outliers(外点)
  • missing data
  • intra-class variantion

拟合方法

least square methods:

最小二乘法用来拟合数据,可以一定程度上对较小的噪声鲁棒,但是对于较大的噪声处理效果不好。

RANSAC:

通常样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。

RANSAC为Random Sample Consensus的缩写,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它于1981年由Fischler和Bolles最先提出 。

RANSAC算法的输入是一组观测数据(往往含有较大的噪声或无效点),一个用于解释观测数据的参数化模型以及一些可信的参数。RANSAC通过反复选择数据中的一组随机子集来达成目标。 被选取的子集被假设为局内点,并用下述方法进行验证:

  • 随机选择一组样本子集,并假设所选择的子集都为局内点
  • 寻找一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
  • 用1中得到的模型去测试所有的其它数据,若某个点适用于估计的模型,认为它也是局内点inlier
  • 如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
  • 用所有假设的局内点去重新估计模型(譬如使用最小二乘法)
  • 最后,通过估计局内点与模型的错误率来评估模型。
  • 上述过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。

霍夫变换:

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。

起初的方法要求知道物体边界线的解析方程,但不需要有关区域位置的先验知识。这种方法的一个突出优点是分割结果的Robustness , 对数据的不完全或噪声不是非常敏感。

例如使用霍夫变换来找出图像中的直线(某些特定的形状),将原图中的每个点所在直线的参数空间画出来。当在参数空间中重叠最大的那个参数证明是所有数据都经过该参数的直线,因此可以认为参数所表示的直线为图中的直线。

图中每一个点都将对应到一条参数空间上的曲线,找到参数重叠最大的一个参数,即是大多数数据经过的直线的参数。

解释链接:https://zhuanlan.zhihu.com/p/47649796

使用hough算法变换之后,能够更好的进行图片之间的匹配。

slide

2019/9/25

slide 7: Multi-view geometry

问题描述:

从m张照片中的n个点中,去估计、还原出m个仿射矩阵,以及n个3D的点。

三维空间中的点和图像二维上的点存在一个仿射关系:

将三维空间中的点,通过这种映射关系映射到二维平面上。

factorization method(因式分解方法)

centering the data:

提出去图像点之间的质心:
$$
\hat{\mathbf{x}}_{i j}=\mathbf{x}_{i j}-\frac{1}{n} \sum_{k=1}^{n} \mathbf{x}_{i k}
$$
将仿射变换代人上式,得到三维空间中的质心位置:

经过数据的centering之后,每张图片的质心都将会映射到3D点云的质心上,将这个质心视为世界坐标系原点,进一步简化公式:

构造一个m x n的矩阵,表示不同视点拍摄的n个点的位置信息,如下:

对D矩阵进行SVD分解,选取前三大的奇异值构成一个新的矩阵(当rank=3时能够最小化F模使得其更加接近D矩阵)。

利用MS恢复出三维像素点云信息。

该方法的确定是难以解决视觉上的歧义、结构的相似性问题。

slide 6: Stereo(立体) Systems Multi-view geometry

接上一章,使用多视角的几何方法需要找到两个图像之间的关联点,得出他们的焦点即物体实际的位置,即得到了物体的三维点云表达。

通常的做法是将图像内物体的位置调整成水平平行的方式,关键点匹配效果好。

当特征点在同一个水平位置时更容易计算深度:

method

window base correlation:

上诉方法对图片光线不敏感,匹配效果不好,改进方案如下:

匹配问题存在很多难点,常常导致匹配错误:

使用下述方法可以提升精度:

SFM: structure from motion problem

SFM方法通过相机的移动来确定目标和几何关系,是三维重建的一种常见方法,使用RGB图像即可对图像进行恢复。

SFM算法流程:

  • 特征点提取(SIFT) 特征点匹配
  • 基础矩阵估计F(5/8点法)
  • 本质矩阵估计E
  • 本质矩阵分解为R和T(SVD分解)
  • 三维点云计算(三角形法)
  • 重投影(将三维点云重新投影到平面的方法,用于计算误差)
  • 重构的细化与优化

slide

2019/9/24

slide 5: Epipolar Geometry (对极几何)

从单张图片中重建出物体的三维结构,存在着巨大的困难。需要对物体的位置,姿态进行定位,需要从场景中的线、无穷远点判断场景的结构以及相机内参K。此外还需要一些其他先验,例如点、平面等的对应关系。由于视点的空间感很弱,因此画面存在歧义,重建难度大。

三角测量

通过两个视点来观察整个场景:

使用上诉的三角测距方法,其中两个相机的内参K已知:

通过找到两个图片的关联点,最小化距离。

Multi(stereo)-view geometry (多视角几何)

camera geometry:找到两张图像中的对应点,找出相机的内参矩阵,位置,以及位姿。

scene geometry: 从二维图像中恢复出三维场景的结果。

给出A图片中的一个点,如何从另一张图片中找出其对应点?

计算两张图像中,关联点的关联关系:

对于相机来说,我们通过调节相机参数使得两个视角的K均为单位矩阵简化函数的运算。

如上图,找到一个向量垂直于对极几何平面,得到上诉等式。

对上式进行变换:

进一步对上式进行分析,得到F变量:

已知F变量可以从一张图片中得到另一张图片的对应点,F变换包含了对极几何的两个视点以及相机内参的信息。此外F还反映了在视点下场景的变换关系:

F变换的估计

得到两张图片的F变换矩阵可以得到两张图像的关联点,于是有很多算法为估计F而提出:the eight-point algorithm八点法,通过选择图上的8个关联点,联立方程$P^{T}Fp’ = 0$,得到最终的结果。此外可以选择过完备的关联点对,联立方程通过SVD分解最小化误差的方式估计F。以及正则化八点法等等。

silde

2019/9/23

slide 4: Single View Metrology

2D环境下的变换

等距变换:
$$
\left[\begin{array}{c}{\mathrm{x}^{\prime}} \ {\mathrm{y}^{\prime}} \ {1}\end{array}\right]=\left[\begin{array}{ll}{\mathrm{R}} & {\mathrm{t}} \ {0} & {1}\end{array}\right]\left[\begin{array}{l}{\mathrm{x}} \ {\mathrm{y}} \ {1}\end{array}\right]=\mathrm{H}_{\mathrm{e}}\left[\begin{array}{l}{\mathrm{x}} \ {\mathrm{y}} \ {1}\end{array}\right]
$$
该变换对原始图片进行旋转和平移,不改变物体的相对位置和大小。

相似变换:
$$
\left[\begin{array}{l}{x^{\prime}} \ {y^{\prime}} \ {1}\end{array}\right]=\left[\begin{array}{cc}{S R} & {t} \ {0} & {1}\end{array}\right]\left[\begin{array}{l}{x} \ {y} \ {1}\end{array}\right]=H_{s}\left[\begin{array}{l}{x} \ {y} \ {1}\end{array}\right]
$$
对原始物体进行旋转、平移、缩放等操作,改变了物体的大小。

仿射变换:
$$
\left[\begin{array}{c}{\mathrm{x}^{\prime}} \ {\mathrm{y}^{\prime}} \ {1}\end{array}\right]=\left[\begin{array}{cc}{\mathrm{A}} & {\mathrm{t}} \ {0} & {1}\end{array}\right]\left[\begin{array}{l}{\mathrm{x}} \ {\mathrm{y}} \ {1}\end{array}\right]=\mathrm{H}_{\mathrm{a}}\left[\begin{array}{l}{\mathrm{x}} \ {\mathrm{y}} \ {1}\end{array}\right]
$$
该变换在一个方向上对图像进行拉伸。

投影变换:
$$
\left[\begin{array}{c}{\mathrm{x}^{\prime}} \ {\mathrm{y}^{\prime}} \ {1}\end{array}\right]=\left[\begin{array}{cc}{\mathrm{A}} & {\mathrm{t}} \ {\mathrm{V}} & {\mathrm{b}}\end{array}\right]\left[\begin{array}{c}{\mathrm{x}} \ {\mathrm{y}} \ {1}\end{array}\right]=\mathrm{H}_{\mathrm{p}}\left[\begin{array}{l}{\mathrm{x}} \ {\mathrm{y}} \ {1}\end{array}\right]
$$
交叉比例:

灭点和线

平面中的直线方程可以用矩阵来表示,两条直线叉乘得到垂直于该平面的垂线。

对于两条平行线,在齐次空间中,他们存在一个焦点(灭点)。该灭点位于垂直于两条线的一个方向向量上。

空间中的点或线都会在一个无限远的平面上汇聚于一个灭点:

图像中两条线相交于一个灭点,直线与夹角间存在下面的计算关系:

silde

2019/9/23

从单张图片中估计物体的几何结构

根据上一页的ppt可以看出来,当夹脚为0的时候,K变量中有5个自由度,需要通过三个角度来计算相机的内参k:

extension

计算出k之后,可以根据k去恢复相机坐标系中的场景朝向:

slide 3: camera calibertion

相机的标定是十分重要的一个步骤,从图片中预测出相机的位姿和焦距等。

下面是坐标映射方程:
$$
\mathrm{P}^{\prime}=\mathrm{M} \mathrm{P}_{\mathrm{w}}=\mathrm{K}[\mathrm{R} \quad \mathrm{T}] \mathrm{P}_{\mathrm{w}}
$$
相机标定的目的是从图像中估计出相机的内参和外参。

相机标定的目标为:已知物体在实际环境中的坐标,物体在图像中的坐标,预测映射矩阵M。映射矩阵M由相机的外参,内参矩阵,共有11个未知量。因此需要11个方程,6个correspondences可以解决这个问题。实际场景中,我们可以加入更多的约束,使得结果更加的robots。
$$
p_{i}=\left[\begin{array}{c}{u_{i}} \ {v_{i}}\end{array}\right]=\left[\begin{array}{c}{\frac{\mathbf{m}_{1} \mathrm{P}_{\mathrm{i}}}{\mathbf{m}_{3} \mathrm{P}_{\mathrm{i}}}} \ {\frac{\mathbf{m}_{2} \mathrm{P}_{\mathrm{i}}}{\mathbf{m}_{3} \mathrm{P}_{\mathrm{i}}}}\end{array}\right]=M P_{i}
$$
常用标定板进行相机的标定,用相机各个角度多次拍摄同一块标定板,然后将图片以及标定板间距输入程序中,即可算出相机的内参K(焦距,物距,倾斜度等等)。

slide

2019/09/20

slide 2: camera models

这一课主要对相机的历史,成像原理进行介绍。

1452年leonardo发现了暗箱开始,一直到1822年第一张相片问世,1908年出现彩色的相机,直到现在相机的性能有了巨大的提升。

小孔成像 pinhole camera

小孔成像原理如上,利用光线直线传播性质,通过相似三角形的比例关系得到成像的尺寸位置。成像的比例关系为物距和焦距的比例。

小孔的大小越大成像越模糊,因为光线存在部分的重叠。当小孔变小之后光线之间分离,得到清晰的成效效果。

使用凹透镜来实现光线的聚焦,在成像位置实现模糊和聚焦的区域。凹透镜同样使得相机拍摄的场景发生扭曲。

坐标系统

将场景转换到坐标系统上,在视网膜上,设置一个坐标原点添加坐标偏移,其中k,l表示一个缩放单位,即焦距长度转换为焦距需要一个变换:

三维到二维的转换如下:
$$
P=(x, y, z) \rightarrow P^{\prime}=\left(\alpha \frac{x}{z}+c_{x}, \beta \frac{y}{z}+c_{y}\right)
$$

齐次坐标系(homogeneous coordinates)

在传统的笛卡尔坐标系统中,两条平行线是永远不会相交的,但是在透视坐标系中,在无穷远处所有的平行线都会汇聚到一个点,这个点常常被称为灭点。

齐次坐标系常常用N+1个数字来表示N维坐标。用w表示与透视距离有关的系数,两个系统相互转换的关系如下:

进一步提取出一个相机内部参数矩阵,完成这种转变。

相机位置发生偏移时,通过调节camera matrix可以得到精确的坐标位置:
$$
P^{\prime}=\left[\begin{array}{cccc}{\alpha} & {-\alpha \cot \theta} & {c_{x}} & {0} \ {0} & {\frac{\beta}{\sin \theta}} & {c_{y}} & {0} \ {0} & {0} & {1} & {0}\end{array}\right]\left[\begin{array}{c}{x} \ {y} \ {z} \ {1}\end{array}\right]
$$
将一个眼前的物体拍摄到相机中,然后构建他的世界坐标系坐标,步骤如下:

  • 首先通过小孔成像的映射关系将实际物体的坐标映射到相机坐标中,需要提前获取的位置信息有物体的实际坐标,相机的内参即焦距、物距、倾斜角度。
  • 得到物体的相机坐标之后将这个坐标转换到世界坐标系中,即进行旋转、平移变换。

图像坐标—投射变换—>摄像机坐标—刚体变换—> 世界坐标

对于整个变换矩阵M,他还有着一些性质,可以直接判断相机是否有歪斜、单元横纵比等。

Slide

2019/9/20

slide 1: introduction

第一节课对计算机视觉两个关键技术进行一个的简要的回顾,这也是这门课之后的大纲内容。

Geometry

物体的几何学,需要从2D的图像中抽取出3D的信息,重点内容包含相机的标定,相机参数的估计(姿态和焦距)。单图片视角的重建,多图片视角的重建。对极几何等数学映射,结构光以及volumetric stereo(3D物体的体积估计)。

Semantics

语义分割对图像的理解,包括目标的分类、标定。这里头也面临很多困难,例如视角的不同,尺度的差异,关照的不同,形变,遮挡等等。

slide

2019/9/19