0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV预训练SVM行人HOG特征分类器实现多尺度行人检测

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-07-05 11:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HOG概述

HOG(Histogram of Oriented Gradient)特征在对象检测与模式匹配中是一种常见的特征提取算法,是基于本地像素块进行特征直方图提取的一种算法,对象局部的变形与光照影响有很好的稳定性,最初是用HOG特征来来识别人像,通过HOG特征提取+SVM训练,可以得到很好的效果,OpenCV已经有了。HOG特征提取的大致流程如下:

2a4ac09a-fba0-11ec-ba43-dac502259ad0.png

305524ee-fba0-11ec-ba43-dac502259ad0.jpg

详细解读

第一步:灰度化
对HOG特征提取来说第一步是对输入的彩色图像转换为灰度图像,图像灰度化的方法有很多,不同灰度化方法之间有一些微小的差异,从彩色到灰度的图像转换可以表示如下:

337b1dae-fba0-11ec-ba43-dac502259ad0.jpg

第二步:计算图像梯度
计算图像的X方向梯度dx与Y方向梯度dy,根据梯度计算mag与角度,计算梯度时候可以先高斯模糊一下(可选步骤),然后使用sobel或者其它一阶导数算子计算梯度值dx、dy、mag、angle:

3396b56e-fba0-11ec-ba43-dac502259ad0.png

第三步:Cell分割与Block
对于图像来说,分成8x8像素块,每个块称为一个Cell,每个2x2大小的Cell称为一个Block,每个Cell根据角度与权重建立直方图,每20度为一个BIN,每个Cell得到9个值、每个Block得到36个值(4x9), 图像如下:

33b8ee9a-fba0-11ec-ba43-dac502259ad0.jpg

每个Block为单位进行L2数据归一化,作用是抵消光照/迁移影响,L2的归一化的公式如下:

36c50be6-fba0-11ec-ba43-dac502259ad0.png

第四步:生成描述子
对于窗口64x128范围大小的像素块,可以得到8x16个Cell, 使用Block在窗口移动,得到输出的向量总数为7x15x36=3780特征向量,每次Block移动步长是八个像素单位,一个Cell大小。

39da79b0-fba0-11ec-ba43-dac502259ad0.jpg

使用HOG特征数据

HOG特征本身是不支持旋转不变性与多尺度检测的,但是通过构建高斯金字塔实现多尺度的开窗检测就会得到不同分辨率的多尺度检测支持。OpenCV中HOG多尺度对象检测API如下:

virtualvoidcv::detectMultiScale(
InputArrayimg,
std::vector< Rect >&foundLocations,
doublehitThreshold=0,
SizewinStride=Size(),
Sizepadding=Size(),
doublescale=1.05,
doublefinalThreshold=2.0,
booluseMeanshiftGrouping=false
)
Img-表示输入图像
foundLocations-表示发现对象矩形框
hitThreshold-表示SVM距离度量,默认0表示,表示特征与SVM分类超平面之间
winStride-表示窗口步长
padding-表示填充
scale-表示尺度空间
finalThreshold-最终阈值,默认为2.0
useMeanshiftGrouping-不建议使用,速度太慢拉

使用OpenCV预训练SVM行人HOG特征分类器实现多尺度行人检测的代码如下:

importcv2ascv

if__name__=='__main__':
src=cv.imread("D:/images/pedestrian.png")
cv.imshow("input",src)
hog=cv.HOGDescriptor()
hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector())
#Detectpeopleintheimage
(rects,weights)=hog.detectMultiScale(src,
winStride=(4,4),
padding=(8,8),
scale=1.25,
useMeanshiftGrouping=False)
for(x,y,w,h)inrects:
cv.rectangle(src,(x,y),(x+w,y+h),(0,255,0),2)

cv.imshow("hog-detector",src)
cv.waitKey(0)
cv.destroyAllWindows()

原文标题:HOG特征详解与行人检测

文章出处:【微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 分类器
    +关注

    关注

    0

    文章

    153

    浏览量

    13670
  • OpenCV
    +关注

    关注

    33

    文章

    651

    浏览量

    44395
  • HOG特征
    +关注

    关注

    0

    文章

    2

    浏览量

    985

原文标题:HOG特征详解与行人检测

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于级联分类的人脸检测基本原理

    本次分享的内容是基于级联分类的人脸检测基本原理 1) 人脸检测概述 关于人脸检测算法,目前主流方法分为两类,一类是基于知识,主要方法包
    发表于 10-30 06:14

    零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV
    的头像 发表于 08-16 16:16 882次阅读
    零成本钢铁侠手套!树莓派+<b class='flag-5'>OpenCV</b> 秒变手势遥控<b class='flag-5'>器</b>!

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV
    的头像 发表于 08-14 17:45 955次阅读
    如何使用树莓派与<b class='flag-5'>OpenCV</b><b class='flag-5'>实现</b>面部和运动追踪的云台系统?

    如何使用树莓派+OpenCV实现姿态估计和面部特征点追踪?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV
    的头像 发表于 08-13 17:44 966次阅读
    如何使用树莓派+<b class='flag-5'>OpenCV</b><b class='flag-5'>实现</b>姿态估计和面部<b class='flag-5'>特征</b>点追踪?

    【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测OpenCV测试

    【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测OpenCV测试 本文介绍了 Milk-V Duo S 开发板实现 Buildroot SDK 镜像编译、基于 TDL 模型的人
    发表于 07-11 13:48

    如何用OpenCV的相机捕捉视频进行人检测--基于米尔NXP i.MX93开发板

    本文将介绍基于米尔电子MYD-LMX93开发板(米尔基于NXPi.MX93开发板)的基于OpenCV的人脸检测方案测试。OpenCV提供了一个非常简单的接口,用于相机捕捉一个视频(我用的电脑内置
    的头像 发表于 04-15 11:51 637次阅读
    如何用<b class='flag-5'>OpenCV</b>的相机捕捉视频进<b class='flag-5'>行人</b>脸<b class='flag-5'>检测</b>--基于米尔NXP i.MX93开发板

    快速部署!米尔全志T527开发板的OpenCV行人检测方案指南

    行人检测概论使用HOGSVM基于全志T527开发板构建行人检测器的关键步骤包括: 准备
    发表于 04-11 18:14

    OpenCV行人检测应用方案--基于米尔全志T527开发板

    OpenCVsudoapt-getinstalllibopencv-devpython3-opencv2.安装pipsudoapt-getinstallpython3-pip二、行人检测概论使用
    的头像 发表于 04-10 08:03 1096次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>行人</b><b class='flag-5'>检测</b>应用方案--基于米尔全志T527开发板

    使用OpenVINO™模型的OpenCV行人检测检测到多张人脸时,伺服电机和步入电机都发生移动是为什么?

    使用OpenVINO™模型的 OpenCV* 进行人检测。 使用 cv2.矩形 函数,能够获取检测到的面部的坐标。 检测到多张人脸时,多
    发表于 03-07 06:35

    行人脸识别演示时,无法缩小输入视频流的帧大小怎么解决?

    行人脸识别演示时,无法缩小输入视频流的帧大小。
    发表于 03-07 06:24

    请问是否可以使用单个输入图像运行人检测MTCNN Python演示?

    是否可以使用单个输入图像运行人检测 MTCNN Python* 演示?
    发表于 03-06 08:15

    使用OpenVINO™ 2021.4在CPU和MYRIAD上进行自定义对象检测,为什么结果差异巨大?

    使用自定义训练的模型执行推理,以便在 2021.4 OpenVINO™中进行人检测。 与 MYRIAD 相比,CPU 的输出结果取得了巨大的差异
    发表于 03-06 07:45

    中伟视界:智慧矿山如何实现行人不行车的安全管理

    智慧矿山的交通安全管理逐步依靠AI摄像机技术,通过实时监控、行为识别和信息共享,有效降低交通事故风险,提升作业安全。AI摄像机能够识别行人和车辆的行为,实时发出警报,从而为矿山安全管理提供强大支持,推动行业向更高的安全标准迈进。
    的头像 发表于 02-18 17:43 599次阅读
    中伟视界:智慧矿山如何<b class='flag-5'>实现行人</b>不行车的安全管理

    【米尔RK3576开发板评测】+项目名称RetinaFace人脸检测

    一、简介 Pytorch_Retinaface‌是一个基于PyTorch框架实现的人脸检测算法,它能够快速而准确地检测出图像中的人脸,并提供丰富的特征信息。该算法的核心思想是使用
    发表于 02-15 13:28

    AI模型部署边缘设备的奇妙之旅:目标检测模型

    准确性。 类别不平衡问题:当某些类别的样本数远多于其他类别时,分类可能会偏向多数类别,导致少数类别的预测精度较低。 过拟合风险:复杂的模型容易在训练数据上过拟合,即学到了训练数据中的
    发表于 12-19 14:33