【图像分割】基于遗传算法的彩色图像二维熵多阈值自适应分割matlab代码

185 阅读1分钟

1 简介

提出一种基于遗传算法的二维熵多阈值自适应图像分割方法.在分析研究二维熵阈值分割原理的基础上,将可变码长的遗传算法应用于多阈值分割处理过程,采用基于多阈值的整数编码方式,将图像分割的类别数即染色体的码长融合到适应度函数中,从而实现了在对阈值寻优的同时得以优化分割类别数,最终实现图像的多阈值自适应分割处理.实验分析结果表明,该方法具有实现阈值寻优速度快,最优解对应图像分割效果好的特点.

2 部分代码

clc;clear;close all;                %清屏,删除已有的变量和窗口

%% 输入图像;
Imag = imread('24063.jpg');%296059   
Imag=rgb2gray(Imag);
Image_OSTU=Imag;

%种群大小
popsize=100;
%二进制编码长度
chromlength=8;
%交叉概率
pc = 0.6;
%变异概率
pm = 0.001;
%初始种群
pop = initpop(popsize,chromlength);
ger = 5000;                         % 最大迭代次数
iter=1;                             %初始的迭代次数因为用while设置为一
record = zeros(ger, 1);             %记录器
while iter <= ger
   %计算适应度值(函数值)
   objvalue = cal_objvalue(pop);
   fitvalue = objvalue;
   %选择操作
   newpop = selection(pop,fitvalue);
   %交叉操作
   newpop = crossover(newpop,pc);
   %变异操作
   newpop = mutation(newpop,pm);
   %更新种群
   pop = newpop;
   %寻找最优解
  [bestindividual,bestfit] = best(pop,fitvalue);
   record(iter) = bestfit;            %记录最大值
   iter = iter+1;
end
%% 作图
  figure(3);
   plot(record);                %画出最大值的变化过程
   title('收敛过程')

l, bestfit] = best(pop,fitvalue)
[px,py,pz] = size(pop); %获取矩阵的行数和列数,size()将矩阵的行数给px,列数给py
bestindividual = pop(1,:,:);%把第一行的所有列弹出 赋给bestindividual,pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
bestfit = fitvalue(1); %这两行相当于在初始化最佳个体和最佳适应度值
for i = 2:px %for循环从第二行开始,
   if fitvalue(i)>bestfit %如果改行的适应值大于最佳适应值,
       bestindividual = pop(i,:,:);%把该行作为最佳个体,
       bestfit = fitvalue(i);%该行适应值为最佳适应值
   end
end
end

3 仿真结果

4 参考文献

[1]常发亮, 刘静, and 乔谊正. "基于遗传算法的彩色图像二维熵多阈值自适应分割." 控制与决策 20.6(2005):5.

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

5 MATLAB代码与数据下载地址

见博客主页