end end end
ave1=sum1/num1; ave2=sum2/num2;
S=((ave2-T)*(T-ave1))/(ave2-ave1)^2; if(S>Smax) Smax=S; Th=T; end end Th
figure,imshow(uint8(I)),title('原图'); for i=1:m for j=1:n
if I(i,j)>=Th I(i,j)=255; else
I(i,j)=0; end end end
figure,imshow(I),title('类间最大距离法');
7.3最大熵法代码
%最大熵法 clc;
clear all;
I=imread('dcs01.jpg'); I=rgb2gray(I);
figure,imshow(I);title('原始图像'); h=imhist(I); h1=h;
len=length(h); [m,n]=size(I); h1=h1/(m*n); for i=1:(len-1) if h(i)~=0
P1=sum(h1(1:i));
P2=sum(h1((i+1):len)); else
continue; end
15
H1(i)=-(sum(P1.*log(P1))); H2(i)=-(sum(P2.*log(P2))); H(i)=H1(i)+H2(i); end
m1=max(H);
Th=find(H==m1); Th
for i=1:m for j=1:n
if I(i,j)>=Th I(i,j)=255; else
I(i,j)=0; end end end
figure,imshow(I);title('最大熵法');
7.4最大类内类间方差比法代码%最大类内类间方差比法 clc;
clear all;
I=imread('dcs01.jpg'); I=rgb2gray(I); I=double(I); [m,n]=size(I); Smax=-1; for T=0:255
sum1=0; num1=0; sum2=0; num2=0; for i=1:m for j=1:n
if I(i,j)>=T
sum2=sum2+I(i,j);
num2=num2+1; else
sum1=sum1+I(i,j);
num1=num1+1; end end end
ave1=sum1/num1; ave2=sum2/num2;
ave=(sum1+sum2)/(m*n);
16
d1=-1; d2=-1; for i=1:m for j=1:n
if I(i,j)>=T
d=(I(i,j)-ave2)^2; if d2==-1 d2=d; else
d2=d2+d; end else
d=(I(i,j)-ave1)^2; if d1==-1 d1=d; else
d1=d1+d; end end end end
p1=num1/(m*n); p2=num2/(m*n);
S1=p1*(ave1-ave)^2+p2*(ave2-ave)^2; S2=p1*d1+p2*d2; S=S1/S2; if S>Smax
Smax=S; Th=T; end end Th
figure,imshow(uint8(I)),title('原图'); for i=1:m for j=1:n
if I(i,j)>= Th I(i,j)=255; else
I(i,j)=0; end end end
figure,imshow(I),title('最大类内类间方差比法');
17
7.5局部阈值法代码
%局部阈值 clc;
clear all;
I=imread('dcs01.jpg'); I=rgb2gray(I); I=im2double(I);
figure,imshow(I),title('原图'); se=strel('disk',10); ft=imtophat(I,se);
Th=graythresh(ft); Th
G=im2bw(ft,Th); figure,imshow(G),title('局部阈值')
7.6均匀性度量法代码
%均匀性度量法 clc;
clear all;
I=imread('dcs01.jpg'); I=rgb2gray(I); I=double(I); [m,n]=size(I); Smin=-1;
for T=0:255
sum1=0; num1=0; sum2=0; num2=0; for i=1:m for j=1:n
if I(i,j)>=T
sum2=sum2+I(i,j); num2=num2+1; else
sum1=sum1+I(i,j); num1=num1+1; end end end
ave1=sum1/num1; ave2=sum2/num2; d1=-1; d2=-1; for i=1:m
18
for j=1:n
if I(i,j)>=T
d=(I(i,j)-ave2)^2; if d2==-1 d2=d; else
d2=d2+d; end else
d=(I(i,j)-ave1)^2; if d1==-1 d1=d; else
d1=d1+d; end end end end
p1=num1/(m*n); p2=num2/(m*n); S=p1*d1+p2*d2; if(Smin==-1) Smin=S; else
if(S figure,imshow(uint8(I)),title('原图'); for i=1:m for j=1:n if I(i,j)>=Th I(i,j)=255; else I(i,j)=0; end end end figure,imshow(I),title('均匀性度量法'); 19