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