基于matlab的数字图像处理之图像阈值分割算法研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Matlab数字图像处理实践报告实践三:图像阈值分割算法研究

3.1.1 迭代法实践代码:

clc;

clear all;

f=imread('cat.bmp');

f=rgb2gray(f);

f=im2double(f);

T=0.5*(min(f(:))+max(f(:)));

done=false;

while ~done

g=f>=T;

Tn=0.5*(mean(f(g))+mean(f(~g)));

done=abs(T-Tn)<0.1;

T=Tn;

end

T

r=im2bw(f,T);

subplot(121),imshow(f),title('原图');

subplot(122),imshow(r),title('阈值分割算法研究--迭代法');

3.1.2 迭代法实践截图:

3.2.1 均匀性度量法实践代码:

clc;

clear all;

I=imread('cat.bmp');

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

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

Smin=S;

Th=T;

end

end

end

Th

subplot(121),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

subplot(122),imshow(I),title('阈值分割算法研究--均匀性度量法');

3.2.2 均匀性度量法实践截图:

3.3.1 类间最大距离法实践代码:

clc;

clear all;

I=imread('cat.bmp');

I=rgb2gray(I);

I=double(I);

[m,n]=size(I);

Smax=0;

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;

S=((ave2-T)*(T-ave1))/(ave2-ave1)^2;

if(S>Smax)

Smax=S;

Th=T;

end

end

Th

subplot(121),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

subplot(122),imshow(I),title('阈值分割算法研究--类间最大距离法');

3.3.2 类间最大距离法实践截图:

3.4.1 最大类内类间方差比法实践代码:

clc;

clear all;

I=imread('cat.bmp');

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);

d1=-1;

d2=-1;

for i=1:m

for j=1:n

if I(i,j)>=T

d=(I(i,j)-ave2)^2;

相关文档
最新文档