一、系统架构设计
1. 技术架构
graph TD
A[摄像头/视频输入] --> B(图像预处理)
B --> C{特征提取}
C --> D[火焰检测模块]
C --> E[烟雾检测模块]
D --> F(GUI显示)
E --> F
F --> G[报警模块]
2. 功能模块
- 实时监控:视频流显示与处理
- 参数设置:阈值调整与算法参数配置
- 检测结果显示:火焰/烟雾区域标注
- 报警机制:声光报警与日志记录
二、核心代码实现
1. GUI界面设计(App Designer)
% 创建主界面
app = uifigure('Name','火灾检测系统','Position',[100,100,1200,800]);% 视频显示区域
app.VideoPanel = uipanel(app,'Position',[20,20,960,600]);
app.OriginalAxes = uiaxes(app.VideoPanel,'Position',[0.1,0.1,0.8,0.8]);
app.ProcessedAxes = uiaxes(app.VideoPanel,'Position',[0.65,0.1,0.3,0.8]);% 控制面板
app.ControlPanel = uipanel(app,'Position',[980,20,200,600]);
app.StartBtn = uibutton(app.ControlPanel,'Text','开始检测',...'Position',[20,400,160,40],'ButtonPushedFcn',@(btn,event) startDetection());
app.StopBtn = uibutton(app.ControlPanel,'Text','停止检测',...'Position',[20,320,160,40],'ButtonPushedFcn',@(btn,event) stopDetection());
app.SettingsBtn = uibutton(app.ControlPanel,'Text','参数设置',...'Position',[20,240,160,40],'ButtonPushedFcn',@(btn,event) openSettings());
2. 图像处理核心算法
function processFrame(frame)% 颜色空间转换hsv = rgb2hsv(frame);h = hsv(:,:,1);s = hsv(:,:,2);% 火焰颜色阈值(可动态调整)fireMask = (h > 0.05 & h < 0.2) & (s > 0.4) & (hsv(:,:,3) > 0.3);% 形态学处理se = strel('disk',3);fireMask = imopen(fireMask,se);fireMask = imclose(fireMask,se);% 烟雾检测(基于纹理分析)gray = rgb2gray(frame);glcm = graycomatrix(gray,'Offset',[0 1; -1 1]);stats = graycoprops(glcm,{'Contrast','Correlation'});smokeMask = stats.Contrast > 0.5 & stats.Correlation < 0.3;% 叠加检测结果combinedMask = fireMask | smokeMask;labeledImg = bwlabel(combinedMask);% 显示结果imshow(frame, 'Parent',app.OriginalAxes);imshow(combinedMask, 'Parent',app.ProcessedAxes);title(app.ProcessedAxes,'检测结果');
end
3. 报警模块实现
function triggerAlarm()% 声音报警sound([0.1,0.2,0.1],800);% 视觉报警app.OriginalAxes.BackgroundColor = [1 0.2 0.2];drawnow;pause(0.5);app.OriginalAxes.BackgroundColor = [1 1 1];
end
三、关键技术
1. 双特征融合检测
-
火焰检测:HSV颜色空间 + 形态学滤波
% 动态阈值调整(根据环境光照) function [hThresh,sThresh] = adaptiveThreshold(img)hsv = rgb2hsv(img);meanH = mean(hsv(:,:,1)(:));meanS = mean(hsv(:,:,2)(:));hThresh = [max(0,meanH-0.1), min(1,meanH+0.1)];sThresh = [max(0,meanS-0.2), min(1,meanS+0.2)]; end
-
烟雾检测:灰度共生矩阵(GLCM)纹理分析
function smokeMask = detectSmoke(grayImg)glcm = graycomatrix(grayImg,'NumLevels',16);stats = graycoprops(glcm,{'Contrast','Homogeneity'});smokeMask = (stats.Contrast > 0.4) & (stats.Homogeneity < 0.6); end
2. 实时性能优化
-
GPU加速:
gpuImg = gpuArray(frame); hsv = rgb2hsv(gpuImg); % 后续处理使用gpuArray运算
-
帧率控制:
maxFPS = 30; frameInterval = 1/maxFPS; tic; while trueif toc >= frameIntervalprocessFrame(currentFrame);tic;end end
四、界面功能实现
1. 参数设置界面
function openSettings()% 创建参数设置对话框s = uigetfile('*.mat','选择参数文件');if isequal(s,0)return;endload(s);setappdata(app,'hThresh',hThresh);setappdata(app,'sThresh',sThresh);
end
2. 日志记录系统
% 创建日志文件
logFile = fopen('detection_log.txt','a');
fprintf(logFile,'%s - 检测到火灾事件\n',datestr(now));
fclose(logFile);
参考代码 火灾检测l界面,可用于发现火灾与烟雾 www.youwenfan.com/contentcni/64111.html
五、部署方案
-
嵌入式部署:
% 生成独立应用 mcc -m FireDetectionGUI -a assets -d compiled
-
云端集成:
% 使用MATLAB Compiler SDK deploytool('FireDetectionGUI.prj')
六、扩展功能建议
-
多摄像头支持:
% 多路视频流处理 videoSources = {'cam1.avi','cam2.mp4'}; for i=1:numel(videoSources)videoReader(i) = VideoReader(videoSources{i}); end
-
深度学习集成:
% 加载预训练CNN模型 net = alexnet; features = activations(net,frame,'fc7');
上述设计,该系统能够实现实时火灾与烟雾检测,适用于工业安防、森林防火等多种场景。