【火灾检测】连通区域+SVM特征融合火灾检测【含Matlab源码 1223期】

💥💥💞💞欢迎来到Matlab仿真科研站博客之家💞💞💥💥

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。

🍎个人主页:Matlab仿真科研站博客之家

🏆代码获取方式:
💥扫描文章底部QQ二维码💥

⛳️座右铭:行百里者,半于九十;路漫漫其修远兮,吾将上下而求索。
在这里插入图片描述

⛄更多Matlab图像处理(仿真科研站版)仿真内容点击👇
Matlab图像处理(仿真科研站版)

⛄一、简介

1 摘要
为了尽可能地缩小疑似火焰区域,提高火灾检测的准确性和实时性,提出了把图像运动目标检测应用于火焰检测的问题。首先使用背景减除法提取运动目标,然后使用基于连通区域的面积阀值精确地提取疑似区域和其轮廓,再依据早期火灾的视觉特征, 抽取四个特征量, 即:相邻帧红色比重平均增长率、面积变化率、形状的平均相似度和圆形度, 最后通过SVM融合这些特征量进行综合判别。实验结果表明,上述方法计算速度快,检测效果好,误判率低,具有良好的抗干扰能力,为图像目标优化控制提供了依据。

1 引言
为了预防火灾,人们探究了很多火灾检测技术,目前,在某些场所已找到了比较成熟的火灾探测的方法,如感温、感烟等探测器,但在室外和大空间建筑物等场所这些探测器却难以发挥应有的作用,因为这些探测器只有当温度或烟雾浓度到达一定程度时,才会发出警报,因此发出的警报必然有一定的延迟,不利于火灾的早期发现,而图像型火灾检测技术却能弥补这些方法的不足,能在第一时间内捕捉到火灾信息,继而进行快速的检测。图像型火灾检测技术,早期主要集中在依据火焰颜色特征进行判别,这类方法不能区分真实的火焰与类似火焰颜色的物体。近期的研究发掘了火焰更多特征。金华彪等"根据火焰蔓延时的面积、相似度的变化来识别火灾的发生。张正荣等利用火焰尖角的数目,形状相似度来判断火灾是否发生。Torey in等利用时域小波变换和空域小波变换来分析火焰的闪动情况及火焰内部颜色变化情况。吴铮等“使用三状态的Markov模型来描述火焰和非火焰像素的时空特性,通过不同状态之间的跃迁来区分火焰与类似火焰颜色的运动物体。这些方法在通常情况下能够检测出火焰,但容易产生误判。
传统图像型火灾检测方法仅考虑火焰的部分特征,没有从整体的角度综合考虑这些特征,易产生漏检和误检,检测速度也较慢。鉴于此,本文利用火灾发生初期的火焰的形状和面积不断变化的特征,使用运动目标检测的方法,提取火焰的疑似区域,然后依据火焰的颜色分布、火焰面积逐渐增大、火焰边缘不断变化等特征提取火焰的特征值, 使用SVM进行综合判别。

2 火灾疑似区域及轮廓的提取
火灾疑似区域及轮廓的提取是火焰特征抽取和识别的基础,火焰目标提取的好坏对于提高系统识别准确率和检测速度具有重要的影响。在传统的火灾检测方法中,火焰的目标区域提取大多数都是基于灰度值阈值进行分割。这些方法虽然能有效的提取目标,但也带来了很多噪声,而且为后面排除这些噪声增加了计算工作量,同时也增加了误判的风险。鉴于此,本文依据火灾发生初期火焰从无到有具有运动的特点,使用背景减除法初步定位出火灾图像中可疑区域,然后使用基于连通区域的面积阈值方法精确提取火灾图像中疑似区域和其轮廓,该方法不仅速度快,而且能够有效过滤掉一些噪声和具有火焰色彩特点的静态物体。
2.1 火灾疑似区域定位
火灾发生后,随着火势的增大,火焰不断的扩张,在图像上表现为火焰面积呈连续扩展性增加趋势,采用背景减除法可以快速的从火灾图像中分割出火焰可疑区域。设I,(x,y)为当前帧图像,B,(x,y)为背景图像,A/,(x,y)为差分图像,则背景减除法公式如下:
在这里插入图片描述
上式中T是·种自适应阀值,阀值T取灰度图像的维最大熵的阀值,这样可以将目标与其周边的背景点尽量区分开,最大限度地剔除干扰区域…如果当前图像与参考图像的最大灰度差值小于阀值T,认为无火焰l标,因为“前图像有可能是由于周围环境的影响使背景图像发生了微小变化,如天气的微小变化,应视其为下扰源通过带阈值的背景减除法获得的值化运动图像M,(x、y)中可能会存在很多噪声、孔洞和其它非火焰运动物体,它们会对检测结果和检测性能造成影响,为了减少噪声,提高检测效率,应尽可能地排除这些区城,对:值图像M,(x,y)使用中值滤波和数学形态学中的膨胀与腐蚀运算进行处理,不仅去除了图像中的·些细节,填补了孔洞和连通短的搭接,而且减少了待检测区城的数目。图1是分别使用背景减除法和传统阈值分割法获得可疑火焰区域。
在这里插入图片描述
2.2 疑似区域及轮廓提取
为了便于火焰特征的提取,需要精确地提取目标区域和轮廓。传统轮廓提取方法主要是利用边缘检测算子,如:Rob et Cross, Prewitt和Sobel等算子, 这些方法计算简单, 速度较快,但对噪声较敏感、抗干扰性能差,提取的轮廓粗细不一且有断裂现象,需要花费大量的时间修补和细化。为了既
能有效提取目标轮廓,又能最大限度地易除干扰区域,本文使用一种基于连通区域面积阈值的目标轮廓提取算法,具体方法如下:
按照从左到右和从上到下的顺序扫描二值图像M,(x,y),每扫描到一个灰度值为255的像素点p(x,y),都按如下方式处理:
1)考察p(x-1,y)是否属于个连通区域为A,,如果p(x-1,y):A,,则转2)处,否则将p(x,y)加人到A,中,并将A,所在区域的面积加1,然后再考察像素点p(x+1,y-1)是否在另一个连通区域为A,中,如果p(x+1,y-1)eA,,则合并A,和A,,合并后的区域面积为A;与A,的面积和,否则继续扫描下一个像素。
2)如果p(x-1,y)EA,,则考察p(x-1,y-l)是否在另一个连通区域为A,中,如果p(x-1,y-1)EA,,则转3)处,否则将p(x,y)加人到A,中,并将A,所在区域的面积加1,然后在考察p(x+1,y+1)是否在另一个连通区域为A,中,如果p(x+1,y-1)e4,,则合并A,与A,,合并后的区域面积为A,与A,的面积之和,否则,则继续扫描下一个像素。
3)如果p(x-1,y)dA,,且p(x-1,y-1)A,,则考家p(x,y-1)是否在另一个连通区域为A,中,如果p(x,y-l)eA。,则将p(x,y)加入到A。中,并将A,所在区域的面积加1.否则考察p(x+1,y-1)是否在另·个连通区城为4,中, 如果p(x+1, y+1) eAj, 则将p(x, y) 加人到4, 中, 并将A,所在区域的面积加1,否则新建·个区域4,,,将p(x,y)加人剑A,.,中,并将A,,,所对应的面积加1.继续打描下·个像.,
经过以上处理后,可能得到若下个连通区域,此时可以选取适当的面积值(从统计出的面积值中选取)作为阀值对图像进行过滤,最终面积人于阀值的连通区域被完幣的保留下来。然后再采用挖空法,便可以得到连通区域的轮廓。该方法不仅可以去除噪声,而儿可以获取·个像素宽度不相交的轮廓。图2是Robe ts Cross与本文方法提取轮廓效果图。
在这里插入图片描述
3 火焰图像特征的提取
根据火灾发生初期火焰在图像上表现出的特征信息,选取火焰红色比重平均增长率、火焰面积增长率、火焰形状的平均相似度和圆形度作为火焰识别依据。

3.1 火焰颜色特征提取
火焰颜色是火焰的一个重要特征,通过对大量火焰图像的分析, 发现火焰图像的颜色具有一定的规律:在RGB色彩空间中,R通道>G通道>B通道;火焰从焰心到外焰其颜色有从白色向红色移动的趋势;火焰的颜色易受光照的影响, 在不同的环境下, 表现为不同的颜色。Tur gay等s通过计算RGB空间的R分量的平均值, 然后再逐个像素检测判断,这种算法虽然计算简单,但强壮性不高,易受光照和环境的影响。为了减少对颜色变化的敏感性,本文使用红色比重增长率来描述火焰颜色分布规律。第i帧第k区域红色比重计算公式如下:
在这里插入图片描述
其中R(p,(x,y))、G(p,(x,y))、B(p,(x,y))分别为区域A,像素点p,(x,y)的R、G、B值。相邻两帧红色比重增长率为:
在这里插入图片描述
为了提高计算的准确性,在这里取5个连续帧间的红色比重平均增长率R,作为判据。
在这里插入图片描述
3.2 火焰面积特征提取
火灾发生后,火灾区面积呈现连续、扩展性的增长趋势,表现在图像上就是目标区域面积的扩张,面积扩张的程度可以通过面积增长率AAg(k=1, 2, …M) 来描述。设!时刻第k区域的面积为S,.4.y时刻第k区域的面积为S,ja,在视频图像中,时间的划分通常是以帧数来计算,因此,可以认为S,就
是第i帧的目标区域A,的面积,S,.j,就是第(i+j)帧的目标区域Aj的面积。则面积增长率计算公式如下式:
在这里插入图片描述
在实验中j取5,通过面积增长率AA,可以排除–些固定光源和快速运动物体的干扰,提高系统的识别率。

3.3 火焰形状特征提取
火焰的形状从单帧图像上观察是不规则,但从序列图像上观察,特别是间隔较短的连续帧图像,火焰的形状有一定的相似性,并且在一定的范围内变化,与快速移动的光源和具有火焰颜色的其它运动物体有着明显的差别,因此可以将其作为火焰判别的一个依据。具体计算方法如下:设视频图像序列为f(x,y),,i=1,2…N,i为图像帧数,(x,y)为图像中各个像素的位置。A,为疑似区域,k=1,2…M,k为图像的可疑区城标号,则相邻帧的相似度计算公式如下:为了降低计算复杂度和提高计算的准确性,在这里取5个连续帧间的相似度的平均值,6!4作为判据。

3.4 火焰形状特征提取
早期火灾火焰由于外界因素的影响和火羽流等现象其边缘不断地变化,无规律性,而其它与火焰具有类似颜色特征的白炽灯、蜡烛和路面上的霓虹灯等其边缘轮廓规则程度较高。因此,边缘轮廓形状可以作为火灾火焰识别的依据。在计算机视觉系统中,通常用圆形度来表示物体边缘轮廓复杂程度。其计算公式为:
在这里插入图片描述
上式中A,表示当前第i帧第k区域的面积,也就是第i帧第k区域所有像素的总和,C,为第i帧第k区域轮廓的周长。

4 基于SVM火灾检测
SVM是Cortes和V panik在统计学习理论的VC理论和结构风险最小原则基础上提出的一种新的机器学习算法,力求在有限的样本信息条件下寻求最优分类结果,其基本思想是构造一个两类问题的最优分类函数,使两类尽量无错误地分开,并使两类间的间隔最大。设(x,x),(x20)2),…(x,,x,)为训练样本,x,eR"为n维训练样本,xe1-1,1|为样本i的类别信息, SVM就是寻找最优分类面:wT(x) +b=
0,使两类样本尽可能的分开,而且使两类之间距离(2/〗w〗)最大。于是寻找最优分类面的问题就转化为下面的优化问题:
在这里插入图片描述
约束条件
在这里插入图片描述
这是一个二次凸规划问题,通常将其转化为对偶问题来解决:
在这里插入图片描述
解出α,的值,进而求出最优分类面中的权系数向量w和阈值b,则得到最优分类函数:
在这里插入图片描述
对于非线性情况,使用核两数将原样本映射到高维空间中转化为高维空间中的线形可分问题,其最优分类函数为:
在这里插入图片描述
式中K(x;*x,)为核函数。常见的核函数有:多项式核函数、径向基核函数和Sigmoid核函数。火灾是一种失去控制的燃烧,其燃烧过程是一个典型非线形的过程,其状态变化受到可燃物的原料以及周围环境的影响和限制, 具有较强的随机性, 用SVM进行火灾检检测, 可以克服人为设定大量阈值的局限性,提高火灾识别的实时性和准确性。具体方法如下:①使用背景减除法,并结合基于连通区域的面积阈值方法提取图像中火焰疑似区域。②计算火焰的四个特征量:红色比重平均增长率、相邻帧面积增长率、边缘轮魔圆形度和相邻帧形状的平均相似度,构造训练样本数据。③训练SVM分类器。④利用SVM分类器进行检测。具体流程如图3。
在这里插入图片描述

⛄二、部分源代码

clear all
close all
clc
%阈值分割:可以通过对一个视频帧序列,选取相邻两帧相减获取变化的区域,在通过如下的图像滤波、直方图均衡化、二值化、膨胀、再利用canny完成当前火焰的轮廓提取
%读取原图
Img = imread(‘1.png’);
% Img2 = imread(‘2.png’);
% Img_b=Img-Img2; %连续两帧做差,获取变话的区域

[M,N,K] = size(Img);
gray_R=Img(:,:,1);
gray_G=Img(:,:,2);
gray_B=Img(:,:,3);
% if numel(M)>2
% gray = rgb2gray(Img);
% else
% gray = Img;
% end
% 创建滤波器
W = fspecial(‘gaussian’,[5,5],1);
G = imfilter(gray_G, W, ‘replicate’);
figure;
subplot(121); imshow(gray_G); title(‘原始图像’);
subplot(122); imshow(G); title(‘滤波后图像’);

%直方图均衡化
[J,L]=histeq(G);
figure;
subplot(121);imhist(G);
subplot(122);imhist(J);

bw = im2bw( G,graythresh(G));
se1=strel(‘disk’,5);%这里是创建一个半径为5的平坦型圆盘结构元素
Ifilt=imdilate(bw,se1);

figure,imshow(Ifilt);
Ifilt2=bwareaopen(Ifilt,150); %先做完相应的二值化,在利用连通域做处理
% 边界检测
contour = edge(Ifilt2 ,‘canny’);
figure(3)
imshow(contour); title(‘边界’)
contour=double(contour);
t=1;
for i=1:M
for j=1:N
if(contour(i,j)==1)
image_points_x(t,1)=i;%边界上的点
image_points_y(t,1)=j;
t=t+1;
end
end
end
figure,imshow(G);
hold on;scatter(image_points_y,image_points_x,‘r’,‘+’)
%%
%特征提取(火焰的颜色、火焰的面积、火焰的平均相识度和圆形度)
%火焰的颜色(R>G>B),利用火焰红色比重增长率来描述火焰颜色的分布规律
Ifilt2=double(Ifilt2);
t1=1;
for i=1:M
for j=1:N
if(Ifilt2(i,j)==1)
image_ROI_x(t1,1)=i;%整个区域内的点,可认为就是火焰的面积(就是所提取轮廓内包含的像素点的个数)
image_ROI_y(t1,1)=j;
t1=t1+1;
end
end
end

num_point=size(image_ROI_x,1);
R_S=0;
G_S=0;
B_S=0;

for i=1:num_point
R_S=R_S+double(gray_R(image_ROI_y(i,1),image_ROI_x(i,1)));%统计所有红色图像点
G_S=G_S+double(gray_G(image_ROI_y(i,1),image_ROI_x(i,1)));
B_S=B_S+double(gray_B(image_ROI_y(i,1),image_ROI_x(i,1)));
end
Img_S=R_S+G_S+B_S;
r_Aver=R_S/Img_S;%当前图像的红色比例

%%
%火焰的面积(就是所提取轮廓内包含的像素点的个数),就是上面的num_point
%火焰的颜色形状变化
%火焰的圆形度
cir=size(image_points_x,1);%周长
area=num_point;
doc=(4pinum_point)/(cir*cir);%圆形度

features=[r_Aver,num_point,doc];
%features=[r_Aver,num_point,simil,doc];
save(‘features’,‘features’);
load(‘features.m’);%所提取的特征
ttt=1;
for ii=1:size(path1,1)-2
if(ii<=(size(path1,1)-2)/2)
labels(ii,1)=ttt;
else
labels(ii,1)=ttt-2;
end
end

desc_new=[];
for i=1:size(path1,1)-2
desc_new=[desc_new;features{i}'];
end
%%
%SVM
dataset=features;
lableset=labels;
% 将第一类与第二类的1-15做为训练集
train_set = [dataset(1:15,:);dataset(26:40,:)];
% 相应的训练集的标签也要分离出来
train_set_labels = [lableset(1:15);lableset(26:40)];
% 将第一类的6-10,第二类的16-20,做为测试集
test_set = [dataset(16:25,:);dataset(41:50,:)];
% 相应的测试集的标签也要分离出来
test_set_labels = [lableset(16:25,:);lableset(41:50,:)];

% 数据预处理,将训练集和测试集归一化到[0,1]区间

test_dataset = [train_set;test_set];
% mapminmax为MATLAB自带的归一化函数
[dataset_scale,ps] = mapminmax(test_dataset’,0,1);
dataset_scale = dataset_scale’;

train_set = dataset_scale(1:mtrain,:);
test_set = dataset_scale( (mtrain+1):(mtrain+mtest),: );

%% SVM网络训练

%% 结果分析

% 测试集的实际分类和预测分类图
% 通过图可以看出只有一个测试样本是被错分的
figure;
hold on;
plot(test_set_labels,‘o’);
plot(predict_label,‘r*’);
xlabel(‘测试集样本’,‘FontSize’,12);
ylabel(‘类别标签’,‘FontSize’,12);
legend(‘实际测试集分类’,‘预测测试集分类’);
title(‘测试集的实际分类和预测分类图’,‘FontSize’,12);
grid on;

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]王文豪.基于连通区域和SVM特征融合的火灾检测[J].计算机仿真. 2014,31(01)

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

🍅 仿真咨询
1 各类智能优化算法改进及应用

1.1 PID优化
1.2 VMD优化
1.3 配电网重构
1.4 三维装箱
1.5 微电网优化
1.6 优化布局
1.7 优化参数
1.8 优化成本
1.9 优化充电
1.10 优化调度
1.11 优化电价
1.12 优化发车
1.13 优化分配
1.14 优化覆盖
1.15 优化控制
1.16 优化库存
1.17 优化路由
1.18 优化设计
1.19 优化位置
1.20 优化吸波
1.21 优化选址
1.22 优化运行
1.23 优化指派
1.24 优化组合
1.25 车间调度
1.26 生产调度
1.27 经济调度
1.28 装配线调度
1.29 水库调度
1.30 货位优化
1.31 公交排班优化
1.32 集装箱船配载优化
1.33 水泵组合优化
1.34 医疗资源分配优化
1.35 可视域基站和无人机选址优化

2 机器学习和深度学习分类与预测
2.1 机器学习和深度学习分类
2.1.1 BiLSTM双向长短时记忆神经网络分类
2.1.2 BP神经网络分类
2.1.3 CNN卷积神经网络分类
2.1.4 DBN深度置信网络分类
2.1.5 DELM深度学习极限学习机分类
2.1.6 ELMAN递归神经网络分类
2.1.7 ELM极限学习机分类
2.1.8 GRNN广义回归神经网络分类
2.1.9 GRU门控循环单元分类
2.1.10 KELM混合核极限学习机分类
2.1.11 KNN分类
2.1.12 LSSVM最小二乘法支持向量机分类
2.1.13 LSTM长短时记忆网络分类
2.1.14 MLP全连接神经网络分类
2.1.15 PNN概率神经网络分类
2.1.16 RELM鲁棒极限学习机分类
2.1.17 RF随机森林分类
2.1.18 SCN随机配置网络模型分类
2.1.19 SVM支持向量机分类
2.1.20 XGBOOST分类

2.2 机器学习和深度学习预测
2.2.1 ANFIS自适应模糊神经网络预测
2.2.2 ANN人工神经网络预测
2.2.3 ARMA自回归滑动平均模型预测
2.2.4 BF粒子滤波预测
2.2.5 BiLSTM双向长短时记忆神经网络预测
2.2.6 BLS宽度学习神经网络预测
2.2.7 BP神经网络预测
2.2.8 CNN卷积神经网络预测
2.2.9 DBN深度置信网络预测
2.2.10 DELM深度学习极限学习机预测
2.2.11 DKELM回归预测
2.2.12 ELMAN递归神经网络预测
2.2.13 ELM极限学习机预测
2.2.14 ESN回声状态网络预测
2.2.15 FNN前馈神经网络预测
2.2.16 GMDN预测
2.2.17 GMM高斯混合模型预测
2.2.18 GRNN广义回归神经网络预测
2.2.19 GRU门控循环单元预测
2.2.20 KELM混合核极限学习机预测
2.2.21 LMS最小均方算法预测
2.2.22 LSSVM最小二乘法支持向量机预测
2.2.23 LSTM长短时记忆网络预测
2.2.24 RBF径向基函数神经网络预测
2.2.25 RELM鲁棒极限学习机预测
2.2.26 RF随机森林预测
2.2.27 RNN循环神经网络预测
2.2.28 RVM相关向量机预测
2.2.29 SVM支持向量机预测
2.2.30 TCN时间卷积神经网络预测
2.2.31 XGBoost回归预测
2.2.32 模糊预测
2.2.33 奇异谱分析方法SSA时间序列预测

2.3 机器学习和深度学习实际应用预测
CPI指数预测、PM2.5浓度预测、SOC预测、财务预警预测、产量预测、车位预测、虫情预测、带钢厚度预测、电池健康状态预测、电力负荷预测、房价预测、腐蚀率预测、故障诊断预测、光伏功率预测、轨迹预测、航空发动机寿命预测、汇率预测、混凝土强度预测、加热炉炉温预测、价格预测、交通流预测、居民消费指数预测、空气质量预测、粮食温度预测、气温预测、清水值预测、失业率预测、用电量预测、运输量预测、制造业采购经理指数预测

3 图像处理方面
3.1 图像边缘检测
3.2 图像处理
3.3 图像分割
3.4 图像分类
3.5 图像跟踪
3.6 图像加密解密
3.7 图像检索
3.8 图像配准
3.9 图像拼接
3.10 图像评价
3.11 图像去噪
3.12 图像融合
3.13 图像识别
3.13.1 表盘识别
3.13.2 车道线识别
3.13.3 车辆计数
3.13.4 车辆识别
3.13.5 车牌识别
3.13.6 车位识别
3.13.7 尺寸检测
3.13.8 答题卡识别
3.13.9 电器识别
3.13.10 跌倒检测
3.13.11 动物识别
3.13.12 二维码识别
3.13.13 发票识别
3.13.14 服装识别
3.13.15 汉字识别
3.13.16 红绿灯识别
3.13.17 虹膜识别
3.13.18 火灾检测
3.13.19 疾病分类
3.13.20 交通标志识别
3.13.21 卡号识别
3.13.22 口罩识别
3.13.23 裂缝识别
3.13.24 目标跟踪
3.13.25 疲劳检测
3.13.26 旗帜识别
3.13.27 青草识别
3.13.28 人脸识别
3.13.29 人民币识别
3.13.30 身份证识别
3.13.31 手势识别
3.13.32 数字字母识别
3.13.33 手掌识别
3.13.34 树叶识别
3.13.35 水果识别
3.13.36 条形码识别
3.13.37 温度检测
3.13.38 瑕疵检测
3.13.39 芯片检测
3.13.40 行为识别
3.13.41 验证码识别
3.13.42 药材识别
3.13.43 硬币识别
3.13.44 邮政编码识别
3.13.45 纸牌识别
3.13.46 指纹识别

3.14 图像修复
3.15 图像压缩
3.16 图像隐写
3.17 图像增强
3.18 图像重建

4 路径规划方面
4.1 旅行商问题(TSP)
4.1.1 单旅行商问题(TSP)
4.1.2 多旅行商问题(MTSP)
4.2 车辆路径问题(VRP)
4.2.1 车辆路径问题(VRP)
4.2.2 带容量的车辆路径问题(CVRP)
4.2.3 带容量+时间窗+距离车辆路径问题(DCTWVRP)
4.2.4 带容量+距离车辆路径问题(DCVRP)
4.2.5 带距离的车辆路径问题(DVRP)
4.2.6 带充电站+时间窗车辆路径问题(ETWVRP)
4.2.3 带多种容量的车辆路径问题(MCVRP)
4.2.4 带距离的多车辆路径问题(MDVRP)
4.2.5 同时取送货的车辆路径问题(SDVRP)
4.2.6 带时间窗+容量的车辆路径问题(TWCVRP)
4.2.6 带时间窗的车辆路径问题(TWVRP)
4.3 多式联运运输问题

4.4 机器人路径规划
4.4.1 避障路径规划
4.4.2 迷宫路径规划
4.4.3 栅格地图路径规划

4.5 配送路径规划
4.5.1 冷链配送路径规划
4.5.2 外卖配送路径规划
4.5.3 口罩配送路径规划
4.5.4 药品配送路径规划
4.5.5 含充电站配送路径规划
4.5.6 连锁超市配送路径规划
4.5.7 车辆协同无人机配送路径规划

4.6 无人机路径规划
4.6.1 飞行器仿真
4.6.2 无人机飞行作业
4.6.3 无人机轨迹跟踪
4.6.4 无人机集群仿真
4.6.5 无人机三维路径规划
4.6.6 无人机编队
4.6.7 无人机协同任务
4.6.8 无人机任务分配

5 语音处理
5.1 语音情感识别
5.2 声源定位
5.3 特征提取
5.4 语音编码
5.5 语音处理
5.6 语音分离
5.7 语音分析
5.8 语音合成
5.9 语音加密
5.10 语音去噪
5.11 语音识别
5.12 语音压缩
5.13 语音隐藏

6 元胞自动机方面
6.1 元胞自动机病毒仿真
6.2 元胞自动机城市规划
6.3 元胞自动机交通流
6.4 元胞自动机气体
6.5 元胞自动机人员疏散
6.6 元胞自动机森林火灾
6.7 元胞自动机生命游戏

7 信号处理方面
7.1 故障信号诊断分析
7.1.1 齿轮损伤识别
7.1.2 异步电机转子断条故障诊断
7.1.3 滚动体内外圈故障诊断分析
7.1.4 电机故障诊断分析
7.1.5 轴承故障诊断分析
7.1.6 齿轮箱故障诊断分析
7.1.7 三相逆变器故障诊断分析
7.1.8 柴油机故障诊断

7.2 雷达通信
7.2.1 FMCW仿真
7.2.2 GPS抗干扰
7.2.3 雷达LFM
7.2.4 雷达MIMO
7.2.5 雷达测角
7.2.6 雷达成像
7.2.7 雷达定位
7.2.8 雷达回波
7.2.9 雷达检测
7.2.10 雷达数字信号处理
7.2.11 雷达通信
7.2.12 雷达相控阵
7.2.13 雷达信号分析
7.2.14 雷达预警
7.2.15 雷达脉冲压缩
7.2.16 天线方向图
7.2.17 雷达杂波仿真

7.3 生物电信号
7.3.1 肌电信号EMG
7.3.2 脑电信号EEG
7.3.3 心电信号ECG
7.3.4 心脏仿真

7.4 通信系统
7.4.1 DOA估计
7.4.2 LEACH协议
7.4.3 编码译码
7.4.4 变分模态分解
7.4.5 超宽带仿真
7.4.6 多径衰落仿真
7.4.7 蜂窝网络
7.4.8 管道泄漏
7.4.9 经验模态分解
7.4.10 滤波器设计
7.4.11 模拟信号传输
7.4.12 模拟信号调制
7.4.13 数字基带信号
7.4.14 数字信道
7.4.15 数字信号处理
7.4.16 数字信号传输
7.4.17 数字信号去噪
7.4.18 水声通信
7.4.19 通信仿真
7.4.20 无线传输
7.4.21 误码率仿真
7.4.22 现代通信
7.4.23 信道估计
7.4.24 信号检测
7.4.25 信号融合
7.4.26 信号识别
7.4.27 压缩感知
7.4.28 噪声仿真
7.4.29 噪声干扰

7.5 无人机通信

7.6 无线传感器定位及布局方面
7.6.1 WSN定位
7.6.2 高度预估
7.6.3 滤波跟踪
7.6.4 目标定位
7.6.4.1 Dv-Hop定位
7.6.4.2 RSSI定位
7.6.4.3 智能算法优化定位
7.6.5 组合导航

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HOG特征检测是一种基于梯度方向直方图的目标检测算法,可以用于人脸检测、行人检测等场景。下面是HOG特征检测+svm的C++实现步骤: 1. 加载正负样本数据集并提取HOG特征 ```c++ #include <opencv2/opencv.hpp> #include <iostream> #include <fstream> #include <vector> using namespace std; using namespace cv; int main() { // 加载正负样本数据集 vector<Mat> pos_samples, neg_samples; string pos_path = "pos_samples/"; string neg_path = "neg_samples/"; for (int i = 0; i < 100; i++) { string img_name = pos_path + to_string(i) + ".jpg"; Mat img = imread(img_name, IMREAD_GRAYSCALE); pos_samples.push_back(img); } for (int i = 0; i < 100; i++) { string img_name = neg_path + to_string(i) + ".jpg"; Mat img = imread(img_name, IMREAD_GRAYSCALE); neg_samples.push_back(img); } // 提取HOG特征 HOGDescriptor hog(Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8), 9); vector<float> descriptors; vector<vector<float>> pos_descriptors, neg_descriptors; for (int i = 0; i < pos_samples.size(); i++) { hog.compute(pos_samples[i], descriptors); pos_descriptors.push_back(descriptors); } for (int i = 0; i < neg_samples.size(); i++) { hog.compute(neg_samples[i], descriptors); neg_descriptors.push_back(descriptors); } return 0; } ``` 2. 将HOG特征转换为svm的训练数据 ```c++ // 将HOG特征转换为svm的训练数据 Mat train_data; Mat train_label; for (int i = 0; i < pos_descriptors.size(); i++) { Mat row = Mat(pos_descriptors[i]).reshape(1, 1); train_data.push_back(row); train_label.push_back(1); } for (int i = 0; i < neg_descriptors.size(); i++) { Mat row = Mat(neg_descriptors[i]).reshape(1, 1); train_data.push_back(row); train_label.push_back(-1); } ``` 3. 训练svm模型并保存 ```c++ // 训练svm模型并保存 Ptr<ml::SVM> svm = ml::SVM::create(); svm->setType(ml::SVM::C_SVC); svm->setKernel(ml::SVM::LINEAR); svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6)); svm->train(train_data, ml::ROW_SAMPLE, train_label); svm->save("svm_model.xml"); ``` 4. 加载svm模型并进行目标检测 ```c++ // 加载svm模型并进行目标检测 Ptr<ml::SVM> svm = ml::StatModel::load<ml::SVM>("svm_model.xml"); HOGDescriptor hog(Size(64, 128), Size(16, 16), Size(8, 8), Size(8, 8), 9); Mat img = imread("test.jpg", IMREAD_GRAYSCALE); vector<Rect> found; vector<float> descriptors; hog.compute(img, descriptors); Mat row = Mat(descriptors).reshape(1, 1); float result = svm->predict(row); if (result == 1) { found.push_back(Rect(0, 0, 64, 128)); } hog.detectMultiScale(img, found, 0, Size(8, 8), Size(0, 0), 1.05, 2); for (int i = 0; i < found.size(); i++) { rectangle(img, found[i], Scalar(0, 0, 255), 2); } imshow("result", img); waitKey(0); ``` 以上就是HOG特征检测+svm的C++实现步骤。需要注意的是,opencv中的svm模型只支持二分类,因此在本例中将正样本标签设为1,负样本标签设为-1。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值