• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: 图像  烟雾检测  

资源简介

matlab,图像中烟雾检测,可直接运行!!!!!!!!!!!!!!!!!!!!!!!

资源截图

代码片段和文件信息

tic;
clear all;
close all;
clc;
A = aviinfo(‘smoke.avi‘);
LEN = A.Numframes;%得到视频的帧数
for x = 1 : LEN
pic = imread(strcat(‘smoke‘ int2str(x) ‘.jpg‘));%读入一张图片
pic1 = pic;%pic1中存放的是处理过后的彩色图像
pic_hsv = rgb2hsv(pic);
s = size(pic1);
bw_pic = zeros(s(1) s(2));
for i = 1 : s(1)
    for j = 1 : s(2)
        if pic_hsv(i j 1) > 0.35 && pic_hsv(i j 1) < 0.65 && ...
           pic_hsv(i j 2) > 0.06 && pic_hsv(i j 2) < 0.3 && ...
           pic_hsv(i j 3) > 0.5 && pic_hsv(i j 3) <= 1;
           pic1(i j 1) = 255;
           pic1(i j 2 : 3) = 0;
        end
        if pic1(i j 1) == 255 && pic1(i j 2) == 0
            bw_pic(i j) = 1;
        end
    end
end
cov_bw_pic = 1 - bw_pic;
fill_pic = imfill(cov_bw_pic ‘holes‘);
fill_pic1 = 1 - fill_pic;
B_pic = bwboundaries(fill_pic1);%得到的是一个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)> max
        max = ss2(1);
    end
end
%⑤…………………………将小于最大连通区域的连通分量边界赋零
for k = 1 : ss(1)%将小于最大连通区域的连通分量边界赋零,
%其作用就是将其余小的连通分量与边界隔开
    Mid = B_pic{k 1};
    ss3 = size(Mid);
    if ss3(1) < max
        for i = 1 : ss3(1)
            fill_pic1(Mid(i 1) Mid(i 2)) = 0;  
        end
    end
end
%反转填充
cov_fill_pic1 = 1 - fill_pic1;
A_fill_pic = imfill(cov_fill_pic1 ‘holes‘);%进行内部填充,再反变换回来,即得到所要求的区域
A_fill_pic1 = 1 - A_fill_pic;
B_pic1 = bwboundaries(A_fill_pic1);
sss = size(B_pic1);%sss的值就是连通分量的数量
for k = 1 : sss(1)%该循环作用是找到最大区域的边界,然后在原图像的对应位置上赋红
    Mid = B_pic1{k};%Mid是一个m×2的矩阵,m就是边界点的数量
    %ss4(1)表示边界点的数量,Mid(i 1)和Mid(i 2)表示边界点的坐标
    ss4 = size(Mid);
    if ss4(1) == max
        for i = 1 : ss4(1)
            pic(Mid(i 1) Mid(i 2) 1) = 255;  
            pic(Mid(i 1) Mid(i 2) 2 : 3) = 0;  
        end
    end
end
imwrite(pic strcat(‘lou_smoking‘ int2str(x) ‘.jpg‘) ‘jpg‘);
end
aviobj = avifile(‘lou_smoking.avi‘);%将处理后的图片连成视频文件
aviobj.fps = 25;%初始化视频文件的属性
aviobj.Quality = 100;
aviobj.compression = ‘None‘;
for i = 1 : LEN
    frame = imread(strcat(‘lou_smoking‘ int2str(i) ‘.jpg‘)); 
    aviobj = addframe(aviobj uint8(frame)); 
end
aviobj=close(aviobj);%关闭aviobj的对象
toc;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2534  2013-05-21 14:49  图像处理中的烟雾检测\smoke_inspect_two.m

     目录          0  2013-05-21 14:50  图像处理中的烟雾检测

----------- ---------  ---------- -----  ----

                 2534                    2


评论

共有 条评论