图像处理与视觉感知---期末复习重点(8)

文章目录

  • 一、图像分类流程
  • 二、梯度方向直方图
    • 2.1 概述
    • 2.2 计算梯度方向直方图
      • 2.2.1 过程
      • 2.2.2 总结
  • 三、SIFT


一、图像分类流程

 流程:输入图像、预处理、特征提取、学习算法、类标。

在这里插入图片描述

二、梯度方向直方图

2.1 概述

 1. 梯度方向直方图(Histogram of Oriented Gradient, HOG):是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。HOG特征结合SVM分类器被广泛应用于图像识别中,尤其在行人检测。

特征描述子就是将图像抽取部分有用信息,丢掉不相关的信息。特征描述子可以将一个 w e i g h t × h e i g h t × 3 weight×height×3 weight×height×3(宽×高×通道数量)的图像转换成一个长为 n n n 的向量或矩阵。例如:一幅 64 × 128 × 3 64×128×3 64×128×3 的图像,经过转换之后可以输出长度为 3780 3780 3780 的图像向量,相比 64 × 128 × 3 64×128×3 64×128×3 肯定是少了的。因为,特征描述子仅仅将所需要显示的图像保留下来了。

比如说,我们想知道一个人有没有带眼镜,在这种情况下,我们仅仅需要提取人的面部特征,并且进行边缘检测,这个时候,我们可以忽略掉图片的彩色特征,将照片转换成变成仅仅有边缘轮廓的特征图。这种特征图不仅仅数据量小,而且具有很强的目标指向性。

 2. 算法思想:(1)HOG特征的核心思想是在一幅图像中,局部目标的表观和形状(appearance and shape)能够被梯度和边缘的方向密度很好地描述。(2)通过将整幅图像分为多个小的连通区域(单元,cells),并计算每个cell的梯度或边缘方向直方图,这些直方图的组合可用于构成特征描述子,为了提高准确率,可以将局部直方图在图像更大范围内(块,block)进行对比度归一化(constrast-normalized)。

2.2 计算梯度方向直方图

2.2.1 过程

 1. 预处理:patch可以是任意的尺寸,但是有一个固定的比例,比如当patch长宽比1:2,那patch大小可以是100×200、128×256或者1000×2000,但不可以是101×205(比例关系不对)。这里有张图是720×475的,我们选100*200大小的patch来计算HOG特征,把这个patch从图片里面抠出来,然后再把大小调整成64×128。

在这里插入图片描述

 2. 计算梯度图像:首先我们计算水平和垂直方向的梯度,再来计算梯度的直方图。
 (1) x轴方向的梯度主要凸显了垂直方向的线条;y轴方向的梯度凸显了水平方向的线条。
 (2) 梯度幅值凸显了像素值有剧烈变化的地方。
 (3) 图像的梯度去掉了很多不必要的信息(比如不变的背景色),加重了轮廓。

在这里插入图片描述

 3. 在每个单元(8×8大小像素)中计算梯度直方图
 (1) 图像会被分割成每个单元( 8×8大小像素)。每个单元都会计算一个梯度直方图。
 (2) 提供一个紧凑或压缩的表示:一个8×8的图像有8×8×3=192个像素值;每个像素有两个值:幅值magnitude和方向direction,3个通道只会将最大的梯度值以及方向角记录下来,加起来就是8×8×2=128。所以说实际的梯度直方图应当含有8×8×2=128个值。

在这里插入图片描述

在这里插入图片描述

 (3) 对于64×128的这幅图像来说,每个单元(8×8大小)已经足够大来表示有趣的特征比如脸,头等等。

 (4) 直方图是有9个bin的向量,角度:0,20,40,60…160。bin的值:每个角度对应的幅值之和。
 以下图为例,此过程是根据梯度和角度来确定bin的过程。蓝色和红色分别是两个过程,先看蓝色。我们可以看到蓝色像素梯度值是2,方向为80°角,于是在第5个bin中加2;对于红色,角度为10、梯度值为4,但是bin中没有10,只有0和20,于是将梯度值分2份各分到bin里面的1和2当中。

在这里插入图片描述

 这里有个细节要注意,如果一个角度大于160度,也就是在160-180度之间,我们知道这里角度0,180度是一样的,所以在下面这个例子里,像素的角度为165度的时候,要把幅值按照比例放到0和160的bin里面去。

在这里插入图片描述

 (5) 把这8*8的单元cell里面所有的像素点都分别加到这9个bin里面去,就构建了一个9-bin的直方图,上面的单元cell对应的直方图如下:

在这里插入图片描述

 4. 16×16(像素)的块(block)归一化:进行归一化的原因是图像梯度对于光线很敏感。
 (1) 可以对向量用L2进行归一化,公式如下所示:

在这里插入图片描述

 (2) 一般不会在每一个9×1的直方图上面做归一化,而是从一个16×16的块上做归一化,也就是4个9×1的直方图组合成一个36×1的向量,然后做归一化,接着,窗口再朝后面挪8个像素。

在这里插入图片描述

 5. 计算HOG特征向量:为了计算这整个patch的特征向量,需要把36×1的向量全部合并组成一个向量。向量的大小可以这么计算:
 (1) 我们有多少个16×16的块?对于64×128的这幅patch:水平7个,垂直15个,总共有7*15=105次移动。

 (2) 每个16×16的块代表了36×1的向量。所以把他们放在一起也就是36×105=3780维向量。

 (3) 可视化HOG:通常HOG特征描述子是画出8×8网格中9×1归一化的直方图。直方图的主要方向捕捉了这个人的外形,特别是躯干和腿。

2.2.2 总结

在这里插入图片描述

三、SIFT

 1. 核心步骤:将一幅图像映射(变换)为一个局部特征向量集;特征向量具有平移、缩放、旋转不变性,同时对光照变化、仿射及投影变换也有一定不变性。

在这里插入图片描述

 2. SIFT算法主要有三大步骤:(1) 提取关键点。 (2) 对关键点附加详细的信息(局部特征)构建描述器。 (3) 通过两特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,建立景物间的对应关系。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/624949.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原型对象、实例、原型链的联系

const F function () { this.name Jack } // ƒ () { this.name Jack }const e new F() // F { name: "Jack" }console.log(e.name) // Jack 构造函数:现在 F 就是构造函数。任何一个函数被 new 使用后,就是构造函数,没被…

JVM之本地方法栈和程序计数器和堆

本地方法栈 本地方法栈是为虚拟机执行本地方法时提供服务的 JNI:Java Native Interface,通过使用 Java 本地接口程序,可以确保代码在不同的平台上方便移植 不需要进行 GC,与虚拟机栈类似,也是线程私有的,…

计算机网络(六)应用层

应用层 基本概念 服务器端(Server): 服务器是网络中提供服务的计算机或软件程序。服务器通常具有更高的性能、更大的存储空间和更高的带宽,用于提供各种服务,如文件存储、数据库管理、Web托管、电子邮件传递等。服务…

Qt对象池,单例模式,对象池可以存储其他类的对象指针

代码描述: 写了一个类,命名为对象池(ObjectPool ),里面放个map容器。 3个功能:添加对象,删除对象,查找对象 该类只构建一次,故采用单例模式功能描述:对象池可…

【Redis 神秘大陆】008 常见Java客户端

八、Redis 的 Java 客户端 8.1 Jedis 连接池 单点连接池 Jedis 连接池基于 Common-Pool 连接池里面放置的是空闲连接,如果被使用 (borrow)掉,连接池就会少一个连接,连接使用完后进行放回 (return&#…

UbuntuServer22.04安装docker

通过ubuntuserver安装docker是搭建开发环境最便捷的方式之一。下面介绍一下再ubuntu22.04上如何安装docker。相关内容参考官网链接:Install Docker Engine on Ubuntu 根据官网推荐,利用apt命令的方式安装,首先需要设置docker仓库&#xff0c…

ES源码二:集群启动过程

命令行参数解析 Elasticsearch:在main里面创建了Elasticsearch实例,然后调用了main方法,这个main方法最终会调用到父类Command的main方法 这里做了几件事: 注册一个 ShutdownHook,其作用就是在系统关闭的时候捕获IO…

目标检测算法——YOLOV9——算法详解

一、主要贡献 深度网络输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。针对 信息丢失问题,研究问题如下: 1)从可逆功能的角度对现有深度神经网络架构进行了理论分析,解释了许多过去难以解释的现象&#xf…

【网络编程】如何创建一个自己的并发服务器?

hello !大家好呀! 欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家…

3D目标检测实用技巧(三)- 生成虚拟点

一、引言 本次参考的是VirConv生成虚拟点的方法: VirConv/tools/PENet at master hailanyi/VirConv GitHubVirtual Sparse Convolution for Multimodal 3D Object Detection - VirConv/tools/PENet at master hailanyi/VirConvhttps://github.com/hailanyi/Vir…

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前,先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…

计算机网络:MAC地址 IP地址 ARP协议

计算机网络:MAC地址 & IP地址 & ARP协议 MAC地址IP地址ARP协议 MAC地址 如果两台主机通过一条链路通信,它们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说,使用点对点信道的数据链路层不需要使…