資源簡(jiǎn)介
MATLAB智能算法-溫正-配書代碼,只有代碼。
代碼片段和文件信息
%%%%%%%%%%%%%%%%遺傳算法在道路圖像閾值分割中的應(yīng)用%%%%%%%%%%%%
function?main()
clear?all
close?all
clc
global?chrom?oldpop?fitness?lchrom??popsize?cross_rate?mutation_rate?thresholdsum
global?maxgen??m?n?fit?gen?threshold?A?B?C?oldpop1?popsize1?b?b1?fitness1?threshold1
A=imread(‘1.jpg‘);?????%讀入道路圖像
A=imresize(A0.5);?????%利用imresize函數(shù)通過默認(rèn)的最近鄰插值將圖像放大0.5倍
B=rgb2gray(A);?????????%灰度化
C=imresize(B0.2);?????%將讀入的圖像縮小到0.2倍
lchrom=10;??????????????%染色體長(zhǎng)度
popsize=10;????????????%種群大小
cross_rate=0.8;????????%交叉概率
mutation_rate=0.5;?????%變異概率
maxgen=100;????????????%最大代數(shù)
[mn]=size(C);
initpop;????%初始種群
for?gen=1:maxgen
????generation;??%遺傳操作
end
findthreshold_best;?%圖象分割結(jié)果
%%%%%%%%%%%%%%%%%%%輸出進(jìn)化各曲線%%%%%%%%%%%
figure;
gen=1:maxgen;
plot(genfit(1gen));?
title(‘最佳適應(yīng)度值進(jìn)化曲線‘);
xlabel(‘代數(shù)‘)
ylabel(‘最佳適應(yīng)度值‘)
figure;
plot(genthreshold(1gen));
title(‘每一代的最佳閾值變化曲線‘);
xlabel(‘代數(shù)‘)
ylabel(‘每一代的最佳閾值‘)
%%%%%%%%%%%%%%%%%%%初始化種群%%%%%%%%%%%%%%%%%%%%
function?initpop()
global?lchrom?oldpop?popsize?chrom?C
imshow(C);
for?i=1:popsize
????chrom=rand(1lchrom);
????for?j=1:lchrom
????????if?chrom(1j)<0.5
????????????chrom(1j)=0;
???????else?
???????????chrom(1j)=1;
????????end
????end
????oldpop(i1:lchrom)=chrom;????%給每一個(gè)個(gè)體分配8位的染色體編碼
end
%%%%%%%%%%%%%%%%%產(chǎn)生新一代個(gè)體%%%%%%%%%%%%%%%%%%%%%%
function?generation()
fitness_order;??????????????????%計(jì)算適應(yīng)度值及排序
select;?????????????????????????%選擇操作
crossover;??????????????????????%交叉
mutation;???????????????????????%變異
%%%%%%%%%%%%%%%%%計(jì)算適度值并且排序%%%%%%%%%%%%%%%%%%%
function?fitness_order()
global?lchrom?oldpop?fitness?popsize?chrom?fit?gen?C?m?n??fitness1?thresholdsum
global?lowsum?higsum?u1?u2?threshold?gen?oldpop1?popsize1?b1?b?threshold1?
if?popsize>=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
%如果不是第一代則將上一代操作后的種群根據(jù)此代的種群規(guī)模裝入此代種群中
if?gen>1???
????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(1j)*(2^(lchrom-j));
????end
????b(1i)=c*255/(2^lchrom-1);??%轉(zhuǎn)化到灰度值????????
????for?x=1:m
????????for?y=1:n
????????????if?C(xy)<=b(1i)
????????????????lowsum=lowsum+double(C(xy));%統(tǒng)計(jì)低于閾值的灰度值的總和
????????????????lownum=lownum+1;?%統(tǒng)計(jì)低于閾值的灰度值的像素的總個(gè)數(shù)
????????????else
????????????????higsum=higsum+double(C(xy));%統(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/hignum;
????else
????????u2=0;
????end???
????fitness(1i)=lownum*hignum*(u1-u2)^2;?%計(jì)算適度值
end
if?gen==1?%如果為第一代,從小往大排序
????for?i=1:popsize
????????j=i+1;
????????while
評(píng)論
共有 條評(píng)論