传算法在道路图像阈值_第1页
传算法在道路图像阈值_第2页
传算法在道路图像阈值_第3页
传算法在道路图像阈值_第4页
传算法在道路图像阈值_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、%遗传算法在道路图像阈值分割中的应用% function main() clear all close all clc global chrom oldpop fitness lchrom popsize cross_rate mutation_rate yuzhisum global maxgen m n fit gen yuzhi A B C oldpop1 popsize1 b b1 fitness1 yuzhi1 A=imread(mh.jpg); %读入道路图像 %A=imresize(A,0.4); B=rgb2gray(A); %灰度化 C=B; %C=imresize(B,0.

2、1); %将读入的图像缩小 lchrom=8; %染色体长度 popsize=10; %种群大小 cross_rate=0.7; %交叉概率 mutation_rate=0.4; %变异概率 maxgen=150; %最大代数 m,n=size(C); 计算中,请稍等. initpop; %初始种群 for gen=1:maxgen generation; %遗传操作 end findresult; %图象分割结果 %输出进化各曲线 figure; gen=1:maxgen; plot(gen,fit(1,gen); title(最佳适应度值进化曲线); figure; plot(gen,yu

3、zhi(1,gen); title(每一代的最佳阈值进化曲线); %初始化种群% function initpop() global lchrom oldpop popsize chrom C imshow(C); for i=1:popsize chrom=rand(1,lchrom); for j=1:lchrom if chrom(1,j)=5 popsize=ceil(popsize-0.03*gen); end if gen=75 %当进化到末期的时候调整种群规模和交叉、变异概率 cross_rate=0.3; %交叉概率 mutation_rate=0.3; %变异概率 end %

4、如果不是第一代则将上一代操作后的种群根据此代的种群规模装入此代种群中 if gen1 t=oldpop; j=popsize1; for i=1:popsize if j=1 oldpop(i,:)=t(j,:); end j=j-1; end end %计算适度值并排序 for i=1:popsize lowsum=0; higsum=0; lownum=0; hignum=0; chrom=oldpop(i,:); c=0; for j=1:lchrom c=c+chrom(1,j)*(2(lchrom-j); end b(1,i)=c*255/(2lchrom-1); %转化到灰度值 f

5、or x=1:m for y=1:n if C(x,y)=b(1,i) lowsum=lowsum+double(C(x,y);%统计低于阈值的灰度值的总和 lownum=lownum+1; %统计低于阈值的灰度值的像素的总个数 else higsum=higsum+double(C(x,y);%统计高于阈值的灰度值的总和 hignum=hignum+1; %统计高于阈值的灰度值的像素的总个数 end end end if lownum=0 u1=lowsum/lownum; %u1、u2为对应于两类的平均灰度值 else u1=0; end if hignum=0 u2=higsum/hig

6、num; else u2=0; end fitness(1,i)=lownum*hignum*(u1-u2)2; %计算适度值 end if gen=1 %如果为第一代,从小往大排序 for i=1:popsize j=i+1; while jfitness(1,j) tempf=fitness(1,i); tempc=oldpop(i,:); tempb=b(1,i); b(1,i)=b(1,j); b(1,j)=tempb; fitness(1,i)=fitness(1,j); oldpop(i,:)=oldpop(j,:); fitness(1,j)=tempf; oldpop(j,:)

7、=tempc; end j=j+1; end end for i=1:popsize fitness1(1,i)=fitness(1,i); b1(1,i)=b(1,i); oldpop1(i,:)=oldpop(i,:); end popsize1=popsize; else %大于一代时进行如下从小到大排序 for i=1:popsize j=i+1; while jfitness(1,j) tempf=fitness(1,i); tempc=oldpop(i,:); tempb=b(1,i); b(1,i)=b(1,j); b(1,j)=tempb; fitness(1,i)=fitne

8、ss(1,j); oldpop(i,:)=oldpop(j,:); fitness(1,j)=tempf; oldpop(j,:)=tempc; end j=j+1; end end end %下边对上一代群体进行排序 for i=1:popsize1 j=i+1; while jfitness1(1,j) tempf=fitness1(1,i); tempc=oldpop1(i,:); tempb=b1(1,i); b1(1,i)=b1(1,j); b1(1,j)=tempb; fitness1(1,i)=fitness1(1,j); oldpop1(i,:)=oldpop1(j,:); f

9、itness1(1,j)=tempf; oldpop1(j,:)=tempc; end j=j+1; end end %下边统计每一代中的最佳阈值和最佳适应度值 if gen=1 fit(1,gen)=fitness(1,popsize); yuzhi(1,gen)=b(1,popsize); yuzhisum=0; else if fitness(1,popsize)fitness1(1,popsize1) yuzhi(1,gen)=b(1,popsize); %每一代中的最佳阈值 fit(1,gen)=fitness(1,popsize);%每一代中的最佳适应度 else yuzhi(1,

10、gen)=b1(1,popsize1); fit(1,gen)=fitness1(1,popsize1); end end %精英选择% function select() global fitness popsize oldpop temp popsize1 oldpop1 gen b b1 fitness1 %统计前一个群体中适应值比当前群体适应值大的个数 s=popsize1+1; for j=popsize1:-1:1 if fitness(1,popsize)fitness1(1,j) s=j; end end for i=1:popsize temp(i,:)=oldpop(i,:

11、); end if s=popsize1+1 if gen50 %小于50代用上一代中用适应度值大于当前代的个体随机代替当前代中的个体 for i=s:popsize1 p=rand; j=floor(p*popsize+1); temp(j,:)=oldpop1(i,:); b(1,j)=b1(1,i); fitness(1,j)=fitness1(1,i); end else if gen100 %50100代用上一代中用适应度值大于当前代的个体代替当前代中的最差个体 j=1; for i=s:popsize1 temp(j,:)=oldpop1(i,:); b(1,j)=b1(1,i);

12、 fitness(1,j)=fitness1(1,i); j=j+1; end else %大于100代用上一代中的优秀的一半代替当前代中的最差的一半,加快寻优 j=popsize1; for i=1:floor(popsize/2) temp(i,:)=oldpop1(j,:); b(1,i)=b1(1,j); fitness(1,i)=fitness1(1,j); j=j-1; end end end end %将当前代的各项数据保存 for i=1:popsize b1(1,i)=b(1,i); end for i=1:popsize fitness1(1,i)=fitness(1,i)

13、; end for i=1:popsize oldpop1(i,:)=temp(i,:); end popsize1=popsize; %交叉% function crossover() global temp popsize cross_rate lchrom j=1; for i=1:popsize p=rand; if p=2 for k=1:2:j cutpoint=round(rand*(lchrom-1); f=k; for i=1:cutpoint temp(a(1,f),i)=parent(f,i); temp(a(1,f+1),i)=parent(f+1,i); end fo

14、r i=(cutpoint+1):lchrom temp(a(1,f),i)=parent(f+1,i); temp(a(1,f+1),i)=parent(f,i); end end end %变异% function mutation() global popsize lchrom mutation_rate temp newpop oldpop sum=lchrom*popsize; %总基因个数 mutnum=round(mutation_rate*sum); %发生变异的基因数目 for i=1:mutnum s=rem(round(rand*(sum-1),lchrom)+1; %确

15、定所在基因的位数 t=ceil(round(rand*(sum-1)/lchrom); %确定变异的是哪个基因 if tpopsize t=popsize; end if slchrom s=lchrom; end if temp(t,s)=1 temp(t,s)=0; else temp(t,s)=1; end end for i=1:popsize oldpop(i,:)=temp(i,:); end %查看结果% function findresult() global maxgen yuzhi m n C B A result=floor(yuzhi(1,maxgen) %result为最佳阈值 C=B; %C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论