youcans 的 OpenCV 例程200篇165.多阈值 OTSU 处理方法
Posted 小白YouCans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了youcans 的 OpenCV 例程200篇165.多阈值 OTSU 处理方法相关的知识,希望对你有一定的参考价值。
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中
欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中
【youcans 的 OpenCV 例程200篇】165.多阈值 OTSU 处理方法
3.5 多阈值处理方法
OTSU 方法使用最大化类间方差(intra-class variance)作为评价准则,基于对图像直方图的计算,可以给出类间最优分离的最优阈值。
OTSU 方法可以扩展到任意数量的阈值。假设有 K 个分类
c
1
,
c
2
,
.
.
.
,
c
k
c_1, c_2,...,c_k
c1,c2,...,ck 时,可以定义类间方差为:
σ
B
2
=
∑
k
=
1
K
P
k
(
m
k
−
m
G
)
2
\\sigma^2_B = \\sum^K_k=1 P_k(m_k - m_G)^2
σB2=k=1∑KPk(mk−mG)2
常用地,考虑由 3个灰度区间组成的 3个类,可以由 2个阈值分割,定义类间方差为:
σ
B
2
=
P
1
(
m
1
−
m
G
)
2
+
P
2
(
m
2
−
m
G
)
2
+
P
3
(
m
3
−
m
G
)
2
P
1
+
P
2
+
P
3
=
1
P
1
∗
m
1
+
P
2
∗
m
2
+
P
3
∗
m
3
=
m
G
P
1
=
∑
i
=
0
k
1
p
i
,
P
2
=
∑
i
=
k
1
+
1
k
2
p
i
,
P
3
=
∑
i
=
k
2
+
1
L
−
1
p
i
m
1
=
∑
i
=
0
k
1
i
∗
p
i
/
P
1
,
m
2
=
∑
i
=
k
1
+
1
k
2
i
∗
p
i
/
P
2
,
m
3
=
∑
i
=
k
2
+
1
L
−
1
i
∗
p
i
/
P
3
,
\\sigma^2_B = P_1(m_1 - m_G)^2 + P_2(m_2 - m_G)^2 + P_3(m_3 - m_G)^2 \\\\ P_1 + P_2 + P_3 = 1\\\\ P_1*m_1 + P_2*m_2 + P_3*m_3 = m_G \\\\ P_1 = \\sum^k_1_i=0 p_i ,\\ P_2 = \\sum^k_2_i=k_1+1 p_i ,\\ P_3 = \\sum^L-1_i=k_2+1 p_i \\\\ m_1 = \\sum^k_1_i=0 i*p_i /P_1 ,\\ m_2 = \\sum^k_2_i=k_1+1 i*p_i /P_2 ,\\ m_3 = \\sum^L-1_i=k_2+1 i*p_i /P_3 ,\\\\
σB2=P1(m1−mG)2+P2(m2−mG)2+P3(m3−mG)2P1+P2+P3=1P1∗m1+P2∗m2+P3∗m3=mGP1=i=0∑k1pi, P2=i=k1+1∑k2pi, P3=i=k2+1∑L−1pim1=i=0∑k1i∗pi/P1, m2=i=k1+1∑k2i∗pi/P2, m3=i=k2+1∑L−1i∗pi/P3,
使类间方差 ICV 最大化的灰度值
k
1
,
k
2
k_1, k_2
k1,k2 就是最优阈值。
阈值处理后的图像由下式给出:
g
(
x
,
y
)
=
a
,
f
(
x
,
y
)
≤
k
1
∗
b
,
k
1
∗
≤
f
(
x
,
y
)
≤
k
2
∗
c
,
f
(
x
,
y
)
≥
k
2
∗
g(x,y) = \\begincases a, & f(x,y) \\le k_1^* \\\\ b, & k_1^* \\le f(x,y) \\le k_2^* \\\\ c, & f(x,y) \\ge k_2^* \\\\ \\endcases
g(x,y)=⎩⎪⎨youcans 的 OpenCV 例程200篇182.基于形态学梯度的分水岭算法
youcans 的 OpenCV 例程200篇179.图像分割之 GrabCut 图割法(掩模图像)