1 内容介绍
利用遗传算法与最大熵值法相结合的算法对图像进行处理。通过结合遗传算法改善了最大熵值法运算速度慢的弱点,实现了图像的双阈值分割。
2 仿真代码
clc
clear all
close all
lbx=-1;ubx=1; %函数自变量x范围【-1,1】
lby=-1;uby=1; %函数自变量y范围【-1,1】
%% 定义遗传算法参数
NIND=50; %个体数目
MAXGEN=50; %最大遗传代数
PRECI=20; %变量的二进制位数
GGAP=0.90; %代沟
px=0.97; %交叉概率
pm=0.001; %变异概率
trace=zeros(6,MAXGEN); %寻优结果的初始值
FieldD=[PRECI PRECI PRECI PRECI PRECI;lbx lby lbx lbx lbx;ubx uby ubx ubx ubx;1 1 1 1 1;0 0 0 0 0;1 1 1 1 1;1 1 1 1 1]; %区域描述器
Chrom=crtbp(NIND,PRECI*5); %初始种群
%% 优化
gen=0; %代计数器
XY=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换
d1=XY(:,1);
d2=XY(:,2);d3=XY(:,3);d4=XY(:,4);d5=XY(:,5);
ObjV=func(d1,d2,d3,d4,d5,NIND); %计算目标函数值
%记下每代的最优值
end
figure(2);
plot(1:MAXGEN,trace(6,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestc1=trace(1,end)
bestc2=trace(2,end)
bestc3=trace(3,end)
bestc4=trace(4,end)
bestc5=trace(5,end)
bestSIR=trace(6,end)
clear all
close all
lbx=-1;ubx=1; %函数自变量x范围【-1,1】
lby=-1;uby=1; %函数自变量y范围【-1,1】
%% 定义遗传算法参数
NIND=50; %个体数目
MAXGEN=50; %最大遗传代数
PRECI=20; %变量的二进制位数
GGAP=0.90; %代沟
px=0.97; %交叉概率
pm=0.001; %变异概率
trace=zeros(6,MAXGEN); %寻优结果的初始值
FieldD=[PRECI PRECI PRECI PRECI PRECI;lbx lby lbx lbx lbx;ubx uby ubx ubx ubx;1 1 1 1 1;0 0 0 0 0;1 1 1 1 1;1 1 1 1 1]; %区域描述器
Chrom=crtbp(NIND,PRECI*5); %初始种群
%% 优化
gen=0; %代计数器
XY=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换
d1=XY(:,1);
d2=XY(:,2);d3=XY(:,3);d4=XY(:,4);d5=XY(:,5);
ObjV=func(d1,d2,d3,d4,d5,NIND); %计算目标函数值
%记下每代的最优值
end
figure(2);
plot(1:MAXGEN,trace(6,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
bestc1=trace(1,end)
bestc2=trace(2,end)
bestc3=trace(3,end)
bestc4=trace(4,end)
bestc5=trace(5,end)
bestSIR=trace(6,end)
function [v10,v11]=mutation_2d(c10,c11)
%变异算子
format long;
population=20;
pm=0.03;
for i=1:population
for j=1:8
r0=rand(1);
r1=rand(1);
if r0>pm
temp0(i,j)=c10(i,j);
else
tt=not(str2num(c10(i,j)));
temp0(i,j)=num2str(tt);
end
if r1>pm
temp1(i,j)=c11(i,j);
else
tt=not(str2num(c11(i,j)));
temp1(i,j)=num2str(tt);
end
end
end
v10=temp0;
v11=temp1;
function [c10,c11]=cross_2d(s_code10,s_code11)
%交叉算子
pc=0.8; %交叉概率取0.6
population=20;
%(1,2)/(3,4)/(5,6)进行交叉运算,(7,8)/(9,10)复制
ww0=s_code10;
ww1=s_code11;
for i=1:(pc*population/2)
r0=abs(round(rand(1)*10)-3);
r1=abs(round(rand(1)*10)-3);
for j=(r0+1):8
temp0=ww0(2*i-1,j);
ww0(2*i-1,j)=ww0(2*i,j);
ww0(2*i,j)=temp0;
end
for j=(r1+1):8
temp1=ww1(2*i-1,j);
ww1(2*i-1,j)=ww1(2*i,j);
ww1(2*i,j)=temp1;
end
end
c10=ww0;
c11=ww1;
3 运行结果
4 参考文献
[1]李佩姗, 史春景, 郝永平. 基于遗传算法最大熵值法的毫米波图像分割[J]. 光电技术应用, 2019, 34(2):5.
[2]宋家慧. 基于遗传算法的最大熵阈值的图像分割[J]. 信息化研究, 2005, 31(002):60-63.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。