标签:padding 代码 计算模型 产生 iss 利用 距离 else ade
混合高斯背景建模是基于像素样本统计信息的背景表示方法,利用像素在较长时间内大量样本值的概率密度等统计信息(如模式数量、每个模式的均值和标准差)表示背景,然后使用统计差分(如3σ原则)进行目标像素判断,可以对复杂动态背景进行建模,计算量较大。
在混合高斯背景模型中,认为像素之间的颜色信息互不相关,对各像素点的处理都是相互独立的。对于视频图像中的每一个像素点,其值在序列图像中的变化可看作是不断产生像素值的随机过程,即用高斯分布来描述每个像素点的颜色呈现规律{单模态(单峰),多模态(多峰)}。
对于多峰高斯分布模型,图像的每一个像素点按不同权值的多个高斯分布的叠加来建模,每种高斯分布对应一个可能产生像素点所呈现颜色的状态,各个高斯分布的权值和分布参数随时间更新。当处理彩色图像时,假定图像像素点R、G、B三色通道相互独立并具有相同的方差。对于随机变量X的观测数据集{x1,x2,…,xN},xt=(rt,gt,bt)为t时刻像素的样本,则单个采样点xt其服从的混合高斯分布概率密度函数:
其中k为分布模式总数,η(xt,μi,t,τi,t)为t时刻第i个高斯分布,μi,t为其均值,τi,t为其协方差矩阵,δi,t为方差,I为三维单位矩阵,ωi,t为t时刻第i个高斯分布的权重。
1.每个新像素值Xt同当前K个模型按下式进行比较,直接找到匹配新像素值的分布模型,即同该模型的均值偏差在2.5σ内:
2.如果所匹配的模式符合背景要求,则该像素属于背景,否则属于前景。3.各个模式权值按如下方式进行更新,其中a是学习速率,对于匹配的模式Mk,t=1,否则Mk,t=0,然后各模式的权重进行归一化:
4.未匹配模式的均值μ和标准差σ不变,匹配模式的参数按照如下更新:
5.如果,第一步中没有任何模式匹配,则权重最小的模式被替换,即该模式的均值为当前像素值,标准差为初始较大值,权重为较小值。6.各模式根据w/a^2按降序排列,权重大、标准差小的模式排列在前。7.选前B个模式作为背景,B满足下式,参数T表示背景所占的比例:
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Author: Ziheng H. Shen @Tsinghua Univ. %HybridGaussModel @Digital Image Process Practice %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clc; clear all; cntFrame = 23; obj = VideoReader(‘768x576.avi‘); numFrames = obj.NumberOfFrames; for k = 1 : cntFrame frame = read(obj,k); imwrite(frame,... strcat(‘C:\Users\Zi-Heng Shen\Documents\MATLAB\BackGroundModel\混合高斯背景建模\‘,... num2str(k),‘.bmp‘),‘bmp‘); end %% 参数定义及初始化 I = imread(‘1.bmp‘); %读入第一帧作为背景帧 fr_bw = I; [height,width] = size(fr_bw); %求每帧图像大小 width = width/3; %排除颜色通道数 fg = zeros(height, width); %定义前景和背景矩阵 bg_bw = zeros(height, width); C = 3; % 单高斯模型的个数(通常为3-5) M = 3; % 代表背景的模型个数 D = 2.5; % 偏差阈值 alpha = 0.01; % 学习率 thresh = 0.25; % 前景阈值 sd_init = 15; % 初始化标准差 w = zeros(height,width,C); % 初始化权重矩阵 mean = zeros(height,width,C); % 像素均值 sd = zeros(height,width,C); % 像素标准差 u_diff = zeros(height,width,C); % 像素与某个高斯模型均值的绝对距离 p = alpha/(1/C); % 初始化p变量,用来更新均值和标准差 rank = zeros(1,C); % 各个高斯分布的优先级(w/sd) pixel_depth = 8; % 每个像素8bit分辨率 pixel_range = 2^pixel_depth -1; % 像素值范围[0,255] for i=1:height for j=1:width for k=1:C mean(i,j,k) = rand*pixel_range; %初始化第k个高斯分布的均值 w(i,j,k) = 1/C; % 初始化第k个高斯分布的权重 sd(i,j,k) = sd_init; % 初始化第k个高斯分布的标准差 end end end for n = 1:cntFrame frame=strcat(num2str(n),‘.bmp‘); I1 = imread(frame); % 依次读入各帧图像 fr_bw = I1; % 计算新像素与第m个高斯模型均值的绝对距离 for m=1:C u_diff(:,:,m) = abs(double(fr_bw(:,:,m)) - 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)) % 像素与第k个高斯模型匹配 match = 1; %将匹配标记置为1 % 更新权重、均值、标准差、p 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(fr_bw(i,j)); sd(i,j,k) = sqrt((1-p)*(sd(i,j,k)^2) + p*((double(fr_bw(i,j)) - mean(i,j,k)))^2); else % 像素与第k个高斯模型不匹配 w(i,j,k) = (1-alpha)*w(i,j,k); %略微减少权重 end end bg_bw(i,j)=0; for k=1:C bg_bw(i,j) = bg_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(fr_bw(i,j));%初始化均值为当前观测像素的均值 sd(i,j,min_w_index) = sd_init; %初始化标准差为6 end rank = w(i,j,:)./sd(i,j,:); % 计算模型优先级 rank_ind = [1:1:C];%优先级索引 % 计算前景 fg(i,j) = 0; while ((match == 0)&&(k<=M)) if (abs(u_diff(i,j,rank_ind(k))) <= D*sd(i,j,rank_ind(k)))% 像素与第k个高斯模型匹配 fg(i,j) = 0; %该像素为背景,置为黑色 else fg(i,j) = 255; %否则为前景,置为白色 end k = k+1; end end end figure(n) subplot(1,3,1),imshow(fr_bw); %显示最后一帧图像 subplot(1,3,2),imshow(uint8(bg_bw)) %显示背景 disk = strel(‘disk‘,1);disk1 = strel(‘disk‘,4); subplot(1,3,3),imshow(imdilate(imerode(uint8(fg),disk),disk1)); %显示前景 end
输出结果:
代码及结果引用请标注:Ziheng H. Shen @Graduate School of Tsinghua Univ.
标签:padding 代码 计算模型 产生 iss 利用 距离 else ade
原文地址:http://blog.csdn.net/shenziheng1/article/details/60883147