当前位置: 首页 > news >正文

【火灾检测】森林火灾检测系统(带面板)【含GUI Matlab源码 1921期】

⛄一、火灾检测简介

1 引言
目前森林火灾是破坏森林的最主要的灾害之一, 影响很大。森林是各种珍禽异兽的家园, 森林遭受火灾后, 会破坏野生动物赖以生存的环境。严重的森林火灾不仅能引起水土流失, 还会引起山洪爆发、泥石流等自然灾害。因此, 对森林火灾尽早识别并预警, 就能最大限度的降低损失。本森林火灾检测方法是在利用图像处理技术对烟火普遍特性进行研究的基础上, 结合烟火区域火焰的颜色、面积、不规则度特征以及烟雾的颜色特征和动态特征而提出的。基本消除其他不利的影响, 有效提高森林火灾图像的识别的准确度。除此之外, 我们运用了多层检测的方式, 减少了系统处理分析的时间, 提高了识别的速度。
在这里插入图片描述
图1 火灾识别流程

2 森林火险检测系统流程
我们为了达到火险检测的目的, 我们采取从烟雾和火焰两个方面进行检测, 设计了多层拓展识别的流程, 静态特征和动态特征相结合的识别检测方式。方案的具体操作总体流程如图1。该火险检测系统的总体设计思想是:该首先获取相机实时拍摄的图像;然后对视频图像进行实时背景差动态判断有无异常情况, 如果连续的几帧图像发生了较大的变化, 即判断为有异常情况发生;下一步采取我们的检测算法分别对图像进行就火焰识别和烟雾识别, 若图像中有火焰 (烟雾) , 系统就会输出“1”, 否则就输出“0”;最后用我们多特征融合综合判断是否是火灾, 是的话则输出“1”发出火灾预警, 从而完成整个森林火险检测系统。

3 火焰检测
森林火险检测系统中火焰检测部分的流程如图2 (左) 所示:
在这里插入图片描述
图2 火焰检测 (左) 和烟雾检测 (右) 流程图

待检测的图像输入后, 开始需要进行图像的初步的处理。图像预处理过程一般包括有增强、滤波、细化几个方面。接下来主要简述的是火焰图像的增强处理和滤波。

图像增强主要指的是按照开发者的想法加强图像中某部分, 可以是某个具体的区域, 也可以是符合相关限制条件的部分区域, 并且淡化或消除某些不重要杂乱信息的处理方法。图像增强主要包括了直方图修改处理、图像平滑处理、图像尖锐化处理及彩色图像处理等常见的处理方式。该系统我们运用几种方法同步进行, 目的是达到火焰图像预期的增强效果。

在火焰图像经过预处理后, 下一步是进行火焰分割。在充足的自然光的条件下, 我们采取颜色特征提取的方式, 把疑似火焰区域从图中给分割出来。在一般情况下, 火焰虽然可能会有多种不同的颜色, 但主要集中在暗红色、红色、橙色、黄色、白色、蓝色这些颜色中。即使在不同的环境下火焰会呈现不同的颜色, 但它常常会经过由红过渡到黄的燃烧过程。此时图像的RGB值符合R≥G≥B的关系。与此同时, 我们采取转换到HSI空间, 进行多特征采取。在HSI空间中, 火焰的色度值H通常在0~60度之间, 此外, S满足100, I满足255。图像中满足以上四个条件的像素当作是火焰的候选区域。

火焰的颜色提取之后的图像可能会存在噪声, 我们采用中值滤波进行去噪。

在 (Y, Cr, Cb) 空间中, 火焰和其他相关物体有着明显的区别。在二维的 (Cr, Cb) 空间里, 火焰像素的分布接近正态分布, 而其他物体则不具有该特性。所以我们采取将火焰图像转换到 (Y, Cr, Cb) 空间, 对像素进行分析, 将接近正态分布特性的区域提取出来。

也就是说, 当检测图像在的二维的 (Cr, Cb) 空间满足正态分布的时候, 可以粗判定为火焰图像。

经过火焰颜色特征粗判定后, 下一步进行火焰的动态特征的判定, 最终裁决是否为火焰。对于人类而言, 形状是我们判断一个物体的重要特征。所以计算机对于图像中物体形状的分析也是非常有益的。根据图形图像的相关理论, 我们获取火焰图像的动态特征, 以此作为判断的依据进行进一步的处理。我们运用了与物体形状相关的两个特性来作为我们火焰图像的判断依据。

A.不规则性

考虑到森林火灾火焰形状的不规则性和对我们的系统可能产生干扰的像光源 (如手电筒, 探照灯灯等) 的形状特征具有较高的规律性的特点, 我们采取用不规则的程度作为判断是否为火焰的依据。不规则度表征了物体形状的不规则程度, 其表达式如下:
在这里插入图片描述
我们定义周长为物体的边界长度, 可以通过火焰图像候选区域边界上像素的个数来获得。面积通过统计所有可能烟雾区域像素点数获得。候选图像的形状越复杂, 其不规则度值越大。

获取火焰候选图像不规则度的具体步骤:

(1) 对颜色分割得到的火焰候选图像提取边缘, 算出边缘上像素个数得到L。

(2) 求出火焰图像中疑似火焰区域的面积, 即求出在上一步颜色分割中所有被置为黑色的像素总数S。

(3) 求不规则度, 并计算出连续n帧图像的平均值。

B.扩散性

一般在火灾发生后, 火灾面积会呈现不断扩大的趋势, 过火面积会连续扩大, 相应的相机探测到的火灾区域面积也会逐渐增大。也就是说在我们获得的图像上高亮的区域也会持续的增长。因此, 我们可以定义“k”表示后续疑似火焰区面积与先前疑似火焰区域的面积的比值来表征火灾的扩散特性。在我们设定相应的参考时间内, k值越大, 火灾的扩散特性越强。

在火焰检测部分, 首先将拍的的图像进行前期的预处理后, 进行基于颜色特征筛选出火焰区域的候选图像, 然后再根据这些图像的不规则性和扩散性做出是否为火焰区域的最终判定, 然后将判定结果输入给下一步。

⛄二、部分源代码

function varargout = MainGUI(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @MainGUI_OpeningFcn, ...
                   'gui_OutputFcn',  @MainGUI_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before MainGUI is made visible.
function MainGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to MainGUI (see VARARGIN)

% Choose default command line output for MainGUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes MainGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% 在运行主界面时隐藏一些控件
% set(handles.axes1,'visible','off');
% set(handles.text1,'visible','off');


% --- Outputs from this function are returned to the commandline.
function varargout = MainGUI_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in openvideo_button.
function openvideo_button_Callback
% hObject    handle to openvideo_button (see GCBO)(hObject, eventdata, handles)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% 读取视频路径
[filename,pathname,filter] = uigetfile({'*.mp4;*.flv;*.avi;*.rmvb;*.f4v;*.mpeg;*.mkv'},'选择视频');
if filter == 0
    return
end
str = fullfile(pathname,filename);

% 读取视频
filename = str;

% obj是一个对象  
obj = VideoReader(filename);  
% 视频的第一帧预览显示在界面
Show_Frames=read(obj,1);

axes(handles.axes1);
imshow(Show_Frames);
set(handles.axes1,'visible','on');
axis off
 
## ⛄三、运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/9363e3f22eff4d6888a58379ef41a448.jpeg#pic_center)

## ⛄四、matlab版本及参考文献
**1 matlab版本**
2014a

**2 参考文献**
[1] 杨雨卓.基于图像处理的森林火险检测系统[J].电子世界. 2018,(16)
 
**3 备注**
简介此部分摘自互联网,仅供参考,若侵权,联系删除
 

相关文章:

  • Tomcat经验2
  • 为什么说C++太复杂(复杂到哪了?)
  • k8s部署手册-v03
  • 基于keras与tensorflow手工实现ResNet50网络
  • c语言中常用的字符串处理函数总结
  • ESP-01S使用AT指令连接阿里云
  • 第十四届蓝桥杯模拟赛第二期部分题答案(C++代码)
  • 面试半年,上个月成功拿到阿里offer,全靠我啃烂了学长给的这份笔记
  • 【RTS】安海波老师:SIP与RTC融合分享笔记
  • 网站都变成灰色了,它是怎么实现的?
  • JavaWeb中文件上传与下载
  • 信奥赛一本通题解目录(未做完)
  • YOLO系列算法改进方法 | 目录一览表
  • 粒子群算法和鲸鱼算法的比较(Matlab代码实现)
  • HTML5期末大作业:HTM+CSS+JS仿安徽开放大学官网(web前端网页制作课作业)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CSS实用技巧干货
  • JavaScript设计模式之工厂模式
  • java多线程
  • Java方法详解
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • ViewService——一种保证客户端与服务端同步的方法
  • - 概述 - 《设计模式(极简c++版)》
  • 给第三方使用接口的 URL 签名实现
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 线上 python http server profile 实践
  • 学习笔记:对象,原型和继承(1)
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ionic入门之数据绑定显示-1
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 大数据全解:定义、价值及挑战
  • 如何正确理解,内页权重高于首页?
  • ​Python 3 新特性:类型注解
  • # include “ “ 和 # include < >两者的区别
  • #{}和${}的区别是什么 -- java面试
  • #include<初见C语言之指针(5)>
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (0)Nginx 功能特性
  • (175)FPGA门控时钟技术
  • (3)(3.5) 遥测无线电区域条例
  • (二)linux使用docker容器运行mysql
  • (篇九)MySQL常用内置函数
  • (五)c52学习之旅-静态数码管
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET DataGridView数据绑定说明
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET6实现破解Modbus poll点表配置文件
  • .NET框架
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • /bin/rm: 参数列表过长"的解决办法