资源描述:
《两个matlab实现最大熵法图像分割程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、%两个程序,亲测可用clearalla=imread('moon.tif');figure,imshow(a)count=imhist(a);[m,n]=size(a);N=m*n;L=256;count=count/N;%%每一个像素的分布概率countfori=1:Lifcount(i)~=0st=i-1;break;endendstfori=L:-1:1ifcount(i)~=0nd=i-1;break;endendndf=count(st+1:nd+1);%f是每个灰度出现的概率size(f)E=[];fo
2、rTh=st:nd-1%%%设定初始分割阈值为Thav1=0;av2=0;Pth=sum(count(1:Th+1));%%%第一类的平均相对熵为fori=0:Thav1=av1-count(i+1)/Pth*log(count(i+1)/Pth+0.00001);end%%%第二类的平均相对熵为fori=Th+1:L-1av2=av2-count(i+1)/(1-Pth)*log(count(i+1)/(1-Pth)+0.00001);endE(Th-st+1)=av1+av2;endposition=find(
3、E==(max(E)));th=st+position-1fori=1:mforj=1:nifa(i,j)>tha(i,j)=255;elsea(i,j)=0;endendendfigure,imshow(a);%%%%%%%%%%%%%%%%%%%%%2-d最大熵法(递推方法)%%%%%%%%%%%clearall;clc;tica=imread('trial2_2.tiff');figure,imshow(a);a0=double(a);[m,n]=size(a);h=1;a1=zeros(m,n);%计算平均
4、领域灰度的一维灰度直方图fori=1:mforj=1:nfork=-h:hforw=-h:h;p=i+k;q=j+w;if(p<=0)
5、(p>m)p=i;endif(q<=0)
6、(q>n)q=j;enda1(i,j)=a0(p,q)+a1(i,j);endenda2(i,j)=uint8(1/9*a1(i,j));endendfxy=zeros(256,256);%计算二维直方图fori=1:mforj=1:nc1=a0(i,j);d=double(a2(i,j));fxy(c1+1,d+1)=fxy(c1+1,d
7、+1)+1;endendPxy=fxy/m/n;%figure,%mesh(Pxy);%title('二维灰度直方图');%计算HlHl=0;fori=1:256forj=1:256ifPxy(i,j)>0.00001Hl=Hl-Pxy(i,j)*log(Pxy(i,j));elseHl=Hl;endendend%计算PA,HAPA=zeros(256,256);HA=zeros(256,256);PB=zeros(256,256);PA(1,1)=Pxy(1,1);ifPA(1,1)<1e-4HA(1,1)=0;
8、elseHA(1,1)=-PA(1,1)*log(PA(1,1));endfori=2:256PA(i,1)=PA(i-1,1)+Pxy(i,1);ifPxy(i,1)>0.00001HA(i,1)=HA(i-1,1)-Pxy(i,1)*log(Pxy(i,1));elseHA(i,1)=HA(i-1,1);endendforj=2:256PA(1,j)=PA(1,j-1)+Pxy(1,j);ifPxy(1,j)>0.00001HA(1,j)=HA(1,j-1)-Pxy(1,j)*log(Pxy(1,j));els
9、eHA(1,j)=HA(1,j-1);endendfori=2:256forj=2:256PA(i,j)=PA(i-1,j)+PA(i,j-1)-PA(i-1,j-1)+Pxy(i,j);ifPxy(i,j)>0.00001HA(i,j)=HA(i-1,j)+HA(i,j-1)-HA(i-1,j-1)-Pxy(i,j)*log(Pxy(i,j));elseHA(i,j)=HA(i-1,j)+HA(i,j-1)-HA(i-1,j-1);endendend%计算最大熵PB=1-PA;h=zeros(256,256);h
10、max=0;fori=1:256forj=1:256ifabs(PA(i,j))>0.00001&abs(PB(i,j))>0.00001h(i,j)=log(PA(i,j)*PB(i,j))+HA(i,j)/PA(i,j)+(Hl-HA(i,j))/PB(i,j);elseh(i,j)=0;endifh(i,j)>hmaxhmax=h(i,j);s=i-1