基于变色龙算法优化的对称交叉熵图像多阈值分割

智能优化算法应用:基于变色龙优化的对称交叉熵图像多阈值分割


摘要:本文介绍基于对称交叉熵的图像分割,并且应用变色龙算法进行阈值寻优。

1.前言

阅读此文章前,请阅读《图像分割:直方图区域划分及信息统计介绍》https://blog.csdn.net/u011835903/article/details/108024753 了解基础知识,相关公式含义。

2.对称交叉熵阈值分割原理

考虑到Li等人提出的交叉熵不具备距离对称性, Brink等给出了对称交叉熵的概念,其实质上是将前向 KullBack 散度与后向 KullBack 散度相加,从而使得交叉熵具有了对称性,成为真正意义上的距离度量。对称交叉熵的表达式为:
H ( t ) = ∑ i = 0 t h i ( i l n i u 0 ( t ) + u 0 ( t ) l n u 0 ( t ) i ) + ∑ i = t + 1 L − 1 h i ( i l n i u b ( t ) + u b ( t ) l n u b ( t ) i ) (1) H(t) = \sum_{i=0}^t h_i(iln\frac{i}{u_0(t)} + u_0(t)ln\frac{u_0(t)}{i}) + \sum_{i=t+1}^{L-1} h_i(iln\frac{i}{u_b(t)} + u_b(t)ln\frac{u_b(t)}{i})\tag{1} H(t)=i=0thi(ilnu0(t)i+u0(t)lniu0(t))+i=t+1L1hi(ilnub(t)i+ub(t)lniub(t))(1)
使式(1)取最小值的t值即为最佳阈值:
t ∗ = a r g m i n ( 0 ≤ t ≤ L − 1 ) { H ( t ) } (2) t^*=argmin_(0\leq t\leq L-1)\{H(t)\} \tag{2} t=argmin(0tL1){H(t)}(2)
推广到多阈值则为,寻找一组阈值 ( t 0 , . . . , t n ) (t_0,...,t_n) t0,...,tn使得熵值最小:
t ( 1 , . . , n ) ∗ = a r g m i n { H 0 + H 1 + , . . . + H n } (3) t(1,..,n)^*=argmin\{H_0+H_1+,...+H_n\}\tag{3} t(1,..,n)=argmin{H0+H1+,...+Hn}(3)

3.基于变色龙优化的多阈值分割

由上述对称交叉熵阈值分割原理可知,要得到最终的阈值,需要去寻找阈值,熵值最小。于是可以利用智能优化算法进行阈值的寻优,使得获得最佳阈值。

于是优化的适应度函数就是:
f u n { t ( 1 , . . , n ) ∗ } = a r g m i n { H 0 + H 1 + , . . . + H n } (4) fun\{t(1,..,n)^*\}=argmin\{H_0+H_1+,...+H_n\}\tag{4} fun{t(1,..,n)}=argmin{H0+H1+,...+Hn}(4)
设置阈值分割的个数,寻优边界为0到255(因为图像的像素值范围为0-255),设置相应的变色龙算法参数
变色龙算法原理请参考:https://blog.csdn.net/u011835903/article/details/122717804

4.算法结果:

在这里插入图片描述
在这里插入图片描述

5.参考文献:

[1]吴一全,孟天亮,吴诗婳.图像阈值分割方法研究进展20年(1994—2014)[J].数据采集与处理,2015,30(01):1-23.

6.Matlab 代码

变色龙算法(Chameleon Algorithm)是一种基于人工蜂群算法(Artificial Bee Colony Algorithm,ABC)的优化算法,它能够在多维空间中优化设计问题。下面我将为您介绍如何使用变色龙算法优化设计代码。 首先,需要定义设计变量和目标函数。例如,假设我们要优化一个简单的函数 f(x) = x^2,其中 x 是设计变量。我们的目标是找到使函数最小化的 x 值。 接下来,我们需要初始化一群变色龙,每个变色龙代表一个设计解。可以通过随机生成一组初始解来实现。变色龙的每个维度都应该有一个随机的初始值。例如,如果我们使用 10 个变色龙,则可以将它们初始化为: ``` x1 = [0.2, 0.5, 0.1, 0.9, 0.6, 0.3, 0.8, 0.4, 0.7, 0.2] x2 = [0.8, 0.4, 0.6, 0.2, 0.3, 0.1, 0.5, 0.7, 0.9, 0.2] x3 = [0.5, 0.1, 0.8, 0.3, 0.4, 0.6, 0.7, 0.2, 0.9, 0.5] ... x10 = [0.9, 0.3, 0.7, 0.5, 0.8, 0.1, 0.2, 0.6, 0.4, 0.5] ``` 然后,我们需要计算每个变色龙的适应度函数值。对于我们的例子,适应度函数可以定义为 f(x)。因此,我们需要计算每个变色龙的适应度值: ``` f(x1) = 0.04 f(x2) = 0.64 f(x3) = 0.26 ... f(x10) = 0.81 ``` 接下来,我们需要根据每个变色龙的适应度值来选择颜色。变色龙的颜色是一个长度为 n 的向量,其中 n 是设计变量的数量。每个元素的值在 [0, 1] 之间。在选择颜色时,我们需要将适应度值转换为概率分布,然后使用轮盘赌选择算法来选择颜色。选择颜色的概率应该与适应度值成正比。例如,如果变色龙 x1 的适应度值为 0.04,变色龙 x2 的适应度值为 0.64,变色龙 x3 的适应度值为 0.26,则它们被选择的概率为: ``` P(x1) = 0.02 P(x2) = 0.32 P(x3) = 0.13 ``` 接下来,我们需要从选择的颜色中选择两个变色龙,并根据它们的颜色交叉生成一个新的变色龙变色龙的交叉操作可以使用基本的单点交叉算法。例如,假设我们选择了变色龙 x1 和 x2,它们的颜色分别为: ``` x1 = [0.2, 0.5, 0.1, 0.9, 0.6, 0.3, 0.8, 0.4, 0.7, 0.2] x2 = [0.8, 0.4, 0.6, 0.2, 0.3, 0.1, 0.5, 0.7, 0.9, 0.2] ``` 我们可以随机选择一个位置(例如,位置 4),并使用 x1 的前四个元素和 x2 的后六个元素来生成一个新的变色龙: ``` x_new = [0.2, 0.5, 0.1, 0.2, 0.3, 0.1, 0.5, 0.7, 0.9, 0.2] ``` 接下来,我们需要使用变色龙算法的变异操作来随机扰动新的变色龙。变异操作可以是随机添加一个小的扰动或者重新随机生成一组新的设计变量。例如,假设我们将新的变色龙 x_new 扰动一个随机数 [0, 0.1],则变异后的新变色龙为: ``` x_new = [0.2, 0.5, 0.1, 0.2, 0.3, 0.1, 0.5, 0.7, 0.9, 0.3] ``` 最后,我们需要计算变异后的新变色龙的适应度函数值,并用它来替换原来的变色龙中适应度值最差的那个。这个过程可以重复多次,直到满足停止准则为止。 以上就是使用变色龙算法优化设计代码的基本步骤。可以根据实际问题对算法进行调整和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能算法研学社(Jack旭)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值