傳算法在道路圖像閾值_第1頁
傳算法在道路圖像閾值_第2頁
傳算法在道路圖像閾值_第3頁
傳算法在道路圖像閾值_第4頁
傳算法在道路圖像閾值_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、%遺傳算法在道路圖像閾值分割中的應(yīng)用% 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; %最大代數(shù) m,n=size(C); 計(jì)算中,請(qǐng)稍等. initpop; %初始種群 for gen=1:maxgen generation; %遺傳操作 end findresult; %圖象分割結(jié)果 %輸出進(jìn)化各曲線 figure; gen=1:maxgen; plot(gen,fit(1,gen); title(最佳適應(yīng)度值進(jìn)化曲線); figure; plot(gen,yu

3、zhi(1,gen); title(每一代的最佳閾值進(jìn)化曲線); %初始化種群% 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 %當(dāng)進(jìn)化到末期的時(shí)候調(diào)整種群規(guī)模和交叉、變異概率 cross_rate=0.3; %交叉概率 mutation_rate=0.3; %變異概率 end %

4、如果不是第一代則將上一代操作后的種群根據(jù)此代的種群規(guī)模裝入此代種群中 if gen1 t=oldpop; j=popsize1; for i=1:popsize if j=1 oldpop(i,:)=t(j,:); end j=j-1; end end %計(jì)算適度值并排序 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); %轉(zhuǎn)化到灰度值 f

5、or x=1:m for y=1:n if C(x,y)=b(1,i) lowsum=lowsum+double(C(x,y);%統(tǒng)計(jì)低于閾值的灰度值的總和 lownum=lownum+1; %統(tǒng)計(jì)低于閾值的灰度值的像素的總個(gè)數(shù) else higsum=higsum+double(C(x,y);%統(tǒng)計(jì)高于閾值的灰度值的總和 hignum=hignum+1; %統(tǒng)計(jì)高于閾值的灰度值的像素的總個(gè)數(shù) end end end if lownum=0 u1=lowsum/lownum; %u1、u2為對(duì)應(yīng)于兩類的平均灰度值 else u1=0; end if hignum=0 u2=higsum/hig

6、num; else u2=0; end fitness(1,i)=lownum*hignum*(u1-u2)2; %計(jì)算適度值 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 %大于一代時(shí)進(jìn)行如下從小到大排序 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 %下邊對(duì)上一代群體進(jìn)行排序 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 %下邊統(tǒng)計(jì)每一代中的最佳閾值和最佳適應(yīng)度值 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);%每一代中的最佳適應(yīng)度 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 %統(tǒng)計(jì)前一個(gè)群體中適應(yīng)值比當(dāng)前群體適應(yīng)值大的個(gè)數(shù) 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代用上一代中用適應(yīng)度值大于當(dāng)前代的個(gè)體隨機(jī)代替當(dāng)前代中的個(gè)體 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代用上一代中用適應(yīng)度值大于當(dāng)前代的個(gè)體代替當(dāng)前代中的最差個(gè)體 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代用上一代中的優(yōu)秀的一半代替當(dāng)前代中的最差的一半,加快尋優(yōu) 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 %將當(dāng)前代的各項(xiàng)數(shù)據(jù)保存 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; %總基因個(gè)數(shù) mutnum=round(mutation_rate*sum); %發(fā)生變異的基因數(shù)目 for i=1:mutnum s=rem(round(rand*(sum-1),lchrom)+1; %確

15、定所在基因的位數(shù) t=ceil(round(rand*(sum-1)/lchrom); %確定變異的是哪個(gè)基因 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 %查看結(jié)果% 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論