计算机视觉学习笔记

xeonds

2023-11-06 20:02:29

之前导论课程上学的基本都是思想和原理,到这里就开始接触真正数学和工程的方法了。

这门课的研究思路很清晰,就是围绕标题,自底向上,借助数学工具,一步一步实现各种复杂的功能以及算法,最终一步步接近让计算机拥有“视觉”的目标。

首先是数据的表示,概念的抽象,如何用离散的数据去近似抽象的视觉这个概念。这个过程通过直观理解和数学工具,以及建模方法,为计算机视觉提供了一种可行的数学上的表示和运算方法:像素,以及基于像素的一系列运算,比如滤波,仿射变换,更高自由度的变换,基于像素颜色值的变换等等,以及由这一系列变换得到的图像特征。

其次,是研究在图像的像素模型下,利用数学方法去研究分析以及利用图像特征的方法。这其中,就有诸如角点检测,边缘检测,全景图拼接以及处理等命题。

生成对抗网络GAN

通俗来说就是让两个网络作为对抗组,比如说生成图片的NN和鉴别图片的NN,两方轮流作为输入输出(也就是交替训练),在循环中不断提升两个网络的效果,最终达到生成内容以假乱真的效果。NN炼丹的关键是其中的loss函数设计,不过他们的做法是直接用另一个NN作为这个NN的loss函数来回馈训练效果。

目前比较突出的成果一个就是近几年的Stable Diffusion,算是这里边比较突出的一个了。这东西在图像的有损压缩里边用的也多,至于有损压缩的应用嘛,一般在一些需要使用算力去换带宽的场合很适用,比如卫星数据传输。其他应用就是图像的填充和补全,比如合理推测图像的缺失部分内容。另外就是,网络的输入不一定是噪声,输出也不一定是真假。改变其输入和输出的类型,可以赋予NN以不少是实用场景。

GAN的优点是效果好,比以前用的高斯模糊的效果都很好。但是问题也很突出,就是GAN很难训练。GAN的两方是生成器和判别器,训练的结果很大程度上与两方的能力是否足够接近有很大关系。

另外就是GAN的思想重点在对抗,并没有要求其他的条件。所以比如说可以有多个判别方,有多个生成方等。

Attention Is All You Need

注意力机制一开始是应用于机器翻译领域,通过一个合适的重点词语权重标注机制,让算法更有重点地提取概要。如今的GPT也很大程度上受到注意力机制的启发才产生了不断预测下一个词向量概率的朴素思想。

注意力机制可以理解成给分词加上权重。将一个句子进行分词作为一个向量,将这个词语向量通过Softmax这样的激活函数进行处理之后,再借助矩阵进行变换,从而得到处理后的,带有权重的词向量。处理后的词向量,权重总和为1。加权后的句子,再进行翻译,效果就会好很多了。

至于将Attention思想迁移到CV领域进行应用的方法,关键是将图像”语义化“。一个常用的方法是将图像分割,分割成小块,对每个小块采用相同的思想。这就是VIT(Vision Transformer)的思想。

激活函数

Softmax

Softmax函数是一种常用的激活函数,主要用于将多分类问题中的输出值转换为概率分布。在神经网络中,输出层通常使用softmax函数,将输出值转换为每个类别概率。

Softmax函数的定义如下: \[ Softmax(x) = e^(x_i) / (e^(x_1) + e^(x_2) + ... + e^(x_n)) \] 其中,x是一个K维向量,Softmax函数的输出也是一个K维向量,并且每个元素的范围都在0到1之间,并且所有元素的和为1。

在多分类问题中,假设输出层有K个神经元,每个神经元代表一个类别。Softmax函数的作用是将输出层的输出转换为每个类别对应的概率。例如,如果输出层输出为[1.2, 2.3, 3.1],则对应的概率为[0.21, 0.34, 0.45]。

Softmax函数可以解决输出值非常大的问题,因为它可以防止输出值过大而导致的梯度消失或梯度爆炸。此外,Softmax函数还可以进行归一化,使得概率和为1,使得概率分布更加合理。

期末划重点咯

sudo 老师给我分

有个压缩包,里边画红钩的都是重点

占比大概NN和传统方法4-6开

计算机视觉复习

找到一个学长的复习笔记如下

图像和图像滤波

滤波的种类:

滤波的应用

边缘检测

边缘的特征

怎样通过导数来反映边缘

如何计算数字图像的导数?

  1. 重建连续图像,然后计算导数

  2. 采用离散导数(有限差分): ==图像的梯度相当于两个相邻像素之间的差值== \[ \frac { \partial f } { \partial x } [ x , y ] \approx F [ x + 1 , y ] - F [ x , y ] \] 可以使用线性滤波器实现

    ==梯度的方向 垂直于边缘的方向==,梯度的方向是 图像函数 f(x,y) 变化最快的方向,当图像中存在边缘时,一定有较大的梯度

图像梯度

图像梯度是图像函数在 x ,y 两个方向的导数,

幅值: \[ \| \nabla f \| = \sqrt { \left( \frac { \partial f } { \partial x } \right) ^ { 2 } + \left( \frac { \partial f } { \partial y } \right) ^ { 2 } } \] 方向: \[ \theta = \tan ^ { - 1 } \left( \frac { \partial f } { \partial y } / \frac { \partial f } { \partial x } \right) \] ==要计算图像梯度,首先要图像去噪,使用高斯核在图像上卷积,平滑图像==

可以将两次滤波 (高斯滤波、差分滤波)合成一步实现

mark
二维边缘检测使用的图像算子:
  1. Sobel 算子

    mark

非最大抑制

检查像素是否为沿梯度方向的局部最大值 (需要进行像素差值?)

  1. ==Canny 边缘检测器==

    1. 用高斯导数滤波
    2. 获得梯度的幅值和方向
    3. 非最大抑制
    4. 连接与滞后阈值化:
      • 定义高低两个阈值
      • 用==高阈值来寻找边缘曲线的起点,用低阈值来确定后继点==,进行连接

    Canny 边缘检测器的参数:

图像的插值和重采样

图像采样

若原始图像的频率过高,先对图像滤波,然后子采样,构建高斯金字塔

图像插值

角点检测

Harris 角点检测:将窗口平移,比较平移前后 w 内每个像素的差异平方和(SSD) \[ E ( u , v ) = \sum _ { ( x , y ) \in W } [ I ( x + u , y + v ) - I ( x , y ) ] ^ { 2 } \]

\[ \begin{aligned} E ( u , v ) = & \sum _ { ( x , y ) \in W } [ I ( x + u , y + v ) - I ( x , y ) ] ^ { 2 } \\ \approx & \sum _ { ( x , y ) \in W } \left[ I ( x , y ) + I _ { x } u + I _ { y } v - I ( x , y ) \right] ^ { 2 } \\ \approx & \sum _ { ( x , y ) \in W } \left[ I _ { x } u + I _ { y } v \right] ^ { 2 }\\ \approx Au^2+2Buv +Cv^2\\ \end{aligned} \]

\[ A = \sum _ { ( x , y ) \in W } I _ { x } ^ { 2 } \quad B = \sum _ { ( x , y ) \in W } I _ { x } I _ { y } \quad C = \sum _ { ( x , y ) \in W } I _ { y } ^ { 2 } \]

算法实现:

  1. 计算图像在 X, Y 两个方向的梯度

  2. 计算两个方向上梯度的乘积

  3. 使用高斯函数对 \(I_x^2,I_y^2,I_xI_y\) 进行高斯加权,生成矩阵的元素 A,B,C

  4. 计算每个像素的 Harris 响应值 R, 并对小于某个阈值的 R 置 0 \[ R = \left\{ R : \operatorname { det } M - \alpha ( \operatorname { trace } M ) ^ { 2 } < t \right\} \]

  5. 在邻域内进行非最大抑制,局部最大值即为图像的角点

特征不变性

我们希望角点的位置对光度变换具有不变性 (图像变换之后,角点位置不变),对几何变换具有协变性 (相应位置检测到同一特征)

不变性:

自动尺度选择:

斑点检测:

斑点是指二维图像中和周围颜色有颜色差异和灰度差异的区域,因为斑点代表的是一个区域,所以其相对于单纯的角点,具有更好的稳定性和更好的抗干扰能力.

特征描述与匹配

特征描述符

特征匹配

变换与卷绕

什么是图像卷绕:更改图像的定义域

常见的变换

线性变换

线性变换的性质

原点到原点

直线到直线

平行线保持平行

比率被保持

线性变换的组合是线性变换

平移不是 2D 坐标上的线性变换,我们需要 添加一个坐标 -> 齐次坐标

仿射变换

任何最后一行 为 [0,0,1] 的 3·3 矩阵表示的转换称为仿射变换仿射变换是线性变换和平移的组合

变换完成后,平面位置不变

基本的仿射变换:

性质

透视变换、投影变换、同态映射

最后一元素固定为1 ,共有8个参数, 是成像平面的变换,仿射变换是特例

卷绕

卷绕有两种:

  1. 前向卷绕
  2. 反向卷绕

变换后的像素位置如果不是整数: 将像素值分配给四个最近邻,记录每个点的权重并在最后归一化

效果:混叠与模糊

图像配准

配准算法的流程,怎么实现

优化方式

最小二乘法

图像配准算法

给定图像 A 和 B

  1. 计算 A、B 的图像特征
  2. 匹配 A、B 之间的特征
  3. 使用匹配集计算 A 到 B 的单应映射矩阵的最小二乘解

最小化残差平方和

定义残差: \[ \begin{array} { l } { r _ { \mathbf { x } _ { i } } \left( \mathbf { x } _ { t } \right) = \left( \mathbf { x } _ { i } + \mathbf { x } _ { t } \right) - \mathbf { x } _ { i } ^ { \prime } } \\ { r _ { \mathbf { y } _ { i } } \left( \mathbf { y } _ { t } \right) = \left( \mathbf { y } _ { i } + \mathbf { y } _ { t } \right) - \mathbf { y } _ { i } ^ { \prime } } \end{array} \] 将 n 个点形成的 2n 个方程写成矩阵方程: \[ \left[ \begin{array} { l l } { 1 } & { 0 } \\ { 0 } & { 1 } \\ { 1 } & { 0 } \\ { 0 } & { 1 } \\ { 0 } & { 1 } \\ { \vdots } \\ { 1 } & { 0 } \\ { 0 } & { 1 } \end{array} \right] \left[ \begin{array} { l } { x _ { t } } \\ { y _ { t } } \end{array} \right] = \left[ \begin{array} { c } { x _ { 1 } ^ { \prime } - x _ { 1 } } \\ { y _ { 1 } ^ { \prime } - y _ { 1 } } \\ { x _ { 1 } ^ { \prime } - x _ { 2 } } \\ { y _ { 2 } ^ { \prime } - y _ { 2 } } \\ { \vdots } \\ { x _ { n } ^ { \prime } - x _ { n } } \\ { y _ { n } ^ { \prime } - y _ { n } } \end{array} \right] \]

\[ At =b \]

找到 t ,最大限度的减少 \[ \| \mathbf { A } \mathbf { t } - \mathbf { b } \| ^ { 2 } \]

\[ \begin{array} { c } { \mathbf { A } ^ { \mathrm { T } } \mathbf { A } \mathbf { t } = \mathbf { A } ^ { \mathrm { T } } \mathbf { b } } \\ { \mathbf { t } = \left( \mathbf { A } ^ { \mathrm { T } } \mathbf { A } \right) ^ { - 1 } \mathbf { A } ^ { \mathrm { T } } \mathbf { b } } \end{array} \]

对于仿射变换: \[ \left[ \begin{array} { l } { x ^ { \prime } } \\ { y ^ { \prime } } \\ { 1 } \end{array} \right] = \left[ \begin{array} { l l l } { a } & { b } & { c } \\ { d } & { e } & { f } \\ { 0 } & { 0 } & { 1 } \end{array} \right] \left[ \begin{array} { l } { x } \\ { y } \\ { 1 } \end{array} \right] \] 有六个未知数,每个匹配有两个方程,我们需要三个匹配

残差: \[ \begin{aligned} r _ { x _ { i } } ( a , b , c , d , e , f ) & = \left( a x _ { i } + b y _ { i } + c \right) - x _ { i } ^ { \prime } \\ r _ { y _ { i } } ( a , b , c , d , e , f ) & = \left( d x _ { i } + e y _ { i } + f \right) - y _ { i } ^ { \prime } \end{aligned} \] 对于同态映射(透视变换) \[ \left[ \begin{array} { c } { x _ { i } ^ { \prime } } \\ { y _ { i } ^ { \prime } } \\ { 1 } \end{array} \right] \cong \left[ \begin{array} { l l l } { h _ { 00 } } & { h _ { 01 } } & { h _ { 02 } } \\ { h _ { 10 } } & { h _ { 11 } } & { h _ { 12 } } \\ { h _ { 20 } } & { h _ { 21 } } & { h _ { 22 } } \end{array} \right] \left[ \begin{array} { c } { x _ { i } } \\ { y _ { i } } \\ { 1 } \end{array} \right] \]

\[ \begin{aligned} x _ { i } ^ { \prime } \left( h _ { 20 } x _ { i } + h _ { 21 } y _ { i } + h _ { 22 } \right) & = h _ { 00 } x _ { i } + h _ { 01 } y _ { i } + h _ { 02 } \\ y _ { i } ^ { \prime } \left( h _ { 20 } x _ { i } + h _ { 21 } y _ { i } + h _ { 22 } \right) & = h _ { 10 } x _ { i } + h _ { 11 } y _ { i } + h _ { 12 } \end{aligned} \]

mark

Ah = 0 的非平凡最小二乘解,即为 \(A^TA\) 具有最小特征值的特征向量

RANSAC 随机抽样一致

如何计算

Ransac 算法

  1. 随机选择 S 个样本
  2. 使用这 s 个样本求得一个解
  3. 计数符合模型的 inliers 数
  4. 重复 N 次
  5. 选择具有最多 inliers 数的模型
  6. 使用所有的 inliers 点,采用最小平方拟合

实验轮数的确定

\[ \begin{array} { l } {{ 1 } - { P } = \left( { 1 } - { p } ^ { s } \right) ^ { { R } } } \\ { { R } = \frac { \log ( 1 - \boldsymbol { P } ) } { \log \left( \mathbf { 1 } - \boldsymbol { p } ^ { s } \right) } } \end{array} \]

相机

哪些是内参,哪些是外餐

坐标系

相机参数

照相机由几个参数描述:

从相机坐标到像素坐标

mark

从世界坐标到像素坐标

mark \[ \boldsymbol { \Pi } = \mathbf { K } [ \mathbf { R } | - \mathbf { R } \mathbf { c } ] \]

全景图

单视图建模

用消失点计算高度

mark

相机标定

==估计相机的参数==

立体视觉

深度计算

mark

双视图几何

极线

基础矩阵(本质矩阵):用于已标定

基本矩阵:用于未标定

运动恢复结构

相机标定的步骤

最小化重投影误差平方和

光的感知

光度测量

朗伯反射率

\[ I = k_dN*L \]

图像强度 = 反照率*表面法线方向*光源方向

对每一个像素可以求解此式获得表面法线方向

法线计算深度

通过相邻两个像素点 xyz 做差 ,可以获得一个表面向量,这个表面向量和法线垂直,每条法线可以给出 z 的两个线性约束 \(z_{x+1,y}, z_{x,y}\) ,通过求解矩阵方程计算 z 的值

mark

图像分类

  1. 收集带标签的图像数据库
  2. 使用机器学习算法训练图像分类器
  3. 用测试图像评估分类器的效果

深度学习