【图像分割】基于免疫遗传算法单阈值图像分割Matlab代码

196 阅读3分钟

1 简介

图像阈值分割是指利用图像的灰度特征来选择一个或多个最佳灰度阈值,并将图像中的像素点 按照阈值划分为若干个区域,从而提取出感兴趣目标的图像处理方法,它是图像分割算法中应用最广 泛的一种方法.如何确定最佳阈值是该方法进行图像分割的关键环节.长期以来,人们已提出了多种 选取阈值的方法,如直方图阈值法、最大类间方差法、最大熵阈值法和模糊阈值法等,但各种算法都有 其应用的局限性. ​基于最大熵准则的图像阈值分割算法是一个图像分割的最优化问题,算法的运算量很大.用一种基于免疫调节机制的免疫遗传算法求解该准则下图像的一组最佳分割阈值,不仅提高了运算速度,而且克服了一般遗传算法的不足.仿真实验证明了该算法对复杂图像的良好分割效果和较强的实时处理能力.

2 部分代码

%免疫遗传算法主程序
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('bird.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,1figure(1)
subplot(1,2,1);
imshow(I);
title('原始图像的灰度图像');
hold on
%%%抗体群体初始化%%%%%%%%%%%
pop=2*rand(popsize,lanti)-1;   %pop为10*8的值为(-1,1)之间的随机数矩阵
pop=hardlim(pop);              %大于等于01,小于00
%%%%%%免疫操作%%%%%%%%%%%%%%%%%%
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
       if fitness(1,i)==bestf        %找出最大适应度在向量fitness中的序号
           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('阈值分割后的图像');

3 仿真结果

4 参考文献

[1]吴薇, 邓秋霞, and 何曰光. "基于免疫遗传算法的图像阈值分割." 纺织高校基础科学学报 17.2(2004):4.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页