matlab 高斯建模,关于混合高斯建模新手问题

网上找了一个混合高斯建模的matlab代码,运行以后,前景效果不是很明显,哪位大神知道怎么解决这个问题吗,就是需要更改那些参数。

以下是代码:

6c0fedf099e1505811fde20f5767e5bb.png

thresh = 0.5.png (247.82 KB, 下载次数: 1)

这幅是自己运行以后的图

2015-4-15 11:15 上传

这个是自己出来的效果

2456a80019d1b6f3279efb7061107182.png

qw.png (29.17 KB, 下载次数: 1)

这个是期望图

2015-4-15 11:15 上传

这个是期望生成的效果

clear all

source = aviread('E:\FFOutput\s.avi');

% -----------------------  frame size variables -----------------------

fr = source(1).cdata;           % 读取第一帧作为背景

fr_bw = rgb2gray(fr);          % 将背景转换为灰度图像

fr_size = size(fr);             %取帧大小

width = fr_size(2);

height = fr_size(1);

fg = zeros(height, width);

bg_bw = zeros(height, width);

% --------------------- mog variables -----------------------------------

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.75;                          % 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)

% ------initialize component means and weights 初始化均值和权值----------

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

%----- process frames -处理帧----------------------------------

for n = 1:length(source)

fr = source(n).cdata;       % read in frame 读取帧

fr_bw = rgb2gray(fr);       % convert frame to grayscale 转换为灰度图像

% calculate difference of pixel values from mean 计算像素差值

for m=1:C

u_diff(:,:,m) = abs(double(fr_bw) - double(mean(:,:,m)));

end

% update gaussian components for each pixel 更新每个像素的背景模型

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))       % pixel matches component像素匹配了模型

match = 1;                          % variable to signal component match 设置匹配记号

% update weights, mean, sd, 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                                    % pixel doesn't match component 几个模型中都没有匹配的

w(i,j,k) = (1-alpha)*w(i,j,k);      % weight slighly decreases 权值减小

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 no components match, create new component 如果没有匹配的模型则创建新模型

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;

end

rank = w(i,j,:)./sd(i,j,:);             % calculate component rank 计算模型范围?

rank_ind = [1:1:C];

% calculate foreground 计算前景

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)))

fg(i,j) = 0;     %black = 0

else

fg(i,j) = fr_bw(i,j);

end

k = k+1;

end

end

end

figure(1),subplot(1,3,1),imshow(fr)    %显示输入图像

subplot(1,3,2),imshow(uint8(bg_bw))    %显示背景图像

subplot(1,3,3),imshow(uint8(fg))     %显示前景图像

end

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值