Tian Jiale's Blog

计算机视觉-目标检测

图像预处理

空间域处理

点运算

  • HE

    • 直方图均衡
  • AHE

    • 自适应直方图均衡(局部均衡、模板滑动)
  • CLAHE

    • 限制对比度自适应直方图均衡(裁剪均衡直方图、线性插值)

形态学运算

  • 膨胀

    • 高亮部分进行膨胀,类似于领域扩张
  • 腐蚀

    • 高亮部分被腐蚀,类似于领域被蚕食
  • 开运算

    • 先腐蚀再膨胀,去掉目标外部的孤立点
  • 闭运算

    • 先膨胀再腐蚀,去掉目标内部的孔

临域运算

  • 卷积/滤波

    • 平滑均值滤波/卷积

    • 平滑中值滤波/卷积

      • 去除椒盐
    • 平滑高斯滤波/卷积

      • 模拟人眼、延伸为金字塔
    • 梯度 Prewitt 滤波/卷积

      • 梯度渐变
    • 梯度 Sobel 滤波/卷积

      • 梯度渐变+另一方向高斯平滑
    • 梯度 Laplacian 滤波/卷积

      • 团块检测、边缘检测、锐化
    • 其他滤波/卷积

  • 金字塔

    • 高斯金字塔

      • 目的:得到一系列尺寸逐渐减小的图像
      • 操作:先进行图像平滑(高斯滤波/卷积),再进行降采样
    • 拉普拉斯金字塔

      • 目的:保留所有层所丢失的高频信息,用于图像恢复
      • 操作:原图-高斯金字塔进行上采样

频率与处理

傅里叶变换

  • 内容:一个信号可以由足够多个不同频率和幅值的正余弦波组成

  • 作用:信号分解

  • 欧拉公式(e^(ix) = cosx + isinx)描述的是一个随着时间变化,在复平面上做圆周运动的点;傅里叶变换描述的是一系列这样的点的运动叠加的效应

  • 离散傅里叶变换:∑[n=-∞, ∞]x(n)*e^(-iwn)

  • 二维傅里叶变换:f(u, v) = ∑[x=0,M-1] ∑[y=0, N-1] f(x, y)e^(-j2π(ux/M+vy/N))

  • 基于傅里叶变换的滤波

    • 低通滤波
    • 相位滤波
    • 频谱滤波
  • 傅里叶变换的不足

    • 缺乏时间和频率的定位功能
    • 对于非平稳信号的局限性
    • 在时间和频率分辨率上的局限性
  • 短时傅里叶变换(STFT)

    • 原理:设置窗格,对信号分段,认为窗格内的信号是平稳的
    • 优点:可以获得频域信息的同时可以获得时域信息
    • 缺点:窗格大小很难设置

小波变换

  • 起源:将傅里叶变换的无限长的三角函数基换成了有限长的会衰减的小波基

  • 原理:将原始信号表示为一组小波基的线性组合,然后通过忽略其中不重要的部分达到数据压缩(即降维)的目的

  • 小波函数

    • 特点:1.均值为零 2.在时域和频域都局部化
  • 常用小波函数

    • Haar 系列

      • 方波/最简单
    • Daubechies 系列

    • Moret 系列

    • Sym 系列

    • Meyer 系列

    • Coif 系列

图像特征与描述

颜色特征

量化颜色直方图

  • 适用颜色空间:RGB、HSV 等颜色空间
  • 操作:颜色空间量化,单元(bin)由单元中心代表;统计落在量化单元上的像素数量
  • 优势:计算高效
  • 劣势:量化问题、稀疏

聚类颜色直方图

  • 适用颜色空间:Lab 等颜色空间
  • 操作:使用聚类算法对所有像素点颜色向量进行聚类;单元(bin)由聚类中心代表

优化

  • 采用二次距离法
  • 对颜色直方图事先进行平滑过滤,即每个 bin 中的像素对于相邻的几个 bin 也有贡献

几何特征

边缘(Edge)

  • 定义:像素值函数快速变化的区域->一阶导数的极值区域

  • 作用

    • 物体识别
    • 视角变换
  • 边缘提取

    • 高斯滤波
    • 一阶导数获取极值
    • 梯度(幅值/强度)增加最快 方向
  • 边缘提取的尺度问题:不同标准差的滤波能捕捉到不同尺度的边缘

特征点(Corner)

  • 性质

    • 可重复性
    • 显著性
    • 抗图片变换(外貌变换/亮度、光照,几何变换/平移、选择、尺度)
  • 作用

    • 图片配准/拼接
    • 运动跟踪
    • 物体识别
    • 机器人导航
    • 3D 重建
  • Harris 角点

    • 特点:在任何方向(实际为 x,y)上移动小观察窗,导致大的像素变动

    • 数学模型:E(u, v) = ∑[x, y]w(x, y)[ I(x+u, y+v) - I(x, y) ]²

    • 检测方法

      • 图像中直线:一个特征值大,另一个特征值小
      • 图像中平面:两个特征值都小,且近似相等
      • 图像中角点:两个特征值都大,且近似相等
  • Fast 角点

    • 特点:某像素与周围领域内足够多的像素点处于不同的区域,则为焦点或某些属性与众不同
    • 检测方法:对兴趣点所在圆周上 16 个像素点进行判断,若当前中心像素暗或亮,则将其定为角点
    • 缺点:无多尺度特征、没有方向信息、失去旋转的不变性

斑点(Blob)

  • 拉普拉斯梯度:一阶导极值点->二阶导数零点
  • 缺点:对噪声很敏感
  • 优化:高斯卷积滤波降噪处理,再采用 Laplace 算子进行边缘检测
  • 斑点判断:高斯拉普拉斯滤波图找极值点->斑点

基于关键点的特征描述子

SIFT

  • 特点

    • 具有良好的不变性:对旋转、缩放、平移、亮度变化、噪声有一定程度的稳定性
    • 独特性好,信息量能丰富:适用于在海量特征数据库中进行快速、准确的匹配
    • 多量性:即使少数物体也可以产生大量 SIFT 特征
    • 计算快:经过优化的 SIFT 匹配算法甚至可以达到实时性
  • 计算步骤

    • 在 DoG 尺度空间中获取极值点/关键点:LoG 空间优化为 DoG 空间(差分高斯)
    • 对关键点处理:1.位置插值(获得精确的关键点) 2.去除边缘点
    • 关键点的方向估计
    • 关键点的描述子的生成:1.区域坐标旋转 2.计算采样区域的直方图
  • 具体实现

    • 构造高斯金字塔:对每一层用不同的参数 σ 做高斯模糊,使得每一层金字塔有多张高斯模糊图像,每一层的第一张图像是由上一层中倒数第三张图像降采样得到的

    • 计算高斯差分空间:相邻的图像进行差分形成差分金字塔

    • 判断极值点:以 ✗ 为检测点,除了大于同层所包围的 8 个点以外,还有上一层的 9 个点与下一层的 9 个点

    • SIFT-特征点方向估计

      • 在尺度上计算梯度直方图:8 方向,以特征点为中心、以 3×1.5σ 为半径
      • 获取最高值方向为关键点主方向
      • 为匹配的稳定性,将超过最高值 80%的方向,做为辅方向
      • 将原图像 x 轴转到与主方向相同的方向
      • 在旋转后的坐标上采用 16×16 的像素窗计算梯度幅值和方向,4×4 分别计算得到 128 维特征向量

SURF

  • Haar-like 特征

    • 分类

      • 边缘特征
      • 线性特征
      • 中心特征
      • 对角线特征
    • 特征模板:由以上特征组合而成

    • 特征模板的特征值:白色矩形像素和减去黑色矩形像素和

    • Haar 特征值反映了图像的灰度变化情况

  • 优化内容

    • 把 SIFT 中的高斯二阶微分的模板简化,使得卷积平滑操作仅需要转换成加减运算
    • 在方向确定阶段,在圆形区域计算 x,y 方向的 Haar 小波响应,找到模最大的扇形方向
  • 特点

    • 使用 Hessian 矩阵变换图像,极值检测只需计算 Hesian 矩阵行列式(用一个简单方程求行列式近似值作为优化),使用盒状模糊滤波(特征模板)求高斯模糊近似值
    • SURF 不使用降采样,通过保持图像大小不变,但改变盒状滤波器的大小来构建尺度金字塔
    • 在计算关键点主方向以及关键点周边像素方向的方法上,SURF 不使用直方图统计,而是使用哈尔(haar)小波转换,降至 64 维

ORB

  • 理论基础:FAST 角点的特征点检测(缺乏尺度不变性)、BRIEF 特征描述技术(缺乏旋转不变性)

  • BRIEF

    • 先平滑图像,然后在特征点周围选择一个 Patch,然后在这个 Patch 内通过一种选定的方法来挑选出来 n(d)个点对

    • 比较点对中两个像素的大小,进行如下赋值:τ(p; x, y)=p(x)<p(y) ? 1:0;

    • 所有 n(d)个点对,都进行比较,生成一个 n(d)长的二进制串

    • 点对的生成方式(共 5 种)

      • 1.X 和 Y 都服从在[-S/2, S/2]范围内的均匀分布,且相互独立
      • 2.X 和 Y 都服从均值为 0,方差为 S²/25 的高斯分布,且相互独立,即 X 和 Y 都以原点为中心,进行同方差的高斯分布
    • 点对的位置一旦选定,就不再更改/每一个关键点都以此为基础

  • ORB 对 BRIEF 的改进:以关键点和取点区域的形心(圆形)的连线为 X 轴建立坐标系,计算形心时,圆形区域上每个点的“质量”是其对应的像素值

其他特征提取

LBP(局部二值模式)

  • 具体实现

    • 将每个像素点与周围点大小比较:1.半径为 R 的圆上,均匀采样 P 个点 2.大小量化为 0 或 1
    • 多个 bit 组成一个数,统计每个数的直方图
  • 旋转不变性的解决方案:将得到的二进制数按位旋转,取最小的作为最终 LBP 值

  • 改进的 LBP:将 3×3 临域扩展到任意邻域,且用圆形临域代替正方形临域

Gabor

代码实现

pip install opencv-contrib-python

深度学习之前的目标检测

图像分割

含义

根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交叠的区域,并使这些特征在同一区域内呈现出相似性,而在不同区域内呈现出明显的差异性

分割依据

灰度值的不连续性和相似性

分类

  • 基于阈值

    基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中的每个像素的灰度值与阈值相比较,最后将像素根据比较结果分到合适的类别中/其实就是分类合并

  • 基于边缘

    根据图像局部特征不连续性进行分割

  • 基于区域

    将图像按照相似性准则分成不同的区域

    方法:种子区域生长法、区域分裂合并法、分水岭法

  • 基于图论

    Graph Cuts 分割

    Grab Cuts 分割

人脸检测

Haar-like 特征

依据特征模板(15 种、不同位置、不同缩放)

数量非常多

级联分类器

理解:每次选取少量特征多次匹配所选要素

含义:级联分类器就是将多个强分类器连接在一起进行操作

每一个强分类器由若干个弱分类器加权组成

行人检测

HOG+SVM

  • HOG:方向梯度(矢量)直方图

    • 将整个图像进行 Gamma 空间、颜色空间归一化(减弱对比度与局部光照影响)

    • 梯度计算

      分别计算水平、垂直梯度

      对于彩色图,选取梯度幅值最大的通道

    • Block 拆分

      16×16 的 Bolck,步长为 8,50%重合

      包含 2×2 个 Cell

      每个 Cell 是 8×8

    • 计算 Cell 的梯度直方图

      9 个方向 bin(0-180)

      累计梯度幅值

      使用位置高斯加权

      相邻 bin 使用线性插值

    • 串联所有 Block 直方图

      64×128 图片:7×15Block、7×15×(2×2)×9=3780 维

    • 收集 HOG 特征

  • SVM

    • 通过映射到超平面来完成样本分割
    • 带约束条件的极值问题???
    • 松弛变量:防止因少量数据的融合或交叉而对结果产生的较大的影响
    • 映射到高维空间解决线性不可分数据的问题

DPM(可变形的组件模型)

  • 提取 DPM 特征图,将原图像进行高斯金字塔上采样(双线性插值),提取 DPM 特征图
  • 对原图像的 DPM 特征图和训练好的 Root filter 做卷积操作,得到 Root filter 响应图
  • 对于 2 倍图像的 DPM 特征图,和训练好的 Part filter 做卷积操作,从而得到 Part filter 的相应图
  • 对精细高斯金字塔的下采样操作,这样 Root filter 的响应图和 Part filter 的响应图就具有相同的分辨率了
  • 对其进行加权平均,得到最终的响应图。亮度越大表示响应值越大

神经网络与误差反向传播算法

神经网络

神经网络概述

  • 神经网络:大量(结构简单的、功能接近的)神经元节点按一定体系架构连接成的网状结构——就是大脑的结构
  • 神经网络的作用:分类、模式识别、连续值预测
  • 建立输入与输出的映射关系

神经元

  • 生物神经元:树突、轴突、细胞体

  • 人工神经元

    • 接收前一层传来的数据
    • 将数据的加权和输入非线性作用函数中
    • 输出结果传递至后一层
    • 非线性函数:y = f(w^t * x) = f(∑[i=1, d]w(i)x(i))
    • 常见激活函数:f(x) = 1/(1 + e^-x)、f(x) = tanh(x) = (e^x - e^-x)/(e^x + e^-x)

人工神经网络

  • 神经元

    • 输入向量 x
    • 权重向量 w
    • 偏置标量 b
    • 激活函数 sigmoid
  • 逻辑结构:输入->输入层、隐含层(n)、输出层->输出

  • 浅网络

    • 3~5 层
    • 优化:梯度下降、BP 后向传播
  • “层”的理解

    • “层”实现了输入空间到输出空间的线性或非线性变换
    • 输入若干变量
    • 通过改变权重的值提取不同的特征
    • 提取特征个数:下一层节点数决定了想要获得多少种不同的新特征
    • 类比:C、O 原子

前馈神经

  • 单项多层结构:有向无环图、同层神经元之间没有连接

  • Delta 学习规则

    • 一种有监督的学习算法,该算法根据神经元的实际输出与期望输出差别来调整连接权

    • 公式表示:△w(ij) = a*(d(i) - y(i))*x(j)

      • △w(ij) 表示神经元 j 到神经元 i 的连接权重增量
      • d(i) 是神经元 i 的期望输出
      • y(i) 是神经元 i 的实际输出
      • x(j) 表示神经元 j 的状态
      • a 是表示学习速度的常数
  • 前馈神经网络的目标函数(降到最小)

    • 对一系列训练样本 X,期望输出 T = (t1, t2……tn),网络实际输出 Z = (z1, z2……zn)
    • 目标函数:J(w) = 1/2 × ||t - z||² = 1/2 × ∑[k=1, c](t(k) - z(k))² //各输出误差的平方的累加

梯度下降

  • 通过 w 向量的变化,逐步找到目标函数的最小值/瞎子下山:方向(梯度方向)、步长(学习速率)、平地(迭代)、悬崖(不可导)

误差反向传播

寻找一个函数将输入的向量映射到一个准确的输出值上。具体的寻找过程就是寻找合适的神经网络参数的过程。也就是缩小神经网络输出和事实所预计输出的过程。训练时随机初始化神经网络中的参数,这样的参数一定会带来较大的误差,就根据得到的误差来调整神经网络的参数。

视频及课件

链接,提取码:2ff8