I=imread('cameraman.tif');%读入原始图像T=0.5*(double(min(I(:)))+double(max(I(:))));%设置初始阈值为最大灰度和最小灰度值和的一半done=false;while~doneg=I=T;%分成两组像素,灰度值大于或者等于T的和灰度值小于T的Tnext=0.5*(mean(I(g))+mean(I(~g)));%新阈值两个范围内像素平均值和的一半done=abs(T-Tnext)0.5;%0.5是自己指定的参数T=Tnext;end%以下程序就是根据上面确定的阈值进行图像二值分割J=I;K=find(J=T);J(K)=255;K=find(JT);J(K)=0;figure;subplot(1,2,1),imshow(I),title('原始图像');subplot(1,2,2),imshow(J),title('分割后图像');clear;f=imread('pic.jpg');imshow(f);f=rgb2gray(f);imshow(f);hist_im=imhist(f);bar(hist_im);T=240;done=false;while~doneg=f=T;Tnext=0.5*(mean(f(g))+mean(f(~g)));done=abs(T-Tnext)0.5;T=Tnext;endb=im2bw(f,T/255);imshow(b)%基本全局阈值处理f=imread('pic.jpg');count=0;T=mean2(f);done=false;while~donecountcount=count+1;g=fT;Tnext=0.5*(mean(f(g))+mean(f(~g)));done=abs(T-Tnext)0.5;T=Tnext;endg=im2bw(f,T/255);subplot(121);imshow(f)subplot(122);imshow(g);I=imread('images_chapter_10\Fig10.29(a).jpg');subplot(2,2,1);imshow(I);title('原图');subplot(2,2,2);imhist(I);title('原图的直方图');%I=double(I);%T建议初始化为图像中最大强度值和最小亮度值的平均值%T=0.5*(double(min(I(:)))+double(max(I(:))));%T=mean(I(:));T=0;%阈值初始化值T0=0.5;%预定偏差大小done=false;num=0;%迭代次数while~doneg=I=T;%由于g或者~g有可能为空,因此必须分情况处理if(size(I(g),1)==0)T1=mean(I(~g));elseif(size(I(~g),1)==0)T1=mean(I(g));elseT1=0.5*(mean(I(g))+mean(I(~g)));enddone=abs(T-T1)=T0;T=T1;num=num+1;endT=uint8(T);I2=I=T;%graythresh可以直接求出阈值,该函数采用Ostu方法,与通过迭代产生的阈值几乎没有区别.%注意:由于graythresh产生的阈值已被归一化到范围[0,1]内,必须在使用时将其缩放到相应%的范围,如uint8类图像,需要乘以255.T1=graythresh(I)*255;subplot(2,2,[34]);imshow(I2);title('基本全局阈值算法处理结果');xlabel(['通过程序求得的阈值为',num2str(T),',迭代次数为',num2str(num)]);