APP下载

基于HOG+SVM的图像分类系统的设计与实现

2017-05-18姜经纬程传蕊

漯河职业技术学院学报 2017年2期
关键词:训练样本特征向量分类器

姜经纬, 程传蕊

(1.沈阳航空航天大学, 辽宁 沈阳 110000; 2.漯河职业技术学院, 河南 漯河 462000)

基于HOG+SVM的图像分类系统的设计与实现

姜经纬1, 程传蕊2

(1.沈阳航空航天大学, 辽宁 沈阳 110000; 2.漯河职业技术学院, 河南 漯河 462000)

图像分类在工业、医疗、勘测、驾驶等领域都有较高的实用价值,通过分析图像分类技术,采用软件工程思想,基于HOG+SVM和OpenCV,设计实现一个图像分类系统。 经测试,本系统界面简洁,操作简单,运行稳定,可以准确地进行图像分类,获取图像信息。

图像分类;HOG特征;SVM分类器

0 前言

随着互联网、电子技术、成像技术的快速发展,数字图像已成为一种重要的信息表达方式。从日常生活中的图像广告、二维码到医学研究的显微图像,从卫星中的遥感图像到精密的指纹检测,人类无时无刻都在和图像打着交道。但是,人们从图像中获得的很多信息并不全是有效信息,需要从其中筛选出自己所需要的信息数据,因此图像分类技术应运而生,它既可以摆脱掉繁琐的人工分类作业,还可以构建出近似人类语义的信息。

图像分类的应用十分广泛,在工业、医疗、勘测、驾驶等领域具有巨大的应用价值。基于这样的背景, 本文设计了一个图像分类系统,该系统具有对图像中的物体进行正确分类并标注其位置的功能。

1 系统需求分析

系统的主要目的就是使用HOG+SVM的方法进行图像分类,首先通过输入若干张训练样本图像训练SVM分类器,训练完成之后随机选择一张测试图像输入到分类器中,最后输出分类后的图像,并在物体所在位置标记矩形框。

根据需求,系统将从以下三个方面来简单描述功能需求。

(1)图像的选择显示功能。打开图像显示窗口,在计算机中选择待检测的图像并显示出来。

(2)图像分类功能。当已选定想要分类的图像时,系统可以直接使用分类器进行分类并在图像上标注目标类别和所在位置。

(3)图像分类结果显示功能。通过点击显示按钮,在界面上显示分类后的图像,并将统计得到的物体个数显示出来。

2 系统设计

图像分类系统分为图像输入、HOG特征提取、图像分类、图像输出四个步骤。系统采用C++语言编写,主要分为如下五个模块:输入模块、滑动窗口模块、特征提取模块、分类器训练模块、输出模块。图像由输入模块进入系统,通过滑动窗口和特征提取获得图像特征,经过分类器分类后由输出模块输出分类结果(如图1)。

图1 系统结构图

2.1 输入模块

本模块主要负责实现系统的图像输入功能。在程序界面上设计一个按钮实现本部分功能。在点击按钮后会弹出一个窗口,使用者在窗口中选择图像,系统会将图像的路径保存在一个字符串中。该路径将会提供给滑动窗口模块,以实现后续的图像分类功能。

2.2 滑动窗口模块

本模块实现的主要功能是对图像进行稠密的滑动窗口检测,使得系统可以进行特征提取。首先设定HOG参数,参数包括检测窗口大小、块大小、cell大小和移动步长。在一个检测窗口进行特征提取之前,系统会将其划分为若干个块,一个块内包含若干个cell胞元。在检测窗口内,以一个块为单位按照设定好的块步长进行稠密的滑动,滑动产生的单元格交由特征提取模块提取特征向量。当每一个块提取完当前的HOG特征之后,会继续滑动,直到遍历完检测窗口内所有的块。

系统中设定检测窗口大小为64*128,块尺寸为16*16,cell大小为8*8,块步长为8*8。块在检测窗口中滑动,每次滑动距离为块步长。HOG设定步长为8像素,水平方向有7个块,垂直方向有15个块,由此可计算得到,一个64*128的检测窗口中包含105个块,每8*8的像素组成一个cell,每2*2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4*9=36个特征。因此,一个检测窗口检测子维数为3780维[9]。每一次滑动都使用特征提取模块提取特征,直到遍历完所有cell。

2.3 特征提取模块

本模块会对滑动窗口模块产生的单元格构建梯度方向直方图,统计局部图像梯度信息并进行量化,得到局部图像区域的特征描述向量,同时能够降低对图像中光照的影响。在对所有的单元格进行特征提取后,把单元格组合成大的块,块内归一化梯度直方图。将所有块的HOG描述符组合在一起,形成最终的HOG特征向量。在分类器的训练中,使用所得到的特征向量训练分类器。在分类过程中提取待分类图像的特征向量进行图像分类。

2.4 分类器模块

本模块分为两部分,即分类器的训练模块和测试模块。

2.4.1 训练模块

在准备足够正样本集和负样本集后,要利用机器学习的方法进行训练。想要得到一个性能优良的分类器,训练样本理论上应该是无限多的,而且所有的训练样本应裁剪为统一大小,与HOG设定的检测窗口大小一致。使用特征提取模块提取所有正负样本的HOG特征向量,利用其训练SVM分类器。训练好的分类器交由分类模块使用。

训练样本来源于手动收集,收集图片并从图片中裁剪出包含目标的部分作为正样本,裁剪得到不包含目标的部分作为负样本。理论上,样本的数量越多,则训练出的分类器准确率越高。

(1)正负样本的准备。准备训练样本集合,包括正样本集和负样本集。首先收集大量的与检测目标相关的图片,对这些图片进行裁剪,把包含检测目标的样本作为正样本使用,不包含目标的样本作为负样本。收集到足够的训练样本之后,将正负样本放在不同的文件夹中,并将所有训练样本缩放到同样的尺寸大小。

(2)使用HOG.compute函数提取正负样本的HOG特征。HOG.compute函数是计算HOG特征向量的函数。向该函数提供图像及滑动窗口块步长,函数会对检测窗口进行滑动检测,依次返回样本图像中每一维的特征,并将此特征保存在矢量中。

(3)存储图像向量。初始化两个矩阵,sampleFeatureMat矩阵保存所有训练样本的特征向量组成的矩阵,行数为样本的个数,列数为HOG描述子维数;sampleLabelMat用于保存训练样本的类别,行数为样本的数量,列数为1;样本标记1表示物体存在,0表示物体不存在。

(4)训练分类器。先设置SVM参数和迭代终止条件,当迭代满1000次或误差小于FLT_EPSILON时停止迭代,选择RBF核函数,使用C_SVC,并设定松弛变量为0.01进行线性训练。最后对使用SVM.train函数进行训练,输入训练数据和相应参数对分类器进行训练。通过训练找到最优超平面。最后使用SVM.save函数将得到的分类器保存。

2.4.2 测试模块

本模块的功能是在待检测图像上标注目标类别和所在位置。首先通过输入模块提供的图像路径打开图像,然后对图像进行滑动窗口检测,提取每一个检测窗口的特征向量。使用训练好的分类器进行分类,返回所检测的目标窗口的边缘。若该窗口内存在嵌套,则先删除最外层矩形框,然后在窗口边缘画上对应颜色的矩形框。保存图像,将此图像的路径交给输出模块。

(1)读取测试图像,获得待检测图像的路径。

(2)使用load()函数加载训练好的xml文件。xml文件中有两个数组:support vector和alpha,有一个浮点数rho。将alpha矩阵同support vector相乘,得到一个列向量。然后在该列向量的最后添加浮点数rho。如此,便得到了一个分类器。

(3)使用imread()函数读取图像。

(4)提取检测子,使用detectMultiScale()函数对图像进行多尺度检测。detectMultiScale()函数是基于detect()函数的多尺度检测方法。检测窗口大小是固定不变的,由待检测图像按照比例系数缩小。detectMultiScale()函数对检测窗口内的图像进行滑动检测,提取检测窗口内的特征向量,直到待检测图像的尺寸小于检测窗口的尺寸时停止检测。调用训练好的SVM分类器对获得的检测窗口的特征向量进行分类。返回所包含的目标窗口的边缘。

(5)程序会对图像进行处理,在目标部分嵌套矩形框,将所有没有嵌套的矩形框放到found_filtered数组中去。对于存在嵌套情况的矩形框,只需要取外面最大的矩形框重新放入到found_filtered数组中。

(6)调整矩形框大小。因为HOG检测后标记出的矩形框比实际目标框大,所以需要进行调整。

2.5 输出模块

本模块主要负责系统分类后的图像输出部分。获得分类后保存好图像的路径,在界面上就可以显示该图像。同时将此路径保存在字符串中,以便进行下一个类别的分类。

设计“打开”按钮,使用CFileDialogdlg()函数点击按钮后进行响应,打开窗口供选择图像。在选择图像后,将图像路径显示在文本框中并保存于字符串。

设计图像显示函数ShowJpgGif(CDC* pDC,CStringstrPath, int x, int y) ,输入图像路径和显示图像的控件ID,在界面上实现显示功能。

3 系统实现

3.1 主要界面

采用C++开发语言,在C++开发环境vs2010中开发主界面(如图2)。

图2 界面图

3.2 测试结果

在如图2所示的界面中点击“打开”按钮,打开窗口选择图像,勾选预设分类器,先点击“人”按钮对人进行检测,再点击“狗”按钮对狗进行检测。最后点击“显示”按钮显示检测后的图像(见图3)。

3.3 测试结果分析

通过多次实验,得到表1所示的结果。

通过图3分析可得通过HOG提取图像的特征值,再由SVM分类器进行分类检测,可以快速检测到图像中的目标及数量,且成功率较高。由于选用的训练样本图像是自己裁剪收集的图像,在样本质量上与直接使用的图像集还有一定的差距。

想要有效减少误检和漏检这样的问题,有如下两个解决的办法:

(1)选择更多的检测样本,图像数量应至少为数千张。

图3 测试结果

检测目标人狗汽车实际目标数456770实际检测到数量6510596检测成功率69%63.8%73%

(2)选取有效的训练样本,考虑检测过程中会出现的各种情况。在针对人脸的检测中会使用已有的数据集,但是在测试中会出现侧脸、头顶等镜头,这时就需要手工加入这样的训练样本。

增加训练样本后的测试结果如表2所示。

表2 增加训练样本后测试结果

4 结束语

采用计算机快速分类和分析图像的方法从图像

中筛选出自己所需的数据信息,存在效率较低的问题。针对该问题,本文设计了一个非常有实用价值的系统,该系统遵循软件工程的思想,基于OpenCV图像处理技术,采用C++开发语言,在C++开发环境vs2010中实现对图像的处理。由检测结果可以看出,该系统有较准确的检测率,可以代替人力对图像多种类进行检测,在图像中直接标注不同种类的物体,具有很好的应用前景。

[1] 董亮. 视频多目标跟踪的理论与方法[D]. 西安:西安电子科技大学, 2014.

[2] zhazhiqiang.HOG从理论到OpenCV实践[DB/OL].http://blog.csdn.net.

[3] 田贤先,鲍泓,徐成.一种改进HOG特征的行人检测算法[J].计算机科学, 2014, 41(9):320-324.

[4] zhazhiqiang,SVM从理论到OpenCV实践[DB/OL]. http://blog.csdn.net.

[5] chenlee,OpenCV是什么[DB/OL].http://blog.csdn.net.

[6] 张桂宁.基于改进HOG特征值的行人检测[J].计算机与现代化, 2015(2):52-56.

[责任编辑 吴保奎]

Design and Implementation of Image Classification System based on HOG+SVM

JIANG Jing-wei1, CHENG Chuan-rui2

(1.Shenyang Aerospace University, Shenyang 110000, China;2.Luohe Vocational Technology College, Luohe 462000, China)

Image classification has high practical value in the industrial, medical, reconnaissance, driving and other fields. We want to design an image classification system through the analysis of image classification technology, the idea of software engineering, HOG+SVM and OpenCV. After testing, the system interface is simple, with easy and stable operation, and you can accurately classify image, access to image information.

image classification; HOG feature; SVM classifier

2016-11-17

姜经纬(1994-),男,河南漯河人,在读本科生,主要从事图像识别分类方面的学习与研究;程传蕊(1970-),女,河南漯河人,教授,主要从事算法研究。

10.3969/j.issn.1671-7864.2017.02.013

TP391.41

A

1671-7864(2017)02-0046-04

猜你喜欢

训练样本特征向量分类器
二年制职教本科线性代数课程的几何化教学设计——以特征值和特征向量为例
克罗内克积的特征向量
人工智能
一类特殊矩阵特征向量的求法
基于差异性测度的遥感自适应分类器选择
基于实例的强分类器快速集成方法
EXCEL表格计算判断矩阵近似特征向量在AHP法检验上的应用
宽带光谱成像系统最优训练样本选择方法研究
基于稀疏重构的机载雷达训练样本挑选方法
基于层次化分类器的遥感图像飞机目标检测