Otsu 阈值分割法是日本学者 Otsu 提出来的。假设图像大小为 M × N M × N M×N,图像灰度级范围为 [ 0 , L - 1 ] [0,L - 1] [0,L-1], 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] [0,T]的像素点归为 C 0 C_0 C0 类,灰度级为 [ T + 1 , L - 1 ] [T + 1,L - 1] [T+1,L-1]的像素点为 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=0∑Tpi(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+1∑L−1pi=1−P0(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=0∑T(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+1∑L−1(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=1∑Lipi=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 2 ( T ) − u ) 2 + P 1 ( T ) ( u 1 2 ( T ) − u ) 2 (6) \delta_b^2(T)=P_0(T)(u_0^2(T) -u)^2+P_1(T)(u_1^2(T)-u)^2\tag{6} δb2(T)=P0(T)(u02(T)−u)2+P1(T)(u12(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
或者当类内方差达到最小时对应的阈值为最优分割阈值:
T ∗ = a r g m i n ( l ≤ T < L ) { δ w 2 ( T ) } (9) T^* = argmin_{(l\leq T
单阈值 Otsu 分割法可以扩展到多级阈值分割法。假设有 n − 1 n-1 n−1个阈值 T 1 , T 2 , . . . , T n − 1 T_1,T_2,...,T_{n-1} T1,T2,...,Tn−1 将图像分为 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={Tn−1+1,Tn−1+2,...,L−1},各类出现的概率分别表示为 P 0 , P 1 , . . . , P n − 1 P_0,P_1,...,P_{n-1} P0,P1,...,Pn−1,方差表示为 δ 0 2 , δ 1 2 , . . . , δ n − 1 2 \delta_0^2,\delta_1^2,...,\delta_{n-1}^2 δ02,δ12,...,δn−12,均值为 u 0 , u 1 , . . . , u n − 1 u_0,u_1,...,u_{n-1} u0,u1,...,un−1。
则有:
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=Tk∑Tk+1−1pi(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=Tk∑Tk+1−1ipi(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=Tk∑Tk+1−1(i−uk)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=0,1,…,n−1;T0=0,Tn=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=0∑n−1Piδ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
或者:
{ 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
由上述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
设置阈值分割的个数,寻优边界为0到255(因为图像的像素值范围为0-255),设置相应的灰狼算法参数(灰狼算法具体原理及代码参照我之前写灰狼算法原理:https://blog.csdn.net/u011835903/article/details/107716390)。
以lena图像为例:
单阈值结果:
3阈值结果:
4阈值结果:
[1]袁小翠,黄志开,马永力,刘宝玲.Otsu阈值分割法特点及其应用分析[J].南昌工程学院学报,2019,38(01):85-90+97.
https://mianbaoduo.com/o/bread/Z5uVkpw=
如果想利用其他的优化算法进行对比,可以参照我之前发布的智能优化算法代码(https://blog.csdn.net/u011835903/category_10226833.html)修改适应度函数,自己进行实验。