资源简介

我自己写的matlab代码,对于森林火灾识别效果不错,和大家分享一下,视频我的主页里也有

资源截图

代码片段和文件信息

clear;
[filenamepathname]=uigetfile(‘*.avi‘‘请选择文件‘);
fpath=[pathname filename];
read_obj=VideoReader(fpath);
fr_num = read_obj.NumberOfframes;% 视频帧数

num_1=0;
for n =50:fr_num-1 
fr = read(read_obj n);    
%----动态监测----得到currentframe和grayframe_1----------------------
currentframe = read(read_obj n);
    I=0.3*currentframe(::1)+0.59*currentframe(::2)+0.11*currentframe(::3); %来源于基于视频图像的火灾检测设计与实现_孙凯军
    grayframe_1=[round(I)];
    %----------------
%1---fr=imread(‘dde1.jpg‘);
% 读取该图像作为背景 
fr_bw1 = rgb2gray(fr);   
% 将背景转换为灰度图像 
fr_size = size(fr);             
%取帧大小 
width = fr_size(2); 
height = fr_size(1); %获取原图像的尺寸
fg = zeros(height width);   %前景读取的第二张图片获得
bg_bw = zeros(height width);%背景读取的第一张图片获得
fr_bw1 = double(fr_bw1);%256 400
% --------------------- mog variables ----------------------------------- 
C = 3;           % 组成混合高斯的单高斯数目 (一般3-5) 
D = 2.5;         % 阈值(一般2.5个标准差) 
alpha = 0.01;    % learning rate 学习率决定更新速度(between 0 and 1) (from paper 0.01) 
thresh = 0.25;   % foreground threshold 前景阈值(0.25 or 0.75 in paper) 
sd_init = 36;    % initial standard deviation 初始化标准差(for new components) var = 36 in paper 
w = zeros(heightwidthC); %256 1200         % initialize weights array 初始化权值数组 
w(::1) = 1;
w(::2:C) = 2^-10;                  % 第一个高斯分布的初始权重为1,其余分布的权重为0
mean = zeros(heightwidthC);%256 1200        % pixel means 像素均值 
mean(::1) = fr_bw1;                % 第一个高斯分布的初始均值为参考帧的值,其余分布的均值为0s
sd = sd_init*ones(heightwidthC);   % pixel standard deviations 像素标准差 
matchcnt = ones(height widthC);    % 匹配的次数,初始值都设为1
u_diff = zeros(heightwidthC);      % difference of each pixel from mean 图片与高斯均值的差 
 % 从第二帧开始处理
    fr = read(read_obj n+2);     % 读取n1-n2帧并转化为灰度图、双精度
  
fr_bw = rgb2gray(fr);      % convert frame to grayscale 转换为灰度图像
fr_bw = double(fr_bw);     % 将灰度图值设置为双精度
 %求导入进来的图片与各个高斯均值的差
for m=1:C  
u_diff(::m) = abs(fr_bw - double(mean(::m)));     
end       
% update gaussian components for each pixel 更新每个像素的背景模型 
%rank_ind = zeros(C1);
for i=1:height
for j=1:width              
        match = 0; %像素与高斯模型匹配的标识
        match_ind = 0;%为该像素最匹配的高斯模型的标号
        for k=1:C %与第k个高斯模型进行比对,然后更新参数                 
            if (abs(u_diff(ijk)) <= D*sd(ijk) && (match == 0))       % pixel matches component像素匹配了高斯中的第k个模型 
                match = 1;                               
                % variable to signal component match 设置匹配标记 
                match_ind = k;
                % update weights mean sd p  更新权值,均值,标准差和参数学习率                     
   p = alpha/w(ijk);           %理应使用p = alpha/gaussian才对,这里勉强      
                w(ijk) = (1-alpha)*w(ijk) + alpha;                     
%p = alpha/w(ijk);           %理应使用p = alpha/gaussian才对,这里勉强       
                mean(ijk) = (1-p)*mean(ijk) + p*double(fr_bw(ij)); 
                sd(ijk) =   sqrt((1-p)*(sd(ijk)^2) + p*((double(fr_bw(ij)) - mean(ijk)))^2);
      

评论

共有 条评论