School Work

Mixture of Gaussian Code is Running Very Very Slow

Gaussian mixture model
of 3
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
  7/11/2014Mixture of Gaussian code is running very very slow. - MATLAB Answers - MATLAB Central Search: Answers  MATLAB and Simulinkresources for Arduino, LEGO,and Raspberry Pi Learn moreCreate Account Log In File ExchangeAnswersNewsgroupLink Mixture of Gaussian code is running very very slow.  Asked by Duke Watson on 30 May 2012 Here I am pasting my code. Plz tell me if there is any correction to work it fast....... % This m-file implements the mixture of Gaussians algorithm for background % subtraction. It may be used free of charge for any purpose (commercial% or otherwise), as long as the author (Seth Benton) is acknowledged.clear all% source = aviread('C:\Video\Source\traffic\san_fran_traffic_30sec_QVGA');%source = aviread('..\test_video\san_fran_traffic_30sec_QVGA_Cinepak');[FileName, PathName] = uigetfile('*.avi', 'Pick an avi-file');source= aviread(strcat(PathName, FileName));% ----------------------- frame size variables -----------------------fr = source(1).cdata; % read in 1st frame as background framefr_bw = rgb2gray(fr); % convert background to greyscalefr_size = size(fr); width = fr_size(2);height = fr_size(1);fg = zeros(height, width);bg_bw = zeros(height, width);% --------------------- MOG variables -----------------------------------C = 3; % number of gaussian components (typically 3-5)M = 3; % number of background componentsD = 2.5; % positive deviation thresholdalpha = 0.10; % 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 paperw = zeros(height,width,C); % initialize weights arraymean = zeros(height,width,C); % pixel meanssd = zeros(height,width,C); % pixel standard deviationsu_diff = zeros(height,width,C); % difference of each pixel from meanp = alpha/(1/C); % initial p variable (used to update mean and sd)rank = zeros(1,C); % rank of components (w/sd)%cmap = rand(236, 3);%Mov1=zeros(length(source)); %preallocating the array for Mov1%Mov2=zeros(length(source)); %preallocating the array for Mov2% --------------------- initialize component means and weights -----------pixel_depth = 8; % 8-bit resolutionpixel_range = 2^pixel_depth -1; % pixel range (# 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 w(i,j,:) = w(i,j,:)./sum(w(i,j,:)); 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;  7/11/2014Mixture of Gaussian code is running very very slow. - MATLAB Answers - MATLAB Central  end rank = w(i,j,:)./sd(i,j,:); % calculate component rank rank_ind = [1:1:C]; % sort rank values for k=2:C for m=1:(k-1) if (rank(:,:,k) > rank(:,:,m)) % swap max values rank_temp = rank(:,:,m); rank(:,:,m) = rank(:,:,k); rank(:,:,k) = rank_temp; % swap max index values rank_ind_temp = rank_ind(m); rank_ind(m) = rank_ind(k); rank_ind(k) = rank_ind_temp; end end end % calculate foreground match = 0; k=1; fg(i,j) = 0; while ((match == 0)&&(k<=m)) if (w(i,j,rank_ind(k)) >= thresh) if (abs(u_diff(i,j,rank_ind(k))) <= D*sd(i,j,rank_ind(k))) fg(i,j) = 0; match = 1; else fg(i,j) = fr_bw(i,j); end end k = k+1; end end end figure(1),subplot(3,1,1),imshow(fr) subplot(3,1,2),imshow(uint8(bg_bw)) subplot(3,1,3),imshow(uint8(fg)) Mov1(n) = im2frame(uint8(fg),gray); % put frames into movie Mov2(n) = im2frame(uint8(bg_bw),gray); % put frames into movieendmovie2avi(Mov1,'mixture_of_gaussians_output','fps',50); % save movie as avi movie2avi(Mov2,'mixture_of_gaussians_background','fps',50); % save movie as avi 4 Comments Show 1 older commentWalter Roberson on 30 May 2012Link Direct link to this comment: #0: get rid of the clear all . Duke Watson on 30 May 2012Link Direct link to this comment: i have done that but still the problem of video is same. It is running very slow. You can test this code on your pc  Ahmed on 1 Apr 2013Link Direct link to this comment: Watson, did you come up with the solution for the speed? please let me know  Algorithms Analyst on 1 Apr 2013Link Direct link to this comment: Apply matlab parallel computing matlab pool open 0 votes Tags preallocating mov1  7/11/2014Mixture of Gaussian code is running very very slow. - MATLAB Answers - MATLAB Central   Site Help Patents Trademarks Privacy Policy Preventing Piracy Terms of Use Featured Topics: New Products Support Documentation Training Webinars Newsletters MATLAB Trials Careers Products MATLAB 0 Answers Contact us© 1994-2014 The MathWorks, Inc.
Similar documents
View more...
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks