基于MATLAB的火灾检测GUI系统设计与实现

一、系统架构设计

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 true
        if toc >= frameInterval
            processFrame(currentFrame);
            tic;
        end
    end
    

四、界面功能实现

1. 参数设置界面
function openSettings()
    % 创建参数设置对话框
    s = uigetfile('*.mat','选择参数文件');
    if isequal(s,0)
        return;
    end
    load(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

五、部署方案

  1. 嵌入式部署

    % 生成独立应用
    mcc -m FireDetectionGUI -a assets -d compiled
    
  2. 云端集成

    % 使用MATLAB Compiler SDK
    deploytool('FireDetectionGUI.prj')
    

六、扩展功能建议

  1. 多摄像头支持

    % 多路视频流处理
    videoSources = {'cam1.avi','cam2.mp4'};
    for i=1:numel(videoSources)
        videoReader(i) = VideoReader(videoSources{i});
    end
    
  2. 深度学习集成

    % 加载预训练CNN模型
    net = alexnet;
    features = activations(net,frame,'fc7');
    

上述设计,该系统能够实现实时火灾与烟雾检测,适用于工业安防、森林防火等多种场景。

posted @ 2025-10-09 09:50  kiyte  阅读(13)  评论(0)    收藏  举报