免疫遗传算法实现图像阈值分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
免疫遗传算法实现图像阈值分割
clear all
clc
tic
%%
popsize=15; %群体规模
lanti=10;
maxgen=50; %最大代数
cross_rate=0.4; %交叉速率
mutation_rate=0.1;%变异速率
a0=0.7;
zpopsize=5;
bestf=0;
nf=0;
number=0;
%%
I=imread('01.bmp'); %读入图像
%%
q=isrgb(I); %判断是否为RGB真彩图像
if q==1
I=rgb2gray(I); %转换RGB图像为灰度图像
end
%%
[m,n]=size(I); %图像大小
p=imhist(I); %显示图像数据直方图
p=p'; %阵列由列变为行
p=p/(m*n); %将p的值变换到(0,1)
figure(1)
subplot(1,2,1);
imshow(I);
title('原图的灰度图像');
hold on
%% 抗体群体初始化
pop=2*rand(popsize,lanti)-1; %pop为15*10的值为(-1,1)之间的随机数矩阵
pop=hardlim(pop); %大于等于0为1,小于0为0 %% 免疫操作
for gen=1:maxgen
%% 计算抗体—抗原的亲和度
[fitness,yuzhi,number]=fitnessty(pop,lanti,I,popsize,m,n,number); if max(fitness)>bestf
bestf=max(fitness);
nf=0;
for i=1:popsize
%% 找出最大适应度在向量fitness中的序号
if fitness(1,i)==bestf
v=i;
end
end
yu=yuzhi(1,v);
elseif max(fitness)==bestf
nf=nf+1;
end
if nf>=20
break;
end
%%
A=shontt(pop); %计算抗体—抗体的相似度
f=fit(A,fitness); %计算抗体的聚合适应度pop=select(pop,f); %进行选择操作
pop=coss(pop,cross_rate,popsize,lanti); %交叉
pop=mutation_compute(pop,mutation_rate,lanti,popsize); %变异
a=shonqt(pop); %计算抗体群体的相似度
%%
if a>a0
zpop=2*rand(zpopsize,lanti)-1;
zpop=hardlim(zpop); %随机生成zpopsize 个新抗体
pop(popsize+1:popsize+zpopsize,:)=zpop(:,:);
[fitness,yuzhi,number]=fitnessty(pop,lanti,I,popsize,m,n,number);
%% 计算抗体—抗原的亲和度
A=shontt(pop); %计算抗体—抗体的相似度
f=fit(A,fitness); %计算抗体的聚合适应度
pop=select(pop,f); %进行选择操作
end
if gen==maxgen
[fitness,yuzhi,number]=fitnessty(pop,lanti,I,popsize,m,n,number);
%计算抗体—抗原的亲和度
end
end
imshow(I);
subplot(1,2,2);
fresult(I,yu);
title('阈值分割后的图像');