资源描述:
《传算法在道路图像阈值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、传算法在道路图像阈值functionmain()clearallcloseallclcglobalchromoldpopfitnesslchrompopsizecross_ratemutation_rateyuzhisumglobalmaxgenmnfitgenyuzhiABColdpop1popsize1bb1fitness1yuzhi1A=imread('mh.jpg');%读入道路图像%A=imresize(A,0.4);B=rgb2gray(A);%灰度化C=B;%C=imresize(B,0.1);%将读入的图像缩小lchrom=8;%染色体长
2、度popsize=10;%种群大小cross_rate=0.7;%交叉概率mutation_rate=0.4;%变异概率maxgen=150;%最大代数[m,n]=size(C);'计算中,请稍等...'initpop;%初始种群forgen=1:maxgengeneration;%遗传操作endfindresult;%图象分割结果%%%输出进化各曲线figure;gen=1:maxgen;plot(gen,fit(1,gen));title('最佳适应度值进化曲线');figure;plot(gen,yuzhi(1,gen));title('每一代的最
3、佳阈值进化曲线');%%%%%%%%%%%%%%%%%%%初始化种群%%%%%%%%%%%%%%%%%%%%functioninitpop()globallchromoldpoppopsizechromCimshow(C);fori=1:popsizechrom=rand(1,lchrom);forj=1:lchromifchrom(1,j)<0.5chrom(1,j)=0;elsechrom(1,j)=1;endendoldpop(i,1:lchrom)=chrom;end%%%%%%%%%%%%%%%%%产生新一代个体%%%%%%%%%%%%%%%%
4、%%%%%%functiongeneration()fitness_order;%计算适应度值及排序select;%选择操作crossover;%交叉mutation;%变异%%%%%%%%%%%%%%%%%计算适度值并且排序%%%%%%%%%%%%%%%%%%%functionfitness_order()globallchromoldpopfitnesspopsizechromfitgenCmnfitness1yuzhisumgloballowsumhigsumu1u2yuzhigenoldpop1popsize1b1byuzhi1ifpopsize
5、>=5popsize=ceil(popsize-0.03*gen);endifgen==75%当进化到末期的时候调整种群规模和交叉、变异概率cross_rate=0.3;%交叉概率mutation_rate=0.3;%变异概率end%如果不是第一代则将上一代操作后的种群根据此代的种群规模装入此代种群中ifgen>1t=oldpop;j=popsize1;fori=1:popsizeifj>=1oldpop(i,:)=t(j,:);endj=j-1;endend%计算适度值并排序fori=1:popsizelowsum=0;higsum=0;lownum=
6、0;hignum=0;chrom=oldpop(i,:);c=0;forj=1:lchromc=c+chrom(1,j)*(2^(lchrom-j));endb(1,i)=c*255/(2^lchrom-1);%转化到灰度值forx=1:mfory=1:nifC(x,y)<=b(1,i)lowsum=lowsum+double(C(x,y));%统计低于阈值的灰度值的总和lownum=lownum+1;%统计低于阈值的灰度值的像素的总个数elsehigsum=higsum+double(C(x,y));%统计高于阈值的灰度值的总和hignum=hignu
7、m+1;%统计高于阈值的灰度值的像素的总个数endendendiflownum~=0u1=lowsum/lownum;%u1、u2为对应于两类的平均灰度值elseu1=0;endifhignum~=0u2=higsum/hignum;elseu2=0;endfitness(1,i)=lownum*hignum*(u1-u2)^2;%计算适度值endifgen==1%如果为第一代,从小往大排序fori=1:popsizej=i+1;whilej<=popsizeiffitness(1,i)>fitness(1,j)tempf=fitness(1,i);te
8、mpc=oldpop(i,:);tempb=b(1,i);b(1,i)=b(1,