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

    文章

    152

    浏览量

    13113
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40792
  • HOG特征
    +关注

    关注

    0

    文章

    2

    浏览量

    901

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

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

收藏 人收藏

    评论

    相关推荐

    这些“黑话”只有PCB设计制造内行人才懂

    【干货分享】这些“黑话”只有PCB设计制造内行人才懂!
    的头像 发表于 12-15 10:10 380次阅读
    这些“黑话”只有PCB设计制造内<b class='flag-5'>行人</b>才懂

    基于LiDAR的行人重识别的研究分析

    基于激光雷达(LiDAR)的行人重识别。我们利用低成本的LiDAR设备解决了人员再识别中的挑战,构建了名为LReID的LiDAR数据集,并提出了一种名为ReID3D的LiDAR-based ReID框架。
    发表于 12-11 10:41 228次阅读
    基于LiDAR的<b class='flag-5'>行人</b>重识别的研究分析

    基于机器视觉技术的人车路特征提取中的应用案例

    MSA-CNN模型结构 基于多尺度注意力机制的卷积网络模型(MSA-CNN)包括三个模块,分别是多尺度卷积模块、特征强化模块和分类模型,其中多尺度
    发表于 10-20 11:51 297次阅读
    基于机器视觉技术的人车路<b class='flag-5'>特征</b>提取中的应用案例

    openCV边缘检测原理是什么?

    openCV是通过什么原理来实现边缘检测
    发表于 10-10 06:21

    【触觉智能 Purple Pi OH 开发板体验】三、Ubuntu镜像安装OpenCV边缘检测开发

    缺陷检测的原理可以基于人工智能或机器视觉进行解释。 在人工智能领域,缺陷检测主要通过采集数据、特征提取、模型训练和测试、模型优化以及模型部署等步骤,利用机器学习技术来
    发表于 09-09 13:20

    【RISC-V + OpenCV 计算机视觉】用 VisionFive 2 昉·星光 2 进行物体识别

    广泛应用于视频监控、自动驾驶等领域。 基于Debain操作系统和OpenCV框架,赛昉科技在VisionFive 2(昉·星光 2)RISC-V单板计算机上实现了采用GPU加速的目标检测应用程序。作为一种
    发表于 09-08 11:42

    基于单张RGB图像定位被遮挡行人设计案例

    基于单张RGB图像在3D场景空间中定位行人对于各种下游应用至关重要。目前的单目定位方法要么利用行人的包围盒,要么利用他们身体的可见部分进行定位。
    的头像 发表于 09-08 09:29 468次阅读
    基于单张RGB图像定位被遮挡<b class='flag-5'>行人</b>设计案例

    重新思考跨域行人检测:无实例单阶段检测器的背景聚焦分布对齐框架

    为了解决这一问题,我们系统地分析了前景和背景在图像级跨域对齐中的重要性,并认识到在图像级跨域对齐中,背景起着更为关键的作用。因此,本文提出了一种新颖的框架,即背景聚焦分布对齐(Background-Focused Distribution Alignment,BFDA),来训练域自适应的单阶段
    的头像 发表于 08-30 15:30 372次阅读
    重新思考跨域<b class='flag-5'>行人</b><b class='flag-5'>检测</b>:无实例单阶段<b class='flag-5'>检测</b>器的背景聚焦分布对齐框架

    Python+OpenCV实现行人检测

    发表于 08-29 14:49 0次下载
    Python+<b class='flag-5'>OpenCV</b><b class='flag-5'>实现行人</b><b class='flag-5'>检测</b>

    MATLAB的行人目标检测的方法有哪些?

    MATLAB的行人目标检测的方法有哪些,就是主要的方法,基于背景的,基于目标的,还有其他的。都有哪些?
    发表于 08-23 16:30

    利用OpenCV进行颜色检测

    关于利用OpenCV进行颜色分类,本文包含了HSV介绍及应用、cv2.inRange及应用、RGB与HSV通道的区别三个方面。
    的头像 发表于 08-18 10:32 857次阅读
    利用<b class='flag-5'>OpenCV</b>进行颜色<b class='flag-5'>检测</b>

    通过OpenCV对地铁车站行人的监测案例

    数据的获取尤为重要,是 科学的行人服务设施规划设计和优化配置的基础。文章采用基于SSD模型行人检测与现常用的基于HOGSVM
    发表于 07-20 14:45 0次下载

    cifar10数据集介绍 knn和svm的图像分类系统案例

      摘要:本文使用CIFAR-10数据集设计实现了基于k近邻(knn)和支持向量机(svm)的图像分类系统。首先介绍了CIFAR-10数据集及其特征,然后分析
    发表于 07-18 15:23 4次下载

    使用MTCNN和用于ESP32-S3的TensorFlow Lite进行人检测

    电子发烧友网站提供《使用MTCNN和用于ESP32-S3的TensorFlow Lite进行人检测.zip》资料免费下载
    发表于 06-13 15:28 0次下载
    使用MTCNN和用于ESP32-S3的TensorFlow Lite进<b class='flag-5'>行人</b>脸<b class='flag-5'>检测</b>

    通过Opencv+Openpose实现体姿态检测

    通过一个偶然机会,我了解到了人体姿态解算,在学习K210之余,我便想着通过opencv实现这个功能,查找了很多资料,发现可以利用opencv+openpose实现,接着我又开始找一些资
    的头像 发表于 05-22 10:44 787次阅读
    通过<b class='flag-5'>Opencv</b>+Openpose<b class='flag-5'>实现</b>体姿态<b class='flag-5'>检测</b>