img=imread('C:Documents and SettingsAdministrator桌面girl.jpg');
a=rgb2gray(img);
[m,n]=size(a);
subplot(2,2,1);
imshow(img);
xlabel('(a)人物');
subplot(2,2,2);
imshow(a);
xlabel('(b)灰度图');
subplot(2,2,3);
%imhist(a);
%xlabel('(c)灰度直方图');
count=0;
%找出图像包含的灰度级数
for i=1:256;
N(i)=length(find(a==(i-1))); %灰度值为i-1的像素点数
count=count+N(i); %总的像素点数
end
h=0;
for i=1:256;
P(i)=N(i)/count; %灰度值为i-1的点的概率
a1(i)=sum(P(1:i)); %前景的像素点数占整幅图像的比
a2(i)=1-a1(i); %后景的像素点数占整幅图像的比
h=h+i*P(i); %i*P(i)从0—256的总和
end
bar(0:255,P,'g') %绘制直方图
xlabel('(c)灰度直方图');
c1=0;c2=0;
for i=1:256
c1=c1+i*P(i); %sum(i*P(i)) 0->t
c2=h-c1; %sum(i*P(i)) t+1->L-1
if (a1(i)~=0)&(a2(i)~=0)
u1=c1/a1(i); %前景的平均灰度
u2=c2/a2(i); %后景的平均灰度
x(i)=a1(i)*a2(i)*(u2-u1)^2; %类间方差
end
end
[y,t]=max(x); %求最大类间方差,最佳阈值t
for i=1:m %根据最佳阈值将图片二值化分割
for j=1:n
if a(i,j)>t
a(i,j)=255;
else
a(i,j)=0;
end
end
end
subplot(2,2,4);
imshow(a);
xlabel('(d)OTSU-图');