方向梯度直方图(Histogram of Oriented Gradient)

news2025/1/10 6:05:51

1.方向梯度直方图(Histogram of Oriented Gradient)

笔记参考:HOG特征提取
笔记参考:一文讲解方向梯度直方图(hog)
笔记参考:Histogram of Oriented Gradients (HOG) | By Dr. Ry @Stemplicity
笔记参考:C34 | HOG Feature Vector Calculation | Computer Vision | Object Detection | EvODN
笔记参考:Histograms of Oriented Gradients (HOG)
笔记参考:HOG算法中用到三线性插值(Trilinear Interpolation)的作用及其用法(包括HOG的matlab源代码分析)
步骤如下:

  1. 图片预处理
  2. 计算图像梯度
  3. 计算图像梯度直方图
  4. 对Block进行L2归一化
  5. 合并Block特征向量得到整个图像的特征向量

1.1 图片预处理


裁剪图片、去除光照等不良因素

1.2 计算图像梯度

将处理后的图像划分为小的Cell,几个Cells组成Block

下图为其中一个cell中的像素情况


计算整个图像中每个Cell的x方向梯度和y方向梯度,可以使用Sobel算子对图像进行卷积运算即可完成此步骤

使用sobelx得到y方向边缘(中间0与像素对应乘为0,也就是忽略中间竖线,只保留左右竖线)

使用sobely得到x方向边缘(中间0与像素对应乘为0,也就是忽略中间横线,只保留上下横线)

计算每个Cell的 x x x 方向梯度 G x G_x Gx y y y 方向梯度 G y G_y Gy后,计算梯度大小和方向(由X,Y方向合成)
G = G x 2 + G y 2   θ = a r c t a n G y G x G=\sqrt{G_x^2+G_y^2}\\ ~\\ \theta=arctan\frac{G_y}{G_x} G=Gx2+Gy2  θ=arctanGxGy
最终得到图像中所有cell的梯度大小和梯度方向,

1.3 计算图像梯度直方图

量化角度:将0-180°划分为9个部分(9 bins)


上图中为一个Cell的梯度大小和梯度方向图,接下来需要进行统计,将每个像素对应的梯度大小映射到对应方向的范围内。
问题:使用插值对梯度直方图进行修正?将某个像素点的梯度幅值以不同的权重累加到相应的bin上,
插值是为了防止产生区域混叠效应(什么是混叠效应?)


将同一个cell中的统计完成后得到一个cell的梯度直方图

按照以上方式将图像中的每个cell的梯度大小图和梯度方向图整合成一个个直方图
个人理解:一个cell的直方图可以写为向量形式 [第一个bin的数值大小,第二个bin的数值大小,……]

1.4 对Block进行L2 归一化

几个cells组成一个block

将一个block中的每个cell直方图的向量拼接起来组合成一个block的向量
因梯度对光照敏感(为什么?)所以需要将直方图归一化(使用L2范数)以此消除光照影响
将block向量使用L2范数归一化
v e c = [ a , b , c ]   ∣ v e c ∣ = a 2 + b 2 + c 2   归一化后的向量 = [ a ∣ v e c ∣ , b ∣ v e c ∣ , c ∣ v e c ∣ ] vec=[a,b,c]\\ ~\\ |vec|=\sqrt{a^2+b^2+c^2}\\ ~\\ \text{归一化后的向量}=[\frac{a}{|vec|},\frac{b}{|vec|},\frac{c}{|vec|}] vec=[a,b,c] vec=a2+b2+c2  归一化后的向量=[vecavecbvecc]
每个block都有一个特征向量,block在图像上滑动窗口,滑过整个图像

1.5 合并Block特征向量

将所有block的特征向量拼接在一起作为整幅图像的特征向量,图像特征向量作为支持向量机的输入,SVM进行分类

1.6 总结

图像->cell梯度->cell梯度直方图 ->cell特征向量 ->block特征向量->图像特征向量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java-01】深入浅出匿名对象 , 继承 , 抽象类

主要内容 面向对象回顾 匿名对象介绍 面向对象特征 - 继承 抽象类的使用 模板设计模式 1 面向对象回顾 面向对象的核心思想是什么 ? 用代码来模拟现实生活中的事物 , 比如学生类表示学生事物 , 对象表示的就是具体的学生 , 有了类就可以描述万千世界所有的事物了 现有的…

【PaddleNLP-kie】关键信息抽取2:UIE模型做图片信息提取全流程

文章目录 本文参考UIE理论部分step0、UIEX原始模型使用网页体验本机安装使用环境安装快速开始 step1、UIEX模型微调(小样本学习)微调模型对比step2、服务化部署step3、提升推理速度模型量化更换模型fast-tokenizer提高batch_size(没用&#x…

第十一章 组合模式

文章目录 前言一、组合模式基本介绍二、UML类图三、完整代码抽象类,所有类都继承此类学校类以父类型引用组合一个学院类学院类以父类型引用组合一个专业类专业类,叶子节点,不能再组合其他类测试类 四、组合模式在JDK集合的源码分析五、组合模…

51单片机(一)软硬件环境和单片机介绍

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其实STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

delta.io 参数 spark.databricks.delta.replaceWhere.constraintCheck.enabled

总结 默认值true 你写入的df分区字段必须全部符合覆盖条件 .option("replaceWhere", "c2 == 2") false: df1 overwrite tb1: df1中每个分区的处理逻辑: - tb1中存在(且谓词中匹配)的分区,则覆盖 - tb1中存在(谓词中不匹配)的分区,则append - tb1中不存…

热闹之后,香港是否会成为Web3的“应许之地”?

出品|欧科云链研究院 作者|Jason Jiang 自从2022年底有关虚拟资产在港发展的政策宣言发布后,香港始终是Web3世界的焦点。当港府官员频繁现身以鼓励Web3创新发展,当数以万计的Web3 Builders时隔三年再次聚首香江,当传…

密码学报Latex模板使用

密码学报Latex模板使用 首先从密码学报下载模板 然后注册overleaf账号 创建新项目,把.zip包导入 修改编译器为XeLaTeX 然后点击重新编译即可

信息安全复习六:公开密钥密码学

一、章节梗概 1.公开密钥密码模型的基本原理 2.两个算法:RSA&D-H算法 主要内容 1.对称密钥密码的密钥交换问题 2.公钥密码模型的提出 3.设计公钥密码的基本要求 4.数字签名 5.RSA算法 6.公钥密码的特征总结 二、对称密钥密码 对称加密算法中,数据…

SpringCloud --- Feign远程调用

一、RestTemplate问题 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenFeign/feign:…

程序员如何提高代码能力

目录 程序员如何提高代码能力——C语言方向阅读优秀的代码不断练习学习新技术与他人合作不断反思和改进 程序员如何提高代码能力——C语言方向 C 是一种功能强大的编程语言,广泛应用于操作系统、数据库、游戏开发等领域。而要成为一名优秀的 C 程序员,不…

动力节点Vue笔记④ Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 原生方式,使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

RK3568平台开发系列讲解(调试篇)内核函数调用堆栈打印方法汇总

🚀返回专栏总目录 文章目录 一、dump_stack 函数二、WARN_ON(condition)函数三、BUG_ON (condition)函数四、panic (fmt...)函数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对驱动调试方法进行汇总学习。 一、dump_stack 函数 dump_stack 作用:打印内核调…

C++、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数(侯捷)

C、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数 (侯捷) 迭代器iterator_category 算法accumulatefor_eachreplacecountfindsortbinary_search 仿函数 functors(六大部件中最简单的一种!) 使用一个东西,却不明白它的道理&a…

Compiler- volatile关键字

为了直观的感受编译器为程序所做的编译优化&#xff0c;我们通过以下的C程序来进行演示&#xff08;只能体现编译优化的一小部分hh~&#xff09;。 请大家预测一下下面代码的输出结果 #include <iostream>int main(void) {const volatile int local 10;int* ptr (int…

中国人民大学与加拿大女王大学金融硕士国际班——海归学子最强后援

有人脉&#xff0c;成功像坐电梯&#xff1b;没人脉&#xff0c;成功像爬楼梯。这是每一个职场人都有体悟的“潜规则”。对海归同学来说&#xff0c;加入母校校友会是结识优秀人才、迅速拓展本地人脉圈的不二法宝。中国人民大学与加拿大女王大学金融硕士国际班为海归学子提供最…

QMS-云质说质量 - 4 为什么有的质量人不属于质量部?

想管理好质量&#xff0c;首先就要把质量人员放在合适的组织架构中。 对人进行管理&#xff0c;基本原则是&#xff1a;尽量让员工的利益与企业的利益保持同步&#xff0c;虽然无法做到完全重合&#xff0c;但出发点肯定要战略一致。 俗话说“屁股决定脑袋”&#xff0c;因此&a…

【数据结构初阶】第六节.队列的实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、队列的初步认识 二、Java中队列的使用 三、队列的模拟实现 四、力扣刷题演练 4.1 设计循环队列 4.2 用栈实现队列 4.3 最小栈 总结 前言 今天我…

日撸 Java 三百行day36

文章目录 day36 领接表1. 领接表知识点2.结合上图去抽象一个邻接表结点的对象3.广度优先遍历4.深度优先遍历 #说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;h…

Vue3+Three.js+antvG2实战项目 智慧城市(三)

前言 在网上找了很久都没有找到使用Three.js开发智慧城市的免费文章或者免费视频,自己花了一点时间做了一个纯前端的智慧城市项目。 技术栈都是最新的:vue3vitetypeScriptThreeantv G2 源码分享 源码 模型,天空图盒子链接分享(不想下载源码可以只用下这个)提取码1234 20230424_…

【iOS】—— KVC再学习

KVC 文章目录 KVCKVC常用的四种方法 key和keyPath的区别用法&#xff1a; 批量存值操作批量赋值操作字典模型相互转化KVC的其他方法 KVC原理探索setValue:forKey: 的原理&#xff08;KVC赋值原理&#xff09;valueForKey:的原理&#xff08;KVC取值原理&#xff09; 注意事项 K…