基于阿基米德优化算法优化的otsu图像多阈值分割

智能优化算法应用:基于阿基米德优化算法的Otsu图像多阈值分割-附代码


摘要:Otsu 方法是应用最广泛的图像分割法之一,该方法也叫最大类间方法阈值分割法,选择分割阈值的标准是图像的类间方差达到最大或者类内方差最小。Otsu 阈值分割法可以从单阈值扩展到多级阈值分割,多阈值分割图像时采用多个不同的阈值将图像分割为多个不同的区域或目标。将智能算法应用于多阈值的寻找,能大大加快算法的速度。

1.Otsu阈值分割法原理

Otsu 阈值分割法是日本学者 Otsu 提出来的。假设图像大小为 M × N M × N M×N,图像灰度级范围为 [ 0 , L - 1 ] [0,L - 1] 0L1 n i n_i ni为图像灰度级 i i i 的像素点数,灰度级 i i i 出现的概率为: p i = n i / ( M × N ) p_i = n_i /(M × N) pi=ni/(M×N);对于单阈值分割,图像被分割为两类,灰度级为 [ 0 , T ] [0,T] 0T的像素点归为 C 0 C_0 C0 类,灰度级为 [ T + 1 , L - 1 ] [T + 1,L - 1] T+1L1的像素点为 C 1 C_1 C1 类。设 P 0 ( T ) 、 P 1 ( T ) P_0 (T)、P_1 (T) P0(T)P1(T) 分别表示 C 0 C_0 C0 类和 C 1 C_1 C1 类的出现的概率; u 0 ( T ) , u 1 ( T ) u_0 (T),u_1 (T) u0(T)u1(T) 表示 C 0 C_0 C0 类和 C 1 C_1 C1 类的平均灰度级。则有:
P 0 ( T ) = ∑ i = 0 T p i (1) P_0(T)=\sum_{i=0}^{T}p_i\tag{1} P0(T)=i=0Tpi(1)

P 1 ( T ) = ∑ i = T + 1 L − 1 p i = 1 − P 0 ( T ) (2) P_1(T)=\sum_{i=T+1}^{L-1}p_i = 1 - P_0(T)\tag{2} P1(T)=i=T+1L1pi=1P0(T)(2)

u 0 ( T ) = ∑ i = 0 T ( i p i P 0 ( T ) ) (3) u_0(T)=\sum_{i=0}^T(i\frac {p_i}{P_0(T)})\tag{3} u0(T)=i=0T(iP0(T)pi)(3)

u 1 ( T ) = ∑ i = T + 1 L − 1 ( i p i P 1 ( T ) ) (4) u_1(T)=\sum_{i=T+1}^{L-1}(i\frac {p_i}{P_1(T)})\tag{4} u1(T)=i=T+1L1(iP1(T)pi)(4)

图像的平均灰度级表示为:
u = ∑ i = 1 L i p i = P 0 ( T ) u 0 ( T ) + P 1 ( T ) u 1 ( T ) (5) u = \sum_{i=1}^{L}ip_i=P_0(T)u_0(T)+P_1(T)u_1(T)\tag{5} u=i=1Lipi=P0(T)u0(T)+P1(T)u1(T)(5)
图像的类间方差 δ b 2 ( T ) \delta_b^2(T) δb2(T)表示为:
δ b 2 ( T ) = P 0 ( T ) ( u 0 ( T ) − u ) 2 + P 1 ( T ) ( u 1 ( T ) − u ) 2 (6) \delta_b^2(T)=P_0(T)(u_0(T) -u)^2+P_1(T)(u_1(T)-u)^2\tag{6} δb2(T)=P0(T)(u0(T)u)2+P1(T)(u1(T)u)2(6)
图像的类内方差 δ w 2 ( T ) \delta_w^2(T) δw2(T) 表示为
δ w 2 ( T ) = P 0 ( T ) u 0 2 ( T ) + P 1 ( T ) u 1 2 ( T ) (7) \delta_w^2(T)=P_0(T)u_0^2(T)+P_1(T)u_1^2(T)\tag{7} δw2(T)=P0(T)u02(T)+P1(T)u12(T)(7)
当类间方差达到最大时该灰度级为最优分割阈值,即Otsu 阈值:
T ∗ = a r g m a x ( l ≤ T < L ) { δ b 2 ( T ) } (8) T^* = argmax_{(l\leq T<L)} \{\delta_b^2(T) \}\tag{8} T=argmax(lT<L){δb2(T)}(8)
或者当类内方差达到最小时对应的阈值为最优分割阈值:
T ∗ = a r g m i n ( l ≤ T < L ) { δ w 2 ( T ) } (9) T^* = argmin_{(l\leq T<L)} \{\delta_w^2(T) \}\tag{9} T=argmin(lT<L){δw2(T)}(9)
单阈值 Otsu 分割法可以扩展到多级阈值分割法。假设有 n − 1 n-1 n1个阈值 T 1 , T 2 , . . . , T n − 1 T_1,T_2,...,T_{n-1} T1,T2,...,Tn1 将图像分为 n n n类,表示为 C 0 = { 0 , 1 , . . . , T 1 } , . . . . , C n = { T n − 1 + 1 , T n − 1 + 2 , . . . , L − 1 } C_0=\{0,1,...,T_1\},....,C_n=\{T_{n-1}+1,T_{n-1}+2,...,L-1\} C0={0,1,...,T1},....,Cn={Tn1+1,Tn1+2,...,L1},各类出现的概率分别表示为 P 0 , P 1 , . . . , P n − 1 P_0,P_1,...,P_{n-1} P0,P1,...,Pn1,方差表示为 δ 0 2 , δ 1 2 , . . . , δ n − 1 2 \delta_0^2,\delta_1^2,...,\delta_{n-1}^2 δ02,δ12,...,δn12,均值为 u 0 , u 1 , . . . , u n − 1 u_0,u_1,...,u_{n-1} u0,u1,...,un1

则有:
P k = ∑ i = T k T k + 1 − 1 p i (10) P_k = \sum_{i=T_k}^{T_{k+1}-1}p_i\tag{10} Pk=i=TkTk+11pi(10)

u k = 1 P k P k ∑ i = T k T k + 1 − 1 i p i (11) u_k=\frac{1}{P_k}P_k\sum_{i=T_k}^{T_{k+1}-1}ip_i\tag{11} uk=Pk1Pki=TkTk+11ipi(11)

δ k 2 = ∑ i = T k T k + 1 − 1 ( i − u k ) 2 p i P k (12) \delta_k^2=\sum_{i=T_k}^{T_{k+1}-1}(i-u_k)^2\frac{p_i}{P_k}\tag{12} δk2=i=TkTk+11(iuk)2Pkpi(12)

其中 k = 0 , 1 , … , n − 1 ; T 0 = 0 , T n = L k = 0,1,…,n-1;T_0 = 0,T_n = L k=01n1;T0=0Tn=L。则图像的类间方差表示为:
δ b 2 = ∑ i = 0 n − 1 P i δ i 2 (13) \delta_b^2=\sum_{i=0}^{n-1}P_i\delta_i^2\tag{13} δb2=i=0n1Piδi2(13)
多级最优分割阈值:
{ T 1 ∗ , T 2 ∗ , . . . , T n − 1 ∗ } = a r g m a x ( l ≤ T < L ) { δ b 2 } (14) \{T_1^*,T_2^*,...,T_{n-1}^*\} =argmax_{(l\leq T<L)} \{\delta_b^2 \} \tag{14} {T1,T2,...,Tn1}=argmax(lT<L){δb2}(14)
或者:
{ T 1 ∗ , T 2 ∗ , . . . , T n − 1 ∗ } = a r g m i n ( l ≤ T < L ) { δ w 2 } (15) \{T_1^*,T_2^*,...,T_{n-1}^*\} =argmin_{(l\leq T<L)} \{\delta_w^2 \} \tag{15} {T1,T2,...,Tn1}=argmin(lT<L){δw2}(15)

2.基于阿基米德优化优化的多阈值分割

由上述Otsu阈值分割法的原理可知,要得到最终的阈值,需要去寻找阈值,使得类间方差值最大或类内方差值最小。于是可以利用智能优化算法进行阈值的寻优,使得获得最佳阈值。

于是优化的适应度函数就是:
f u n { T 1 ∗ , T 2 ∗ , . . . , T n − 1 ∗ } = a r g m a x ( l ≤ T < L ) { δ b 2 } (14) fun\{T_1^*,T_2^*,...,T_{n-1}^*\} =argmax_{(l\leq T<L)} \{\delta_b^2 \} \tag{14} fun{T1,T2,...,Tn1}=argmax(lT<L){δb2}(14)
设置阈值分割的个数,寻优边界为0到255(因为图像的像素值范围为0-255),设置相应的阿基米德优化算法参数。
阿基米德优化算法原理请参考:https://blog.csdn.net/u011835903/article/details/119999874

3.算法结果:

以lena图像为例:

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

4.参考文献:

[1]袁小翠,黄志开,马永力,刘宝玲.Otsu阈值分割法特点及其应用分析[J].南昌工程学院学报,2019,38(01):85-90+97.

5.Matlab代码:

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
蛇群优化算法(Snake algorithm)是一种基于自然界蛇群觅食行为而提出的优化算法,主要用于解决连续优化问题。而Otsu算法是一种常见的图像阈值分割算法,可以将图像分成两部分,一部分是目标物体,另一部分是背景。 下面是使用MATLAB实现基于蛇群优化算法otsu图像阈值分割的步骤: 1. 读取图像并转化为灰度图像 ```matlab im = imread('image.jpg'); if size(im,3) == 3 im = rgb2gray(im); end ``` 2. 初始化蛇群,确定蛇的数量、迭代次数、位置和速度等参数 ```matlab num_snakes = 20; % 蛇的数量 max_iter = 100; % 最大迭代次数 w = 0.5; % 惯性因子 c1 = 2; % 个体认知因子 c2 = 2; % 社会经验因子 vmax = 5; % 最大速度 x = randi([0 1],num_snakes,numel(im)); % 初始化位置 v = rand(num_snakes,numel(im)); % 初始化速度 pbest = x; % 个体最优解 gbest = x(1,:); % 全局最优解 ``` 3. 计算适应度函数,根据图像灰度直方图计算每个阈值的类间方差 ```matlab counts = imhist(im); % 计算灰度直方图 p = counts/sum(counts); % 计算概率分布 q = cumsum(p); % 计算累积概率分布 mu = cumsum(p.*(1:numel(counts))'); % 计算灰度均值 muT = mu(end); % 计算总均值 sigma_b_squared = (muT*q - mu).^2 ./ (q.*(1-q)); % 计算类间方差 ``` 4. 使用蛇群优化算法搜索最优阈值 ```matlab for iter = 1:max_iter for i = 1:num_snakes v(i,:) = w*v(i,:) + c1*rand(1,numel(im)).*(pbest(i,:) - x(i,:)) ... + c2*rand(1,numel(im)).*(gbest - x(i,:)); % 更新速度 v(i,:) = min(max(v(i,:),-vmax),vmax); % 限制速度范围 x(i,:) = x(i,:) + v(i,:); % 更新位置 x(i,:) = min(max(round(x(i,:)),0),1); % 限制位置范围 fitness = sigma_b_squared(x(i,:)==1); % 计算适应度 if fitness > sigma_b_squared(pbest(i,:)==1) % 更新个体最优解 pbest(i,:) = x(i,:); end end [~,idx] = max(sigma_b_squared(pbest==1)); % 更新全局最优解 gbest = pbest(idx,:); end threshold = find(gbest,1,'last')/256; % 将二进制阈值转化为灰度值 ``` 5. 使用最优阈值对图像进行分割 ```matlab bw = im2bw(im,threshold); % 对图像进行二值化 imshow(bw); % 显示分割结果 ``` 完整代码如下: ```matlab im = imread('image.jpg'); if size(im,3) == 3 im = rgb2gray(im); end num_snakes = 20; max_iter = 100; w = 0.5; c1 = 2; c2 = 2; vmax = 5; x = randi([0 1],num_snakes,numel(im)); v = rand(num_snakes,numel(im)); pbest = x; gbest = x(1,:); counts = imhist(im); p = counts/sum(counts); q = cumsum(p); mu = cumsum(p.*(1:numel(counts))'); muT = mu(end); sigma_b_squared = (muT*q - mu).^2 ./ (q.*(1-q)); for iter = 1:max_iter for i = 1:num_snakes v(i,:) = w*v(i,:) + c1*rand(1,numel(im)).*(pbest(i,:) - x(i,:)) ... + c2*rand(1,numel(im)).*(gbest - x(i,:)); v(i,:) = min(max(v(i,:),-vmax),vmax); x(i,:) = x(i,:) + v(i,:); x(i,:) = min(max(round(x(i,:)),0),1); fitness = sigma_b_squared(x(i,:)==1); if fitness > sigma_b_squared(pbest(i,:)==1) pbest(i,:) = x(i,:); end end [~,idx] = max(sigma_b_squared(pbest==1)); gbest = pbest(idx,:); end threshold = find(gbest,1,'last')/256; bw = im2bw(im,threshold); imshow(bw); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能算法研学社(Jack旭)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值