【图像分割】遗传算法一维最大熵图像分割【含Matlab源码 2935期】

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【图像分割】基于matlab遗传算法一维最大熵图像分割【含Matlab源码 2935期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab图像处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab图像处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab图像处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、遗传算法一维最大熵图像分割

1 最大熵阈值分割原理
最大熵图像分割算法在图像质量较好和背景稳定变化时,可以取得比较理想的分割结果。对于灰度范围为0 ~ 255的病害叶片图像,假设图中灰度级低于t的像素点构成病斑区域( gi) ,灰度级高于t的像素点构成背景区域( Gi) ,则各个灰度级在两区域的分布概率分别为:
在这里插入图片描述
病斑区域和背景区域的熵分别为:
在这里插入图片描述
当熵函数取得最大值时,对应的灰度值T就是所求的最佳阈值,即
在这里插入图片描述
2 最大熵算法与GA相结合的图像分割方法
最大熵算法的求解原理是在解空间中找到一个最优解, 使得图像中目标与背景分布的熵最大。GA是一种基于生物自然选择和遗传机理的随机搜索算法,具有强大的全局最优解搜索能力和信息处理的隐并行性以及应用的鲁棒性。只要检测少量结构就能反映搜索空间较大的区域,并可获得稳定的最优解。GA是一个以适应度函数为依据,通过对种群中的个体施加遗传操作,实现种群内个体结构重组的迭代过程, 逐渐逼近最优解。将GA与最大熵算法相结合,能够得到病斑图像分割的最佳阈值。其病斑图像分割过程描述如下: ( 1) 数据输入。读入作物病害叶片图像,将其转换为灰度图像。( 2) 编码方式。将种群中的各个个体编码为8位二进制码,每个个体代表1个分割阈值,即用00000000 ~ 11111111之间的一个8位二进制代码代表一个图像分割阈值。( 3) 确定算法参数。种群规模n定为20,最小迭代次数为10。当迭代次数超过该值后,检查每代种群中最优个体适应度的变化, 若变化很小,即终止算法。在运算的初始阶段取较大的交叉概率( Pc= 0. 5) 和较小的变异概率( Pm= 0. 02 ) ,以便尽快搜索出最优个体。当迭代过程中种群个体的适应值难以继续增大时,将交叉概率减小10% 、变异概率增加20% ,由此可提高收敛速度,避免陷入局部极值。( 4) 种群规模设置。随机在0 ~ 255之间以同等概率生成n个个体I1~ In作为第1次寻优的初始种群。种群规模设置应该合理,若种群规模过大,则适应度评估次数增加,计算量增加; 种群规模过小,可能会引起未成熟收敛现象。( 5) 适应度函数设计。适应度函数是对个体进行遗传操作的依据,要能反映个体进化的优良程度,即个体有可能达到或接近问题最优解的程度。本算法采用式 ( 5) 作为适应度函数。( 6) 解码。对二进制个体组解码为0 ~ 255之间的实数,求其适应度值。( 7) 选择操作。选择操作先进行赌轮法,再采用精英策略。其具体过程为先计算各个体的适应度的总和S,再随机生成0 ~ S之间一个随机数k,然后从第1个个体开始累加,直到累加值大于该随机数k,此时最后一个累加的个体便是要选择的个体。如此重复形成用于繁殖的新种群 。( 8) 交叉操作。采用单点交叉,在I’1~ I’n中每次选取2个个体按设定的交叉概率进行交叉操作,生成新代的种群I″1~ I″n。( 9) 变异操作。采用基本变异算子,按设定的变异概率随机从I″1~ I″n中选择若干个个体,再随机从这些个体中选择某一位进行变异运算。从而形成新代种群I’‘‘1~ I’’'n。( 10) 对经过遗传操作后的个体采用小生境技术, 由于对适应度小的个体使用惩罚函数,可大幅提高其被淘汰的概率。( 11) 终止准则。没有满足某种停止条件,则继续上述操作,否则进入( 5) 。以迭代次数为终止条件,达到预定的最大迭代次数,则算法终止。当算法执行到最大进化代数 ( 或满足终止条件) ,种群中的最高适应度值仍未发生变化 ( 稳定条件) 时,算法停止运行,具有最高适应度值的个体即为分割阈值; 否则以新代种群I1~ In转到步骤( 5) 。本算法的终止准则,为当相邻2代的个体的平均适应度值小于0. 001时停止迭代。

⛄三、部分源代码

clc;
clear all;
% data=imread(‘Barbara.tif’);
data=imread(‘KimSoHyun.jpg’);
% data=imread(‘lena.bmp’);
figure(1);
imshow(data);
[m,n,r]=size(data);
if r>1
data=rgb2gray(data);
end
figure(3)
imshow(data);
[h,x]=imhist(uint8(data)); %或许直方图信息
h = h/(m*n);
mima=find(h~=0);
L=length(mima);
tic
for t = 2 : L-1
% 每个t都要重新进行计算H(O)+H(B),所以每次都要进行对tp1,tp2,tp3,tp4进行重新初始化
tp1 = 0.0;
tp2 = 0.0;
tp3 = 0.0;
tp4 = 0.0;
temp = 0.0;
for i = 1:t
tp1 = tp1 + h(mima(i));
end
tp2 = 1 - tp1;
for i =1 : t
tp3 = tp3 - (h(mima(i)) / tp1) * log(h(mima(i)) / tp1);
end
for i = (t+1) : L
tp4 = tp4 - (h(mima(i)) / tp2) * log(h(mima(i)) / tp2);
end
temp = tp3 + tp4;
if t == 2
temp1= temp; %确定一个初始值给temp,从t=2开始逐个进行比较
t1 = 2; %索引编号
else % t>2
if temp1>temp
temp1= temp1; %找最大方差temp
t1 = t1; % 更新
else
temp1 = temp;
t1 = t; % 更新t1
end
end
end
%T = mima(t1)-1;
toc
T = mima(t1); %mima(t1)代表
data1=zeros(m,n);
data=double(data);
for i=1:m
for j=1:n
if data(i,j)>T
data1(i,j)=255;
else
data1(i,j) = 0;
end
end
end
figure(2),imshow(data1)
T

⛄四、运行结果

在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]杨章静,钱建军,黄璞,张凡龙,杨国为.基于Gabor变换的GrabCut纹理图像分割[J].控制与决策. 2016,31(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值