opencv笔记--HOGDescriptor
特征描述提取图像区域上有用信息而忽略无用信息,不同目标下有用信息与无用信息定义不同。这里提取的有用信息用于分类器输入并期望产生正确的分类。
HOG(Histogram of Oriented Gradient) 对图像块生成描述信息 vector,然后将每个图像块指定一个分类(-1, 1),通过大量训练得到一个线性分类器(SVM);针对新图像块首先生成描述 vector,在使用训练分类器对新的描述 vector 分类,实现图像分类。
HOG 首先应用在行人检测,opencv 中 HOGDescriptor 类已经给出了一个默认的分类器(HOGDescriptor::getDefaultPeopleDetector()),通过该分类器可实现图像中行人检测。
当需要对其他物体进行检测时,则需要自定义一个描述信息 vector, 训练分类器,最终实现特定图像分类。
这里首先学习默认描述信息 vector 的生成及分类:
1)行人检测默认图像块为 64 * 128,当需要检测其他尺寸下是否存在行人时,需要将其缩放到默认尺寸,如尺寸 100 * 200, 128 * 256... ,但检测长宽比总为 1:2 的区域;
2)计算图像梯度与梯度方向,形成梯度图与梯度方向图;
3)在 8 * 8 邻域内计算梯度方向直方图,计算方法如下图:



首先将梯度方向取值范围修改为 [0° ,180°),然后划分为 9 个 bins,使用加权方式填充梯度方向直方图;
4)将 16 * 16 邻域内的4个梯度直方图连接成 1 * 36 vector,并将其归一化处理;
以 8 * 8 的步长在 64 * 128 图像块上扫描图像,每次扫描形成一个 1 * 36 vector 并归一化,最终得到 7 * 15 * 36 = 3780 个元素的特征向量;
5)以 1 * 3780 vector 作为图像特征训练 SVM 分类器, SVM 分类器基本原理如下

寻找一个超平面
,对于任意特征向量 X 可正确分类,W 可通过训练得到;
当训练完成后,针对新的特征向量,满足
为正类,满足
为负类;
在实际检测中,为了提升正类的可信度,可能使用
进行分类,
。
opencv 提供 HOGDescriptor 类已经训练好行人分类器(HOGDescriptor::getDefaultPeopleDetector()),下面对 HOGDescriptor 给出一些解释:
1) HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),
cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),
histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),
nlevels(HOGDescriptor::DEFAULT_NLEVELS)
以上代码构造 HOGDescriptor 对象,主要参数意义如下:
winSize:行人区域尺寸,在该尺寸上生成特征向量;对于大于该尺寸的行人,使用缩小到 winSize 尺寸以实现多尺度;应该注意的是,当行人尺寸较小时,无法通过放大到 winSize 尺寸实现检测;
cellSize:在 cellSize 区域上构造梯度方向直方图;
nbins:一个 cellSize 区域上形成梯度直方图的 bins;
blockSize: 梯度方向直方图归一化尺寸,对 2 * 2 cells 进行归一化;
中
取值,提升正类可信度;
参考资料 https://www.learnopencv.com/histogram-of-oriented-gradients/
opencv笔记--HOGDescriptor的更多相关文章
- OpenCV笔记大集锦(转载)
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
- opencv笔记5:频域和空域的一点理解
time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- opencv笔记3:trackbar简单使用
time:2015年 10月 03日 星期六 13:54:17 CST # opencv笔记3:trackbar简单使用 当需要测试某变量的一系列取值取值会产生什么结果时,适合用trackbar.看起 ...
- opencv笔记2:图像ROI
time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...
- opencv笔记1:opencv的基本模块,以及环境搭建
opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...
- OpenCV基本架构[OpenCV 笔记0]
最近正在系统学习OpenCV,将不定期发布笔记,主要按照毛星云的<OpenCV3编程入门>的顺序学习,会参考官方教程和文档.学习工具是Xcode+CMake,会对书中一部分内容更正,并加入 ...
- 查找并绘制轮廓[OpenCV 笔记XX]
好久没有更新了,原谅自己放了个假最近又在赶进度,所以...更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号...加油加油! 在二值图像中寻找轮廓 void cv::findCo ...
随机推荐
- mysql自动安装脚本
#!/bin/bashif [ -d /software ] ;then cd /softwareelse mkdir /software && cd /softwarefi #is ...
- Go数组遍历与排序
遍历数组 Go遍历数组有两种方式 1.按照数组下标进行遍历 2.用range遍历 package main import ( "fmt" ) func main() { // 声明 ...
- angularJS中$digest already in progress报错解决方法
看到一个前端群里有人问,就查了下解决"$digest already in progress"最好的方式,就是不要使用$scope.$apply()或者$scope.$digest ...
- .NET对接极光消息推送
什么是APP消息推送? 很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的"消息 ...
- 利用python绘制分析路易斯安那州巴吞鲁日市的人口密度格局
前言 数据来源于王法辉教授的GIS和数量方法,以后有空,我会利用python来实现里面的案例,这里向王法辉教授致敬. 绘制普查人口密度格局 使用属性查询提取区边界 import numpy as np ...
- 论文翻译:2020_RESIDUAL ACOUSTIC ECHO SUPPRESSION BASED ON EFFICIENT MULTI-TASK CONVOLUTIONAL NEURAL NETWORK
论文翻译:https://arxiv.53yu.com/abs/2009.13931 基于高效多任务卷积神经网络的残余回声抑制 摘要 在语音通信系统中,回声会降低用户体验,需要对其进行彻底抑制.提出了 ...
- STM32新建模板之寄存器
创建寄存器的项目模板相对比较简单,这里是基于库文件的模板进行更改的,有不明白的小伙伴可以浏览STM32新建模板之库文件. 一.项目文件 拷贝库文件的工程模板重命名为"stm32f10x_re ...
- java下拉框转换公共方法
1. 下拉框实例类 import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang3.Boolean ...
- gorm链接mysql的初始化配置和连接池的使用
1. mysql的初始化配置 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", user, passwd, host, port, db, ...
- 什么是Filter过滤器
一,什么是Filter过滤器: JavaWeb三大组件之一 Filter过滤器是JavaEE的规范.也就是接口 Filter过滤器作用:拦截请求,过滤响应 拦截请求常见的应用场景有: 1,权限检查 2 ...