梯度直方图(HOG,Histogram of Gradient)

2023-05-16

1.介绍

HOG(Histogram of Oriented Gradient)2005CVPR会议上,法国国家计算机科学及自动控制研究所的Dalal等人提出的一种解决人体目标检测的图像描述子,该方法使用梯度方向直方图(Histogram of Oriented Gradients,简称HOG)特征来表达人体,提取人体的外形信息和运动信息,形成丰富的特征集。

2.生成过程

 

1)图像归一化

归一化图像的主要目的是提高检测器对光照的鲁棒性,因为实际的人体目标可能出现的各种不同的场合,检测器,必须对光照不太敏感才会有好的效果。

 

2)利用一阶微分计算图像梯度

图像平滑 

对于灰度图像,一般为了去除噪点,所以会先利用离散高斯平滑模板进行平滑:高斯函数在不同平滑的尺度下进行对灰度图像进行平滑操作,Dalal等实验表明在下,人体检测效果最佳(即不做高斯平滑),使得错误率缩小了约一倍。不做平滑操作,可能原因:图像时基于边缘的,平滑会降低边缘信息的对比度,从而减少图像中的信号信息。

梯度法求图像梯度

一阶微分处理一般对灰度阶梯有较强的响应  

一阶微分:

对于函数f(x,y),在其坐标(x,y)上的梯度是通过如下二维列向量定义的: 

这个向量的模值由下式给出:

因为模值的计算开销比较大,一般可以按如下公式近似求解:

Dalal等人利用许多一阶微分模板进行求梯度近似值,但在实验中表明模板[-1,0,1]效果最好。

采用模板[-1,0,1]为例计算图像梯度以及方向,通过梯度模板计算水平和垂直方向的梯度分别如下:

其中,分别表示该像素点的水平,垂直梯度值。计算该像素点的梯度值(梯度强度)以及梯度方向

对于梯度方向的范围限定,一般采用无符号的范围,故梯度方向可表示为:

3)基于梯度幅值的方向权重投影

HOG结构

通常使用的HOG结构大致有三种:矩形HOG(简称为R-HOG),圆形HOG和中心环绕HOG。它们的单位都是Block(即块)。Dalal的试验证明矩形HOG和圆形HOG的检测效果基本一致,而环绕形HOG效果相对差一些。

矩形HOG块的划分:

一般一个块(Block)都由若干单元(Cell)组成,一个单元都有如干个像素点组成。

在每个Cell中有独立做梯度方向统计,从而以梯度方向为横轴的的直方图,前面我们已经提到过,梯度方向可取0度到180度或0度~360度,但dalal实验表明,对于人体目标检测0度~180度这种忽略度数正负级的方向范围能够取得更好的结果。然后又将这个梯度分布平均分成 个方向角度(orientation bins),每个方向角度范围都会对应一个直方柱。

根据Dalal等人实验,在人体目标检测中,在无符号方向角度范围并将其平均分成9份(bins)能取得最好的效果,当bin的数目继续增大效果改变不明显,故一般在人体目标检测中使用bin数目为9范围0~180度的度量方式。

Block中各个参数的最终选取:

对于人体对象检测,块的大小为3×3个单元格,单元格的大小为6×6个象素时,检测效果是最好的,错误率约为10%左右。块的大小为2×2个单元格,单元格大小为8×8个象素时,也相差无几。6-8个象素宽的单元格,2-3个单元格宽的块,其错误率都在最低的一个平面上。块的尺寸太大时标准化的作用被削弱了从而导致错误率上升,而如果块的尺寸太小时,有用的信息反而会被过滤掉。

在实际应用中,在Block和Cell划分之后,对于得到各个像区域中,有时候还会为了进行一次高斯平滑,但是对于人体目标检测等问题,该步骤往往可以忽略,实际应用效果不大,估计在主要还是去除区域中噪点,因为梯度对于噪点相当敏感。

对梯度方向的投影权重方式的选取: 

对于梯度方向的加权投影,一般都采用一个权重投影函数,它可以是像素点的梯度幅值,梯度幅值的平方根或梯度幅值的平方,甚至可以使梯度幅值的省略形式,它们都能够一定程度上反应出像素上一定的边缘信息。根据Dalal等人论文的测试结果,采用梯度幅值量级本身得到的检测效果最佳,使用量级的平方根会轻微降低检测结果,而使用二值的边缘权值表示会严重降低效果(约为5%个单位10-4FPPW(False Positives Per Window))。

4)HOG特征向量归一化

对block块内的HOG特征向量进行归一化。对block块内特征向量的归一化主要是为了使特征向量空间对光照,阴影和边缘变化具有鲁棒性。还有归一化是针对每一个block进行的,一般采用的归一化函数有以下四种:

在人体检测系统中进行HOG计算时一般使用L2-norm,Dalal的文章也验证了对于人体检测系统使用L2-norm的时候效果最好。

 

5)得出HOG最终的特征向量

3.HOG的应用:

主要用在object detection 领域,特别是行人检测,智能交通系统,当然也有文章提到把HOG用在手势识别,人脸识别等方面。

 

4.HOG与SIFT区别

HOG和SIFT都属于描述子,以及由于在具体操作上有很多相似的步骤,所以致使很多人误认为HOG是SIFT的一种,其实两者在使用目的和具体处理细节上是有很大的区别的。HOG与SIFT的主要区别如下:

① SIFT是基于关键点特征向量的描述。

② HOG是将图像均匀的分成相邻的小块,然后在所有的小块内统计梯度直方图。

③ SIFT需要对图像尺度空间下对像素求极值点,而HOG中不需要。

④ SIFT一般有两大步骤,第一个步骤是对图像提取特征点,而HOG不会对图像提取特征点。

5.HOG的优点:

HOG表示的是边缘(梯度)的结构特征,因此可以描述局部的形状信息;

位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响;

采取在局部区域归一化直方图,可以部分抵消光照变化带来的影响。

由于一定程度忽略了光照颜色对图像造成的影响,使得图像所需要的表征数据的维度降低了。

而且由于它这种分块分单元的处理方法,也使得图像局部像素点之间的关系可以很好得到的表征。

 

6.HOG的缺点:

描述子生成过程冗长,导致速度慢,实时性差;

很难处理遮挡问题。

由于梯度的性质,该描述子对噪点相当敏感

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

梯度直方图(HOG,Histogram of Gradient) 的相关文章

  • 在 R 中向多直方图添加关键图例

    如何在下面的图中添加关键图例 我希望在右上角的某个地方有一个关键图例 其中有两个短水平颜色条 红色的应该说 整形手术出了问题 蓝色的应该说 德国 我使用以下代码来生成该图 bar2 lt read table div ana mut bar
  • 使用谷歌直方图创建日期直方图

    如何创建适用于日期的 Google 直方图 1 我已经放置了示例代码 带有工作号码和非工作日期示例 http jsfiddle net Qquse 417 http jsfiddle net Qquse 417 和下面的代码 2 1 htt
  • CSS3 渐变背景,底部有不需要的空白

    当我应用 CSS3 渐变并且内容的高度不足以容纳滚动条时 我很难摆脱底部的空白 比如这里 http womancareolympia webs com http womancareolympia webs com 我尝试过将 html 和
  • 在一个 ggplot 上使用两种比例颜色渐变[重复]

    这个问题在这里已经有答案了 我想将散点图上的点的色阶渐变与绘图上某些文本的色阶渐变结合起来 我可以单独执行它们 如下面的示例所示 但我似乎无法将它们放在一起 有没有办法做到这一点 这是我想要组合的两种类型的图 p 和 p1 的示例代码 l
  • 直方图或包数据结构的 Objective-C 实现

    我没有实现自己的实现 而是想知道是否有人知道我可以使用的 Objective C 中的直方图或包数据结构实现 本质上 直方图是列表的哈希图 其中列表包含与其哈希条目相关的值 一个很好的例子是超市商品的直方图 您可以将每组商品乳制品 肉类 罐
  • 如何使用 ggplot2 在直方图条上显示百分比标签

    我看到很多关于将 y 轴上的计数转换为百分比的问题 但其中必须在条形图中 我想在直方图中做类似的事情 但无法清楚地显示条形图上的标签 请告诉我我哪里做错了 x runif 100 min 0 max 10 data1 lt data fra
  • R - ggplot2 直方图的阴影部分

    所以我有这个数据 dataset rbinom 1000 16 0 5 mean mean dataset sd sd dataset data subset subset dataset dataset gt mean 2 sd data
  • CSS渐变棋盘图案

    I want to create a checkerboard pattern using gradients I ve found an example and modified it to my needs however it onl
  • 如何对星期几进行直方图并具有字符串标签

    我有一个日期数据框 日期对象 见底部 我试图将它们转换为星期几 然后绘制直方图 但理想情况下标签是 星期一 星期日 不是数字 我有两个不同的问题 这很容易将日期对象转换为星期几 https stat ethz ch pipermail r
  • 通过嵌套 tf.map_fn 反向传播梯度

    我想在每个向量上映射一个 TensorFlow 函数 该向量对应于具有维度的矩阵中每个像素的深度通道 批量大小 H W n 通道 换句话说 对于每个尺寸的图像H x W我在批次中拥有 我提取一些特征图F k 其数量为n channels 具
  • 如何统计用户输入中字母的频率?

    当用户在 Ruby 中输入类似单词时 如何计算 supercaliforniamightly 中出现的字母的频率 并打印出星星或星号来计算出现的字母数量 这是我的代码 puts Enter string text gets chomp te
  • gnuplot 直方图上 Y 轴和条形之间的空间

    我有这样的 gnuplot 脚本 set term pos eps set style data histogram set style histogram clustered gap 1 set grid y set boxwidth 0
  • 在 OpenCV 中,cv2.filter2D() 需要什么数据类型?

    我正在自学边缘检测器 并且正在尝试使用 OpenCVfilter2D实现我自己的梯度计算器 类似于cv2 Sobel 在 OpenCV 的 Python 接口中 cv2 filter2D 允许用户使用自定义过滤器对图像进行卷积 在 Open
  • 按月和日分组的事件直方图

    我正在尝试根据多年但按月和日分组的一组数据制作每个事件发生次数的直方图 或其他图 基本上 我想要从 3 月 1 日开始的一年长的 x 轴 显示每个日期出现的次数 并根据分类值对这些日期进行着色 以下是数据集中前 20 名的条目 goose
  • 在 ggplot2 中创建密度直方图?

    我想创建下一个直方图密度图ggplot2 以 正常 方式 基础包 非常简单 set seed 46 vector lt rnorm 500 breaks lt quantile vector seq 0 1 by 0 1 labels 1
  • 用python计算梯度

    我想知道如何numpy gradient工作 我用梯度来尝试计算群速度 波包的群速度是频率相对于波数的导数 而不是一组速度 我向它提供了一个 3 列数组 前 2 列是 x 和 y 坐标 第三列是该点 x y 的频率 我需要计算梯度 我确实期
  • iPhone 上 UIView 和 UILabels 上的渐变[重复]

    这个问题在这里已经有答案了 可能的重复 在 iPhone 应用程序中手动绘制渐变 https stackoverflow com questions 227005 manually drawing a gradient in iphone
  • 尝试在 R 中创建直方图时 x 必须是数字

    我是 R 新手 我需要生成一些图表 我导入了一个 Excel 文件 需要在一列上创建直方图 我的导入代码是 file read xlsx femalecommentcount xlsx 1 header FALSE col file 2 上
  • CSS 渐变内容很少:修复了 Chrome 的问题

    我问了一个问题内容很少的 CSS 渐变 https stackoverflow com questions 4873150 css gradients with little content前段时间 我想出了一个可能的解决办法http js
  • R从原始数据生成二维直方图

    我有一些 2D x y 的原始数据 如下所示 我想从数据生成二维直方图 通常 将 x y 值划分为大小为 0 5 的 bin 并计算每个 bin 中出现的次数 同时针对 x 和 y 有什么办法可以做到这一点吗 gt df x y 1 4 2

随机推荐

  • debian 无法使用apt-get解决办法

    刚装完debian xff0c 发现直接apt get是用不了的 xff0c 系统会提示你插入DVD xff0c 其实是源的配置问题 xff0c 只需要在apt的源里面修改下配置就可以了 打开apt源文件 sudo vi etc apt s
  • 蜗牛星际C单黑群晖加USB网卡做链路聚合

    黑群晖挂载USB网卡 一不小心入了群晖的坑 xff0c 然后就是不停的折腾 xff0c 入手一个蜗牛星际C单 xff0c 装好DS918 43 后 xff0c 家里有ASUS RT AC5300 xff0c 就想着搞个链路聚合 首先当然是去
  • CentOS 7 安装zoneminder

    这里写自定义目录标题 CentOS 7 安装zoneminder1 安装centos系统 xff0c 最小化安装2 配置源3 安装 zoneminder 以及环境4 关闭SELinux5 配置时区6 添加php网页支持7 安装配置数据库8
  • linux deploy linux 安装mariadb 无法启动解决办法

    这里写自定义目录标题 linux deploy linux 安装mariadb 无法启动解决办法 linux deploy linux 安装mariadb 无法启动解决办法 手头一个旧手机 xff0c 就想来折腾一番 xff0c 装到数据库
  • linux deploy 安装debian11 armhf中安装Zoneminder

    linux deploy 安装debian11 stable armhf 中安装Zoneminder 折腾了无数遍 xff0c 然后感觉也没啥用 安装linux deploy 手机获取root权限 安装debian xff08 armhf
  • OpenWRT 中创建docker Openwrt和其他宿主机中的docker容器通信

    这里写自定义目录标题 OpenWRT 中使用创建docker Openwrt和其他宿主机中的docker容器通信网络拓扑一 准备1 openwrt镜像 xff0c 2 安装pve 二 PVE配置1 网络配置2 创建docker networ
  • sublime text自定义clang format插件格式化C++代码

    本文内容为在windows平台上通过 sublime text开发自定义插件实现调用clang format对C C 43 43 代码进行格式化 需要安装LLVM xff0c 下载链接 xff1a https github com llvm
  • 四种方法实现UITableView的cell高度自动计算

    UITableview是iOS开发中使用最频繁的一个控件 xff0c 在实际开发中 xff0c 我们经常需要定制cell xff0c 让cell显示图片 文字等 由于cell包含的图片和文字是根据服务器返回的数据进行填充的 xff0c 这就
  • iOS贝塞尔曲线(UIBezierPath)的基本使用方法

    简介 UIBezierPath是对Core Graphics框架的一个封装 xff0c 使用UIBezierPath类我们可以画出圆形 xff08 弧线 xff09 或者多边形 xff08 比如 xff1a 矩形 xff09 等形状 xff
  • 手机termux免root安装kali:一步到位+图形界面

    1 工具 xff1a 安卓 xff08 包括鸿蒙 xff09 手机 WiFi 充足的电量 脑子 2 浏览器搜索termux xff0c vnc viewer xff0c 下载安装 3 对抗华为纯净模式需要一些操作 xff0c 先断网 xff
  • iOS 谓词(NSPredicate)

    文档定义 NSPredicate xff1a A definition of logical conditions used to constrain a search either for a fetch or for in memory
  • 在Ubuntu20.04中安装中文输入法

    引言 在Ubuntu系统中 xff0c 无论是写文档还是在程序中写注释 xff0c 都经常需要用到中文输入法 本文简单介绍了三种输入法框架 xff0c 然后详细介绍了在Ubuntu 20 04系统中 xff0c IBus框架和Fcitx框架
  • LED的C语言应用程序

    引言 在本文中 xff0c 用C语言编写一个LED灯的应用程序 xff0c 对文章 基于HDF的LED驱动程序开发 xff08 1 xff09 xff08 2 xff09 中开发的LED灯的驱动程序进行测试 另外 xff0c 在编写LED灯
  • CodeBlocks 快捷键篇(自己整理)

    浏览最近文件 Ctrl 43 Tab 保存当前文件 Ctrl 43 S 保存所有文件 Ctrl 43 Shift 43 S 关闭当前文件 Ctrl 43 W 关闭所有文件 Ctrl 43 Shift 43 W 跳转到上一个函数 Ctrl 4
  • send的 epoll_wait EPOLLOUT事件 与 MSG_WAITALL参数

    1 send 10G的数据 xff0c send返回值不会是10G xff0c 而是大约256k xff0c 表示你只成功写入了256k的数据 接着调用send xff0c send就会返回EAGAIN xff0c 告诉你socket的缓冲
  • Linux Crontab 设置的定时任务没有启动的排查

    1 先手动执行定时任务以此来判断脚本是否有问题 2 确认服务器是否开启定时任务计划服务 命令 xff1a service crond status service crond span class hljs operator span cl
  • 一键显示电脑IP

    1 新建文本文档 gt 将步骤2的内容存入 2 echo off ipconfig all pause exit 3 另存为 gt 扩展名为bat
  • UITextView 设置行高 并限制字数 并在键盘遮挡时向上移动

    首先添加监听 NSNotificationCenter defaultCenter addObserver self selector 64 selector textFiledEditChanged name 64 34 UITextVi
  • iOS UIAlertController

    运行环境 xff1a Xcode7 2 1 xff0c iOS Simulator9 2 语言 xff1a Objective C Swift 关于UIAlertController的使用 xff0c 主要有三种不同的方式 xff1a 1
  • 梯度直方图(HOG,Histogram of Gradient)

    1 介绍 HOG xff08 Histogram of Oriented Gradient xff09 是2005年CVPR会议上 xff0c 法国国家计算机科学及自动控制研究所的Dalal等人提出的一种解决人体目标检测的图像描述子 xff