一、案例简介

1 引言
目前烟雾检测绝大多数还是采用感烟、感温、感光以及复合型检测器,这些检测器是依靠检测燃烧过程中的副产物(烟雾粒子、温度变化等)来检测烟雾的,因此只能在离火焰和烟雾源较近的地方才能快速有效的发挥探测作用,对于大的空间或者户外场所,其检测的可靠性较低。
为了提高检测烟雾的实时性和可靠性,2009年左右国内外的一些学者致力于应用图像处理技术进行烟雾检测的研究。B Ugur Toreyin等人提出了基于小波的视频烟雾检测技术,该方法假设摄像机静止不动,烟雾出现使背景景物边缘模糊,在小波域上表现为高频能量降低。
而根据烟雾自身的特征——背景模糊性、扩散性、主方向角性等,基于摄像头不动的检测模型又有很多种方法,但是本人在比较了各种方法的实现的难易程度、检测的准确度等几个方面后,认为背景模糊性即简便、易于理解,且又不失准确度,因此我采用了背景模糊性这单一特征进行深入研究。
但是,该算法的缺点是烟雾检测的前提条件是背景图像中必须有较强的边缘和纹理成分,从而限制了该算法的应用范围。

2 背景模糊模型
2.1 基于均值背景模型提取背景
2.1.1 均值背景模型

平均背景模型是将运动目标看作为噪声,用累加平均的方法消除之。利用运动目标运行一段时间的序列图像进行平均而得到背景图像。
公式为:

2.1.2 实现过程
均值背景模型实现比较简单,需要一帧一帧读取每一帧图像,然后对每一帧图像相应位置的像素点进行求和取平均。本实验中用了一个三维的矩阵mat(x,y,k)来存储每一帧图像的灰度值,其中k是固定值,可以是整个视频,也可以是固定一段时间内的序列图像。

对比两幅图我们可以看出,由于烟雾底部的运动特点很低,因此并没有被作为噪声平均掉,但是基本提取了除去烟雾以外的背景,这对于背景模糊烟雾检测模型来说,这个背景已经足够了,后续我们可以用其它方法进行改进,目前这个方法较为简便。

2.1.3 均值背景模型特点
均值背景模型是一种简单、计算速度快但对环境光照变化和背景的多模态性比较敏感的背景建模算法。
在实际应用中,往往是图像中的某些区域有亮度高的目标,而某些区域有亮度低的运动目标经过,通过平均法得到的背景图像就会出现亮暗分布不均匀的区块。另外,该算法得到的背景图像受运动目标数量的影响比较大。
因此,背景提取是该实验后续可以改进的地方之一。

2.2 背景模糊检测
2.2.1 判别依据

研究表明,烟雾在一般情况下时部分地遮挡其它物体,在空间域表现为背景变模糊,在频率域表现为高频信号衰减;而非烟雾图像则通常是完全遮挡背景。依据烟雾这一特点,我们可以利用二维离散小波变换提取烟雾图像背景纹理,对纹理变模糊的特性进行判别,从而检测出烟雾的存在。

2.2.2 小波变换
小波变换的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率进行局部化分析,通过伸缩平移运算对信号进行多尺度细化,最终达到高频处时间细分,低频处频率细分的结果。
而一幅图像经过二维离散小波变换,可分解为四个部分:一幅低频(cA)分量子图像和三幅高频分量子图像。其中,三幅高频分量子图像包含了水平方向(HL)、竖直方向(LH)和对角方向(HH)的纹理信息。当图像中有烟雾出现时,通常情况会使这三幅高频分量子图像的能量值减小。
设wn(x,y)表示由三幅高频分量子图像的能量值之和构成的一幅复合图像:

(1)
将复合图像分解成为大小为(K1,K2)的子块,第i个图像子块的能量ei(l1,l2)为:

式中:Ri为复合图像wn(x,y)中大小为(K1,K2)的第i个子块;(l1,l2)表示能量子块在复合图像中的相应位置。本文采用块的大小为4x4。
对当前图像经小波变换后的局部高频能量值与相应位置的背景图像经小波变换后的局部高频能量值进行比较,如果在(l1,l2)处的子块能量值ei(l1,l2)被降低,那么就意味着当前图像的纹理或边缘不再像背景图像中那么尖锐,对应图像块有可能出现烟雾。
为了提高识别率,设定两个阈值0 < T1 < T2 < 1,本实验取T1 = 0.6 、T2 = 0,如果图像中出现烟雾导致小波高频能量减少,则ei(l1,l2)应满足:
T2 * ei(l1,l2) < ei(l1,l2) < T1 * ei(l1,l2) (3)

式中的ei(l1,l2)表示由背景图像构成的复合图像在(l1,l2)处的子块能量值。将满足式(3)的能量子块内的像素值设置为0,即HL(l1,l2) = 0 、LH(l1,l2) = 0、HH(l1,l2) = 0、cA(l1,l2) = 0。然后在通过小波反变换还原出原图像,此时原图像缺失了被识别为烟雾区域的像素值,接着通过构造图像的二值图,取反,补全‘空洞’(‘holes’),找到最大的连通区域即为真正的烟雾区域。

二、部分源代码

tic;
clear all;
close all;
clc;rmdir('result_img','s');
mkdir('result_img');LEN = Bg_make; %要处理的图片times = 0;
hwait=waitbar(0,'');
display('图像正在处理中,请稍后...');
for x = 1 : LEN times = times + 1;   str=['正在处理',num2str(LEN),'张图像中......',num2str(round(x*100/LEN)),'%'];hbar = waitbar(times/LEN,hwait,str);set(findobj(hbar,'type','patch'), ...'edgecolor','w','facecolor','g');if x == LEN waitbar(times/LEN,hwait,'即将完成');endX = rgb2gray(imread('bg_img\bg.jpg')); %读取背景图片pic = imread(strcat('image\smoke', int2str(x), '.jpg'));  %读取目标图片Y = rgb2gray(pic);  %目标图片转换为灰度图[cA,cH,cV,cD]=dwt2(X,'db1');    %对背景图像进行小波变换%cA低频分量,cH水平方向分量,cV垂直方向分量,cD斜对角方向分量[cA1,cH1,cV1,cD1]=dwt2(Y,'db1');%对目标图像进行小波变换  ss = size(cH);  %小波变换后图像大小w = zeros( ss(1),ss(2) );   %背景图像小波变换后的能量矩阵w1 = zeros( ss(1),ss(2) );  %目标图像小波变换后的能量矩阵t1 = 0;   t2 = 0.6; %两个阈值t1,t2-------------------------+++++++++++++++++%构建复合图像,并比较它们的值for i=1:ss(1)for j=1:ss(2)w(i,j) = cH(i,j)^2 + abs(cV(i,j))^2 + cD(i,j)^2;    %背景复合图像w1(i,j) = cH1(i,j)^2 + abs(cV1(i,j))^2 + cD1(i,j)^2;%目标复合图像endendwd = Divide_mat(w,4);   wd1 = Divide_mat(w1,4);s = size(wd);   %分块后矩阵大小ss = size(wd{1,1}); %小块大小for n=1:s(1)for m=1:s(2)w_tmp = 0;w_tmp1 = 0;for i=1:ss(1)for j=1:ss(2)w_tmp = w_tmp + wd{n,m}(i,j);   %背景图像子块能量w_tmp1 = w_tmp1 + wd1{n,m}(i,j);%目标图像子块能量 end   endfor i=1:ss(1)for j=1:ss(2)if( t1*w_tmp<w_tmp1 && w_tmp1<t2*w_tmp ) %根据阈值比较它们的值cH1( i+ss(1)*(n-1),j+ss(2)*(m-1) ) = 0;cV1( i+ss(1)*(n-1),j+ss(2)*(m-1) ) = 0;cD1( i+ss(1)*(n-1),j+ss(2)*(m-1) ) = 0;cA1( i+ss(1)*(n-1),j+ss(2)*(m-1) ) = 0;endendendendendY_i = idwt2(cA1,cH1,cV1,cD1,'db1');
%     figure(1); imshow(Y_i,[]); %------------sY = size(Y_i);  %转化为二值图像for i=1:sY(1)for j=1:sY(2)if(Y_i(i,j)~=0)Y_i(i,j) = 1;endendendbw_pic = Y_i;cov_bw_pic = 1 - bw_pic;    %反转1次,为了去除连通区域内的黑色像素值(即0矩阵)fill_pic = imfill(cov_bw_pic, 'holes');%以下都是对 其 二值图像进行处理,即对烟雾的连通区域赋红值,且下面默认的是最大连通区域为烟雾区域B_pic = bwboundaries(fill_pic); %得到的是一个P×1的单元ss = size(B_pic);        %ss的值就是连通分量的数量ss1 = size(B_pic{1, 1}); %ss1是一个大小为m×2的矩阵max = ss1(1);for i = 2 : ss(1)        %找到最大的连通区域的边界总个数ss2 = size(B_pic{i, 1});if ss2(1)> maxmax = ss2(1);endendsss = size(B_pic);%sss的值就是连通分量的数量for k = 1 : sss(1)%该循环作用是找到最大区域的边界,然后在原图像的对应位置上赋红Mid = B_pic{k};%Mid是一个m×2的矩阵,m就是边界点的数量%ss4(1)表示边界点的数量,Mid(i, 1)和Mid(i, 2)表示边界点的坐标ss4 = size(Mid);if ss4(1) == maxfor i = 1 : ss4(1)pic(Mid(i, 1), Mid(i, 2), 1) = 255; %相应位置只保留红色分量+++++++pic(Mid(i, 1), Mid(i, 2), 2:3) = 0;endendend
%     figure(2);  imshow(pic); %用于观察生成的检测烟雾图----------------imwrite(pic,strcat('result_img\smoking_detection', int2str(x), '.jpg'), 'jpg');  %把图片重新合成jpg
end
close(hwait);Make_avi(LEN); %avi视频制作toc;
display('完成!');

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【烟雾检测】基于matlab背景模糊模型视频烟雾检测【含Matlab源码 153 期】相关推荐

  1. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  2. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  3. Android实现手部检测和手势识别(可实时运行,含Android源码)

    Android实现手部检测和手势识别(可实时运行,含Android源码) 目录 Android实现手部检测和手势识别(可实时运行,含Android源码) 1. 前言 2. 手势识别的方法 (1)基于多 ...

  4. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  5. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  6. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  7. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  8. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  9. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  10. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

最新文章

  1. elif else if oracle_关于Oracle if elsif else
  2. React工作(1)---export导出
  3. 前端基础知识(持续更新中)
  4. Mac电脑直接拔掉U盘和移动硬盘会有什么影响
  5. 电子邮件系统是如何运作的?
  6. 芯片介绍:CC2530
  7. win10强行自定义分辨率(笔记本win10强行自定义分辨率)
  8. 定向士官计算机网络技术在部队干什么,定向培养士官是干什么的
  9. 计算机无法显示大容量,Win7系统电脑提示“usb大容量存储设备 代码10”的解决方法...
  10. 旧梦一场用计算机怎么表示,歌曲旧梦一场表达什么意思?
  11. Assuming drive cache: write through ubuntu硬盘内存扩展
  12. 使用Pytorch实现NLP深度学习
  13. Python——利用协程实现视频的拖影效果
  14. BAT的数据红利,催生AI时代的敏捷计算力
  15. 成都java开发学习要多久
  16. 线性表的练习--学生成绩统计
  17. Arduino通过USB转TTL无BootLoader烧录程序的两种办法
  18. 弘辽科技:千人千面到底是什么呢?
  19. C语言之1到100之间偶数之和与奇数之和
  20. OpenBlas0.3.14编译

热门文章

  1. 一句话讲清楚什么是JavaEE
  2. 获得Oracle中刚插入的数据的ID(for produce)
  3. BZOJ 4085:[Sdoi2015]bigyration(SDOI 2015 round 2 Day 1)
  4. Xcode - Plugins And Themes
  5. 由一个DEBUG说开去
  6. jupyter查看函数参数
  7. 20200612每日一句
  8. Atitit 群控云控资料索引index cyonkon yunkon cyonkonYonkon群控云控方面资料.rar C:\Users\ATI\Documents\cyonkonYonko
  9. Atitit 通信技术概要 艾提拉著 目录 1. 通信系统原理(孔英会编著的图书)_百度百科.html 2 1.1. 第1章绪论1 2 1.2. 第2章信号分析基础25 2 1.3. 第3章信道5
  10. Atitit 图像处理 调用opencv 通过java  api   attilax总结