目标检测(三)传统目标检测与识别的特征提取——基于HOG特征的目标检测原理
目录
简介
提取HOG特征的步骤
1、预处理获取要计算其特征的输入图像
2、计算图像的梯度
3、计算8×8细胞梯度直方图
4、直方图归一化
5、计算HOG特征向量
Opencv利用HOG特征实现行人检测
简介
HOG特征与SVM分类器结合,已经被广泛应用于图像识别中,尤其在行人检测,HOG的核心思想是所检测的局部物体外形能够被光强梯度或边缘方向的分布所描述。通过将整幅图像分割成小的连接区域,称为cells,每个cell生成一个方向梯度直方图或者cell中像素的边缘方向,这些直方图的组合可表示出所检测目标的目标的HOG特征。
提取HOG特征的步骤
具体计算图像HOG特征的方法步骤如下:
1、预处理获取要计算其特征的输入图像
如前所述的HOG特征用于行人检测,是在64×128大小图像计算,当然,图像可能是任意大小的。通常在多个尺度上分析多个图像位置,唯一的限制是被分析的滑动窗口(win)具有固定的长宽比(纵横比)。在我们的例子中,滑动窗口需要有一个长宽比为1:2。然后再将滑动窗口的图像调整为128x64像素的大小,该设置在行人检测任务中可以获得更好的结果。为了说明这一点,下面展示了一个大尺寸的512×480图像。我们选择一块大小100×200的区域计算我们的HOG特征。并且调整我们裁剪的窗口图像大小为64×128。
图 9-8 获得输入图像
2、计算图像的梯度
梯度是通过结合图像的大小和角度来获得的。考虑3x3像素的块,首先计算每个像素的和。对于每个像素值,首先使用以下公式计算和:
其中r为像素点的横坐标,c为像素点的纵坐标,为图像像素点的像素值,在计算 和 后,使用下面提到的公式计算每个像素的梯度幅值和角度:
使用opencv中内核大小为1的Sobel算子实现计算图像的水平和垂直梯度,并计算每个像素的梯度和角度如下:
import cv2
#导入图片
img = cv2.imread("G:\workdate\python\demo\image\soccer2.bmp",0)
#计算水平和垂直梯度
gx=cv2.Sobel(img,cv2.CV_32F,1,0,ksize=1)
gy=cv2.Sobel(img,cv2.CV_32F,0,1,ksize=1)
#计算梯度图像与角度图像
m,arg=cv2.cartToPolar(gx,gy)
cv2.imshow("gx",gx)
cv2.imshow("gy",gy)
cv2.imshow("m",m)
cv2.imshow("arg",arg)
cv2.waitKey(0)
图 9-9 运行结果
如图9所示图水平梯度在垂直线方向延伸,垂直梯度在水平线方向延伸。
3、计算8×8细胞梯度直方图
在获得每个像素的梯度后,梯度矩阵(梯度和角度矩阵)被划分为8x16个大小为8x8的单元细胞(cell),如下图10所示。
4、直方图归一化
5、计算HOG特征向量
from skimage import feature, exposure
import cv2
image = cv2.imread('image/soccer2.bmp')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
fd, hog_image = feature.hog(image,orientations=3,pixels_per_cell=(8, 8), cells_per_block=(2, 2), block_norm='L2-Hys',feature_vector=True,visualize=True)
cv2.imshow('hog', hog_image)
cv2.waitKey(0)
Opencv利用HOG特征实现行人检测
Opencv利用HOG特征实现行人检测,包括了HOG的特征提取和SVM识别两部分。利用OpenCV自带的行人检测其实现行人检测主要有三步:
使用opencv的自带的hog目标检测模型结合其训练好的SVM实现行人检测的代码如下:
import cv2
base_path = 'image/people.jpg'#待检测图像的文件路径
img=cv2.imread(base_path)
hog = cv2.HOGDescriptor() #初始化HOG描述子
# 设置支持向量机,其为一个预先训练好的行人检测器
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
#检测行人
rects, wei = hog.detectMultiScale(img, winStride=(4, 4), padding=(8, 8), scale=1.05)
for (x, y, w, h) in rects: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) #将检测结果在图像中圈出来
cv2.imshow("people detect", img) #显示图像
cv2.waitKey(0)
如上图所示我们使用opencv自带模型很好的实现了图像中行人的检测,下面对我们用到的检测器进行简单的介绍。
cv2.HOGDescriptor():OpenCV中的HOG特征提取功能使用了HOGDescriptor这个类来进行封装。其中包含了许多函数,下面列举了常用的一些函数:
- getDetectorSize(self):获得设置的hog描述子的维数
- compute(self,,img,,winStride=None,padding=None, locations=None):计算输入的检测窗口的hog描述子
- computeGradient(self,,img,grad,angleOfs,paddingTL=None, paddingBR=None):计算输入图像的梯度幅度图像
- setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()):设置训练好的支持向量机检测器
- detectMultiScale(self,img,hitThreshold=None,winStride=None,padding=None,scale=None, finalThreshold=None, useMeanshiftGrouping=None):对输入图像进行检测,并且返回目标位置与目标的权重。
目标检测(三)传统目标检测与识别的特征提取——基于HOG特征的目标检测原理相关推荐
- 基于线条特征的机场检测算法——LSD直线检测算法、平行线组提取和聚类
遥感图像的机场检测是图像处理在军事以及航空领域一个重要的应用,现有一些机场提取方法利用显著性特征获取机场区域的方法容易使得机场提取不够完整,而且会混入过多的虚警区域,原因在于图像的显著性特征并能用来表 ...
- 【CVPR 2021】基于解耦特征的目标检测知识蒸馏:Distilling Object Detectors via Decoupled Features
[CVPR 2021]基于解耦特征的目标检测知识蒸馏:Distilling Object Detectors via Decoupled Features 论文地址: 主要问题: 主要思路: 具体实现 ...
- 【MATLAB项目实战】基于RGB特征的火焰检测
首先数据转换为帧图像 clc; clear all;obj = VideoReader('1.mp4');%输入视频位置 numFrames = obj.NumberOfFrames;% 帧的总数 f ...
- dlib库包的介绍与使用,opencv+dlib检测人脸框、opencv+dlib进行人脸68关键点检测,opencv+dlib实现人脸识别,dlib进行人脸特征聚类、dlib视频目标跟踪
文章目录: 1 dlib库介绍 2 dlib人脸检测:绘制出人脸检测框 2.1 dlib人脸检测源码 2.2 opencv + dlib 人脸检测 2.3 dlib人脸检测总结 3 dlib人脸关键点 ...
- 利用HOG特征进行人体检测--简述
1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...
- 基于HOG特征的Adaboost行人检测
原地址:http://blog.csdn.net/van_ruin/article/details/9166591 1.方向梯度直方图(Histogramof Oriented Gradient, H ...
- 计算机自动分类识别的基本原理,基于叶片特征的计算机自动植物种类识别研究...
摘要: 随着计算机图像处理和模式识别技术的发展,计算机植物种类的自动识别与分类也就成为了可能.目前植物识别和分类主要由人工完成,它的主要依据是植物的外观特征.由于植物的外观特征可以通过数字图像方式获得 ...
- 基于SURF特征的目标检测
转战matlab了.步骤说一下: 目标图obj 含目标的场景图scene 载入图像 分别检测SURF特征点 分别提取SURF描述子,即特征向量 用两个特征相互匹配 利用匹配结果计算两者之间的trans ...
- 【火灾检测】基于HSV特征实现火灾检测附matlab代码
1 简介 针对传统火灾监测系统对于大空间的室内场合和开阔的室外环境易失效的问题,提出了一种结合火灾火焰特征和烟雾特征来进行判断的数字图像型火灾监测算法.火焰颜色特征是基于RGB颜色模型中的R,G,B三 ...
最新文章
- Ruby DSL介绍及其在测试数据构造中的使用(2)
- c#_winform_选择文件保存路径
- 幅度调制(AM调制、DSB(双边带)调制、SSB、VSB)
- Android Studio 设置代码提示和代码自动补全快捷键
- 深入浅出Lua虚拟机
- 面向对象的三大特性之三:封装
- mysql 日期分隔符_sql中的日期处理
- FFmpeg源代码简单分析:结构体成员管理系统-AVClass
- “数据治理”:重构和愿景
- 使用canvas标签绘制圆形、三角形
- 古琴十大名曲——唐畅古琴
- 花样16流水灯c语言程序,单片机控制花样流水灯原理图及程序
- app logo显示不全没有铺满
- python的pillow给图片加文字_python PIL(pillow)图像处理-图片上添加文字
- AMD启用虚拟化(AMD-V)
- 一般企业应用上云架构实践
- 关于计算机专业励志的话,电脑行业励志语录
- 编程规则 - 1 概述 -- 帮助你成长为优秀的程序员 杰出的软件工程师、设计师、分析师和架构师
- 记录R语言及python实现地质图形展示
- 二分类指标Precision、Recall、Accuracy、F score、TPR、FPR、MCC