利用HOG特征和SVM算法对图片进行二分类实现图像目标的检测

一、HOG方向梯度直方图

1.HOG简介

    方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中。HOG的思想就是在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。

2.HOG基本步骤简述

(1)标准化gamma空间和颜色空间

    第一步,为了减少光照因素的影响,首先需要将整个图像进行规范化(归一化)。在图像的纹理强度中,局部的表层曝光贡献的比重较大,所以,这种压缩处理能够有效地降低图像局部的阴影和光照变化。因为颜色信息作用不大,通常先转化为灰度图;

(2)计算图像梯度

    第二步,计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值;求导操作不仅能够捕获轮廓,人影和一些纹理信息,还能进一步弱化光照的影响。

(3)为每个细胞单元构建梯度方向直方图

    第三步,为每个细胞单元构建梯度方向直方图的目的是为局部图像区域提供一个编码,同时能够保持对图像中人体对象的姿势和外观的弱敏感性。我们将图像分成若干个“单元格cell”,例如每个cell为66个像素。假设我们采用9个bin的直方图来统计这66个像素的梯度信息。但bin并不是连续的,而是20度为一个bin,然后相同bin是关于180度对称。

(4)把细胞单元组合成大的块(block),块内归一化梯度直方图

    第四步,由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩,方法是把各个细胞单元组合成大的、空间上连通的区间(blocks)。例如本次实验所使用的block是(16, 16),窗口(即图片)大小是(64, 128),block的滑动步长是(8,8),共有105个block,block内的cell是(8, 8),共有4个cell,而cell内的bin是9个,那么总共有36715=3780个特征。

(5)收集HOG特征

    最后一步就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用,在opencv中使用相应的方法。图1 HOG检测步骤流程。

图1 HOG检测步骤流程

二、SVM支持向量机

    支持向量机(支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),将样本分为正样本和负样本,其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。SVM一般用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。

三、实验流程

1.数据集准备

    数据集分为正负样本数据集,2个文件夹,分别存储在pos(pos1为作者的图片数据集)和neg文件夹下,正样本有820张图片,负样本有1931张图片,均是64*128的格式。

2.图像预处理

    对图像进行3以下3步的预处理:首先将视频分解为图片,其次是图片缩放,最后是将图片裁剪为64 * 128。

3.实验结果

    图2和图3分别是我仿造源作者代码的实验结果以及作者的实验结果,明显的看出我的实验结果并不准确。

图2 自己的实验结果
图3 原作的实验结果

四、程序代码

1.视频图像的预处理

(1)视频分解
'''
视频分解图片 video_Decomposition(video_name)
1 load 2 info 3 parse 4 imshow imwrite
负样本 64*128 正样本:64*128
'''
import cv2
import numpy as np
def video_Decomposition(video_name, begin):
    cap = cv2.VideoCapture(video_name)# 获取一个视频打开cap 1 file name
    isOpened = cap.isOpened # 判断是否打开
    print(isOpened)
    fps = cap.get(cv2.CAP_PROP_FPS)#帧率
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #width
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#height
    print(fps, width, height)
    i = 0 + 205 * (begin - 1) 
    while(isOpened):
        if(i == 205 * (begin - 1) + 205):
            break
        else:
            i = i + 1
        (flag, frame) = cap.read() #读取每一章 flag frame
        fileName = 'pos_Original//'  + str(i) + '.jpg'
        print(fileName)
        if flag == True:
            cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY,100])
    print(i)
    print("video_Decomposition OK!")
for i in range(1, 5):
    video_Decomposition(str(i) + '.mp4', i)
(2)图片裁剪缩放
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
行人检测是计算机视觉领域中的一个重要任务,其目标是对图像或视频中的行人进行准确的检测和定位。HOG特征SVM分类器是常用的行人检测算法,Cascade是一种优化算法HOG特征是一种基于局部梯度的图像特征,它主要是通过计算图像中各个区域的方向梯度直方图来描述图像特征HOG特征可以很好地描述行人的轮廓和纹理等特征,因此在行人检测中得到了广泛的应用。 SVM分类器是一种二分类器,它可以将图像分为两类,即行人和非行人。SVM分类器的训练过程是通过确定一个最优的决策边界来实现的,这个决策边界能够最大程度地将正负样本分开。 Cascade算法是一种级联式分类器,它可以有效地减少计算量和提高检测速度。Cascade算法通过将不同的SVM分类器级联起来,将图像分为多个阶段进行检测,如果在某个阶段中没有检测到行人,就会立即停止检测,从而减少了计算量和检测时间。 综上所述,使用HOG特征SVM分类器以及Cascade算法作为行人检测分类器具有以下优点: 1. HOG特征可以很好地描述行人的轮廓和纹理等特征,具有很好的区分度。 2. SVM分类器可以准确地将图像分为行人和非行人两类,具有很好的分类效果。 3. Cascade算法可以有效地减少计算量和提高检测速度,具有很好的实时性。 因此,这种分类器可以在实际应用中快速准确地检测图像或视频中的行人,具有很高的实用性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值