Revision: 69518
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at July 7, 2015 07:00 by engrhassan2k13
                            
                            Initial Code
%read image
img1 = rgb2gray(imread('dino.jpg'));%use your image here
imshow(img1);
%parameter initialization for EM-Algo
temp =[];
phi1 = 0.5;
phi2 = 0.5;
u1  = 0;
u2 = 50;
sig1 = 2;
sig2 = 3;
tempimg1 = reshape(img1,1,numel(img1));
tempimg1 = double(tempimg1);
img = double (img1);
for k = 1 : 3
for i = 1 : numel(img1)
       %Expectation Step 
       prob1 =  -0.9181-reallog(sig1)-(  (( img(i)- u1 )^2)/(2*(sig1^2))  );
       prob2 =  -0.9181-reallog(sig2)-(  (( img(i)- u2 )^2)/(2*(sig2^2))  );
       
       probc1 = ( prob1*phi1 ) / ( (prob1*phi1)+ (prob2*phi2) );
       probc2 = ( prob2*phi2 )/( (prob1*phi1) + (prob2*phi2) );
       
       temp = [temp ; probc1 probc2];
    
end
       %Maximization Step
       phi1 = ( sum(temp(:,1)) )*(1/numel(img));
       phi2 = (sum(temp(:,2)))*(1/numel(img));
      
       
       u1 = ( sum((temp(:,1)').*tempimg1) )/( sum(temp(:,1)) );
       u2 = ( sum((temp(:,2)').*tempimg1) )/( sum(temp(:,2)) );
       
       var1 =   ( sum( ( (tempimg1 - u1).^2  ).*( temp(:,1)' ) ) ) / ( sum(temp(:,1)) ); 
       sig1 = sqrt(var1);
       var2 =   ( sum( ( (tempimg1 - u2).^2  ).*( temp(:,2)' ) ) ) / ( sum(temp(:,2)) );
       sig2 = sqrt(var2);
       
       temp = [];
       
end
       
%Thresholding
thresh = ((u2 + u1)/2);
for m = 1 : numel(img1)
    if img1(m) > thresh
        img1(m) = 255;
    else
        img1(m) = 0;
    end
end
figure;
imshow(img1);
                                Initial URL
Initial Description
This code uses the Expectation Maximization algorithm for automatically thresholding an image.
Initial Title
Automatic Thresholding with Expectation Maximization Algorithm in Matlab
Initial Tags
Initial Language
MatLab