美文网首页Matlab小练习
背景差分法+混合高斯模型【matlab】

背景差分法+混合高斯模型【matlab】

作者: 小小杨树 | 来源:发表于2022-02-24 09:41 被阅读0次
clc
clear
close all
%%
%读取视频
mov = VideoReader('test.avi');
N=mov.NumFrames;         %读取视频长度
%%
% 帧设置
frame = read(mov,1);           % 读取第一帧作为背景
frame_bw = rgb2gray(frame);          % 将背景转换为灰度图像
frame_size = size(frame);             %取帧大小
width = frame_size(2);
height = frame_size(1);
frame_g = zeros(height, width);              %前景
backdrop_bw = zeros(height, width);           %背景
%%
%视频变量
C = 3;                                  % 组成混合高斯的单高斯数目 (一般3-5)
M = 3;                                  % 
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 = 6;                            % initial standard deviation 初始化标准差(for new components) var = 36 in paper
w = zeros(height,width,C);              % initialize weights array 初始化权值数组
mean = zeros(height,width,C);           % pixel means 像素均值
sd = zeros(height,width,C);             % pixel standard deviations 像素标准差
u_diff = zeros(height,width,C);         % difference of each pixel from mean 与均值的差
p = alpha/(1/C);                        % initial p variable 参数学习率(used to update mean and sd)
rank = zeros(1,C);                      % rank of components (w/sd)
%%
%初始化均值和权值
pixel_depth = 8;                        % 8-bit resolution 像素深度为8位
pixel_range = 2^pixel_depth -1;         % pixel range 像素范围2的7次方0—255(# of possible values)
for i=1:height
    for j=1:width
        for k=1:C
            mean(i,j,k) = rand*pixel_range;     % means random (0-255之间的随机数)
            w(i,j,k) = 1/C;                     % weights uniformly dist
            sd(i,j,k) = sd_init;                % initialize to sd_init
            
        end
    end
end

%%
%处理帧
for n = 1:N
    frame = read(mov,n);       %  读%第n帧
    frame_bw = rgb2gray(frame);       %转换为灰度图像
    frame_bw=medfilt2(frame_bw);

    % 计算像素差值
    for m=1:C
        u_diff(:,:,m) = abs(double(frame_bw) - double(mean(:,:,m)));
    end
    %更新每个像素的背景模型
    for i=1:height
        for j=1:width
            match = 0;
            for k=1:C                       
                if (abs(u_diff(i,j,k)) <= D*sd(i,j,k))       %像素匹配了模型
                    match = 1;  % 设置匹配记号
                    %更新权值,均值,标准差和参数学习率
                    w(i,j,k) = (1-alpha)*w(i,j,k) + alpha;
                    p = alpha/w(i,j,k);                  
                    mean(i,j,k) = (1-p)*mean(i,j,k) + p*double(frame_bw(i,j));
                    sd(i,j,k) =   sqrt((1-p)*(sd(i,j,k)^2) + p*((double(frame_bw(i,j)) - mean(i,j,k)))^2);
                else                                   
                    w(i,j,k) = (1-alpha)*w(i,j,k);      % weight slighly decreases 权值减小
                end
            end
            backdrop_bw(i,j)=0;
            for k=1:C
                backdrop_bw(i,j) = backdrop_bw(i,j)+ mean(i,j,k)*w(i,j,k);  %更新背景
            end
            % 如果没有匹配的模型则创建新模型
            if (match == 0)
                [min_w, min_w_index] = min(w(i,j,:));  
                mean(i,j,min_w_index) = double(frame_bw(i,j));
                sd(i,j,min_w_index) = sd_init;
            end
            rank = w(i,j,:)./sd(i,j,:);             % 计算优先级
            rank_ind = [1:1:C];
            % 计算前景
            frame_g(i,j) = 0;
            while ((match == 0)&&(k<=M))
                    if (abs(u_diff(i,j,rank_ind(k))) <= D*sd(i,j,rank_ind(k)))
                        frame_g(i,j) = 0;     %black = 0
                    else
                        frame_g(i,j) = frame_bw(i,j);     
                    end
                k = k+1;
            end
        end
        
    end
    
    figure(1),subplot(1,2,1),imshow(frame)    %显示输入图像
%     subplot(1,3,2),imshow(uint8(backdrop_bw))    %显示背景图像
    subplot(1,2,2),imshow(uint8(frame_g))     %显示前景图像
end

 

相关文章

  • 背景差分法+混合高斯模型【matlab】

  • EM算法和混合高斯模型(二)

    高斯混合模型 顾名思义,高斯混合模型是指某一群体中含有多个高斯分布,具有如下形式的概率分布模型: 高斯混合模型参数...

  • 隐马尔可夫模型|机器学习推导系列(十七)

    一、概述 1. 介绍 动态模型可以类比高斯混合模型这种静态模型,高斯混合模型的特点是“混合”,动态模型的特点是在“...

  • 高斯混合模型

    高斯混合模型(Gaussian Mixture Model)高斯混合模型,通常简称GMM,是一种广泛使用的聚类算法...

  • EM算法在高斯混合模型的应用

    定义 EM算法的一个重要应用是高斯混合模型的参数估计,高斯混合模型的应用广泛,在许多情况下,EM算法是学习高斯混合...

  • GATK的VQSR介绍

    高斯混合模型 使用高斯混合模型创建训练集,根据该训练集评估每个变异位点的可信度。每次运行VariantRecali...

  • 4 聚类 - 高斯混合聚类

    背景 协方差与相关系数协方差描述两变量变化的相似度,相关系数除去了变量变化幅度的影响 高斯混合模型多个高斯分布混合...

  • 高斯混合模型

    Gaussian Mixture Model 事实上,GMM 和 k-means 很像,不过 GMM 是学习出一些...

  • 高斯混合模型

    高斯混合模型假设每个簇的数据都是符合高斯分布(正太分布)的,当前数据呈现的分布就是各个簇的高斯分布叠加在一起的结果...

  • 高斯混合模型

    简述:高斯混合模型是一种常见的聚类算法,与K均值算法类似,同样使用了EM算法进行迭代。高斯混合模型假设每个簇的数据...

网友评论

    本文标题:背景差分法+混合高斯模型【matlab】

    本文链接:https://www.haomeiwen.com/subject/rdkzlrtx.html