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代码与数据下载地址
见博客主页