基于白鲸算法优化的最小交叉熵图像多阈值分割

智能优化算法应用:基于白鲸算法优化的最小交叉熵图像多阈值分割


摘要:本文介绍基于最小交叉熵的图像分割,并且应用白鲸算法进行阈值寻优。

1.前言

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

2.最小交叉熵阈值分割原理

1993 年,Li等人将交叉熵的概念引入到图像处理领域,提出了基于一维灰度级直方图的最小交叉熵阈值选取方法。该方法以分割后的图像与原图像的信息量差异最小为阈值选取准则,实质上是使分割前后图像的Kullback散度达到最小。交叉熵的计算公式为:
H ( t ) = ∑ i = 0 t i h i l n i u 0 ( t ) + ∑ i = t + 1 L − 1 i h i l n i u b ( t ) (1) H(t) = \sum_{i=0}^t ih_iln\frac{i}{u_0(t)} + \sum_{i=t+1}^{L-1} ih_iln\frac{i}{u_b(t)} \tag{1} H(t)=i=0tihilnu0(t)i+i=t+1L1ihilnub(t)i(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/127642354

4.算法结果:

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

5.参考文献:

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

6.Matlab 代码

白鲸优化算法是一种群体智能优化算法,其灵感来源于白鲸的群体觅食行为。它具有三个阶段:探索、开发和鲸落。在探索阶段,个体通过随机搜索来扩大解空间。在开发阶段,个体通过拥有较好适应度的解来引导搜索。在鲸落阶段,个体通过集中搜索来收敛解空间。通过这种方式,白鲸优化算法可以在搜索过程中逐渐找到最优解。 在使用Python实现白鲸优化算法时,可以先定义适应度函数,并设置好参数。适应度函数的目标是最小化各VMD分量的局部包络熵。然后,通过随机初始化一组白鲸个体,使用白鲸优化算法的探索、开发和鲸落阶段来更新个体的位置。在每一次迭代中,根据个体的适应度值来选择全局最优解,并更新个体的位置。最后,通过多次迭代,算法会逐渐收敛到最优解。 以下是白鲸算法优化Python的示例代码: ```python import numpy as np import time # 定义适应度函数 def fitness(pop, data): np.random.seed(0) K = int(pop[0]) alpha = int(pop[1]) tau = 0 DC = 0 init = 1 tol = 1e-7 imf, res, u_hat, omega = VMD(data, alpha, tau, K, DC, init, tol) comp = np.vstack([imf, res.reshape(1,-1)]) SE = 0 se_imf = [] for i in range(comp.shape[0]): temp = BaoLuoShang(comp[i,:]) SE += temp se_imf.append(temp) fit = min(se_imf) np.random.seed(int(time.time())) return fit # 白鲸优化算法 def beluga_whale_optimization(data, num_iterations, num_whales, bounds): # 随机初始化白鲸个体的位置 whales = np.random.uniform(bounds[0], bounds[1], size=(num_whales, len(bounds))) # 初始化最佳适应度和最佳位置 best_fitness = float('inf') best_position = None for iteration in range(num_iterations): for i in range(num_whales): # 更新个体的位置 new_position = whales[i] + np.random.uniform(-1, 1, size=len(bounds)) new_position = np.clip(new_position, bounds[0], bounds[1]) # 计算个体的适应度值 fitness_value = fitness(new_position, data) # 更新最佳适应度和最佳位置 if fitness_value < best_fitness: best_fitness = fitness_value best_position = new_position.copy() # 更新个体的位置 whales[i] = new_position.copy() return best_position # 设置数据和参数 data = # 原始时间序列数据 num_iterations = # 迭代次数 num_whales = # 白鲸个体数量 bounds = # 个体位置的上下界 # 运行白鲸算法优化 best_position = beluga_whale_optimization(data, num_iterations, num_whales, bounds) # 输出最佳位置 print("最佳位置:", best_position) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能算法研学社(Jack旭)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值