Press "Enter" to skip to content

【图像分类】基于matlab HOG+SVM图像分类识别【含Matlab源码 2141期】

一、HOG+SVM图像分类简介

 

1 HOG目标特征提取

 

HOG特征是目前传统目标检测范畴内应用最广、研究最深的特征。首先,对图像x方向的水平梯度和y方向的垂直梯度进行计算,并计算两者的合成梯度,然后对矩形区域内的HOG进行汇总统计,从而得到特征描述。

 

设当前像素的梯度为[dx,dy],梯度向量的强度和角度分别为g和θ:

 

通常梯度方向会取0°~180°的角度绝对值区间,无符号梯度方向直方图的优势在于效果更好。

 

图1 梯度方向直方图特征的定义

 

如图1所示,在计算完梯度强度及方向后,以Cell为最小单元对检测窗口进行直方图的统计计算,并通过两两Cell组成Block来合并成一个特征向量。利用L1或L2范式对特征向量进行归一化处理,从而得到HOG特征。归一化L1和L2范式公式如下:

 

式中,ε为极小数,用于防止分母为零。

 

特征向量块通过定步长的滑动来检测窗口,从而得到整个窗口的HOG特征集合。此处会有一个针对Cell尺寸、Block尺寸以及滑动步长间的大小匹配问题,主要是关于效率和精度。以8×8 (单位均为像素)的Cell单元为例,当步长为4时,相邻Block会有3/4的部分重复;当步长为8时,重复部分占1/2;当步长为16时,则无重复。实际运算中,重复程度越高,精度越高;重复程度越低,效率越高。因此通常会选择性价比较高的8步长,同时保障效率和精度均在可接受范围内。

 

HOG特征描述的计算主要是求和。若在检测过程中对所有Block分别进行梯度、幅值以及角度计算,则整个运算量会很大。因此,一般通过积分图概念对求和运算进行加速。积分图是指每个Cell的灰度值为其左上矩形区域的灰度值之和,因此需对原梯度向量进行投影分解。如图2所示,利用投影对向量进行分解,会生成新的若干幅梯度投影图。假设梯度投影图为dn(x,y),其中n∈[0,N),那幺相应的积分梯度投影图设为Sn(u,v),则有

 

Sn(u,v)=∑0≤u<x,0≤v<ydn(x,y) (4)

 

图2 基于积分图像的HOG特征快速计算

 

因此图2中第一个Cell的梯度方向直方图向量就可以简化成p1、p2、p3与p4围成的矩阵区域向量叠加,即

 

v1(n)=Sn(p4)-Sn(p2)-Sn(p3)+Sn(p1) (5)

 

以此类推,其余Cell同样依次计算,最终图2中整个HOG特征为v=[v1v2v3v4]。通过积

 

分图方式大大降低了HOG特征的计算复杂度。

 

2 SVM红外目标检测与分类算法

 

SVM分类器原理就是取超平面,令不同类别间的特征距离最大化从而实现分类效果[8]。如图3所示,分类间隔宽度越宽(即最大化),训练集的局部干扰所引起的影响越低。因此可以认为最后一种分类方式的泛化性能和通用性是最佳的。

 

图3 SVM分类器训练示意图

 

SVM的模型可以表述为

 

y=sign(wTx+b) (6)

 

式中,x为特征向量,w为权重向量,y为标记向量,sign(y)则是符号函数。

 

当y=1时,样本为正样本;当y=-1时,样本为负样本,即

 

如图4所示,SVM通常通过令分类间隔最大化来求得最优分类超平面。假定训练集输入为x(i)向量集合,输出为y(i)向量集合,分类间隔则是全集合样本到该超平面最小距离的两倍,即

 

图4 SVM分类器的原理示意图

 

式中,αi≥0,称作拉格朗日乘子。

 

令L(w,b,α)对w和b求偏导,偏导数为零时可得:

 

将式(14)中的w代入式(13),可消去w和b。可以得出,原极值问题的对偶问题的表达式为

 

最后对以上二次规划问题进行求解。解出α后再求出w和b,即可得到最终的SVM分类器。

 

3 基于HOG和自适应学习的SVM目标分类

 

SVM利用HOG特征子可以实现自适应学习的目标分类,其流程如下:获取正样本集(见图5),并用HOG计算特征得到HOG特征描述子;获取负样本集,并用HOG计算特征得到HOG特征描述子;由于在外场采集中会采集到不少只含背景环境而不含目标的红外图像,本文通过对此类图像进行随机裁剪来形成负样本集(见图6),并利用正负样本来训练SVM模型;利用训练完成的模型对训练集的负样本进行难分负样本的检测,若检测结果为错误,则对该样本进行图像截取,并将其重新加入负样本集进行模型再训练;将测试集样本输入到该迭代优化的SVM分类器中进行测试验证。通过调节大小不同的滑动框遍历整幅图像来提取相应的HOG特征子,并利用SVM分类模型进行目标分类。

 

二、部分源代码

 

%% 用hog特征对图像进行多分类,svm训练,1 VS 1

 

%% 1 数据集,包括训练的和测试的 (注意自己图片存放路径,附录我给出示例下载图片链接)

 

imdsTrain = imageDatastore(‘train_images’,…

 

‘IncludeSubfolders’,true,…

 

‘LabelSource’,‘foldernames’);

 

imdsTest = imageDatastore(‘test_image’);

 

%% 显示训练的图片种类Labels和数量Count

 

Train_disp = countEachLabel(imdsTrain);

 

disp(Train_disp);

 

%% 2 对训练集中的每张图像进行hog特征提取,测试图像一样

 

% 预处理图像,主要是得到features特征大小,此大小与图像大小和Hog特征参数相关

 

imageSize = [256,256];% 对所有图像进行此尺寸的缩放

 

image1 = readimage(imdsTrain,1);

 

scaleImage = imresize(image1,imageSize);

 

[features, visualization] = extractHOGFeatures(scaleImage);

 

imshow(scaleImage);hold on; plot(visualization)

 

% 对所有训练图像进行特征提取

 

numImages = length(imdsTrain.Files);

 

featuresTrain = zeros(numImages,size(features,2),‘single’); % featuresTrain为单精度

 

for i = 1:numImages

 

imageTrain = readimage(imdsTrain,i);

 

imageTrain = imresize(imageTrain,imageSize);

 

featuresTrain(i,:) = extractHOGFeatures(imageTrain);

 

end

 

三、运行结果

 

 

四、matlab版本及参考文献

 

1 matlab版本

 

2014a

 

2 参考文献

 

[1]宋敏敏,周泽亚,邱燕,宋朋,姚莉.基于HOG特征和SVM分类器的红外图像智能检测与分类方法[J].红外. 2022,43(04)

 

3 备注

 

简介此部分摘自互联网,仅供参考,若侵权,联系删除

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注