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

举报
海神之光 发表于 2022/05/29 01:45:46 2022/05/29
【摘要】 一、简介 1 摘要 为了尽可能地缩小疑似火焰区域,提高火灾检测的准确性和实时性,提出了把图像运动目标检测应用于火焰检测的问题。首先使用背景减除法提取运动目标,然后使用基于连通区域的面积阀值精确地提取疑似...

一、简介

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=(4*pi*num_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;




  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]王文豪.基于连通区域和SVM特征融合的火灾检测[J].

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/119750309

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。