Ostu算法的Matlab源代码以及程序解析

228 阅读1分钟

源代码 tic % function th=Otsu; a=imread('22.bmp'); c=a; %imshow(a) count=imhist(a);%直方图 [m,n]=size(a); N=m*n; L=256; count=count/N;

for i=1:L%这两个循环是将两头不存在的灰度值去掉,提高运行速度 if count(i)=0 st=i-1; break; end end for i=L:-1:1 if count(i)=0 nd=i-1; break; end end f=count(st+1:nd+1); %f是每个灰度出现的概率 p=st; q=nd-st; u=0; for i=1:q u=u+f(i)*(p+i-1); %u是像素的平均值 ua(i)=u; %ua(i)是前i个像素的平均灰度值 end;

for i=1:q w(i)=sum(f(1:i)); %w(i)是前i个像素的累加概率?? end;

d=(uw-ua).^2./(w.(1-w)); [y,tp]=max(d); %可以取出数组的最大值及取最大值的点 th=tp+p;%这一句很重要

for i=1:m%二值化 for j=1:n if a(i,j)>th a(i,j)=0; else a(i,j)=255; end end end subplot(2,1,1),imshow(c); subplot(2,1,2),imshow(a); toc%tic,toc可以显示程序运行时间 ———————————————— 版权声明:本文为CSDN博主「kobesdu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/kobesdu/art…