虽然很早就看过这本绿皮书,但是当时是刚入门的小菜鸟,根本就不知道这就是大名鼎鼎的大津法,当时只是觉得Otsu好奇怪的英文名字。
现在就来重新看看这个所谓的大津法:
n
i
n_i
ni表示灰度级为i的像素数。图像中的像素总数MN为
M
N
=
n
0
+
n
1
+
.
.
.
+
n
L
−
1
MN=n_0+n_1+...+n_{L-1}
MN=n0+n1+...+nL−1
归一化的直方图具有分量
p
i
=
n
i
/
M
N
p_i=n_i/MN
pi=ni/MN.
我们有公式(1):
我们选择一个阈值T(k)=k,0<k<L-1,并使用它把输入图像阈值化处理为两类C1和C2,其中C1由图像中灰度值范围在[0,k]内的所有像素组成,C2类似C1.
像素被分到类C1中的概率
p
1
(
k
)
p_1(k)
p1(k)由如下的累计和给出:
同样
那么分配到C1的像素的平均灰度值为:
第一行的
p
(
i
/
C
1
)
p(i/C_1)
p(i/C1)表示i已经被分配到C1的前提下,i占C1中所有像素的概率,第二行为简单的贝叶斯变换,因为i已经被分到了C1中,所以
P
(
C
1
/
i
)
=
1
P(C_1/i)=1
P(C1/i)=1,所以得到第三行的结果,其实第三行的物理意义很容易理解,即0到k的像素占总体像素的平均值除以C1占总体像素的概率,等于C1中所有像素的平均值。
同理有:
而整个图像的平均灰度由下式给出:
如果上面的公式都是正确的我们有:
为了评价级别k处的阈值“质量”我们使用归一化的无量纲矩阵:
其中
σ
G
2
\sigma^2_G
σG2是全局方差:
σ
B
2
\sigma^2_B
σB2我们定义为类间方差,它定义为
其中
σ
G
2
\sigma^2_G
σG2是常数,所以我们只需要使得
σ
B
2
\sigma^2_B
σB2最大即可,而:
所以我们只需要使
m
1
−
m
2
m_1-m_2
m1−m2最大即可,当有多个值使得
m
1
−
m
2
m_1-m_2
m1−m2都最大时,我们选择其均值为最佳的分割阈值。
Otsu算法小结如下:
1.计算输入图像的归一化直方图,使用
p
i
p_i
pii=0,1,2,…,L-1表示该直方图的各个分量。
2.对于k=0,1,2,…L-1,计算累积和
P
1
(
k
)
P_1(k)
P1(k).
3.对于k=0,1,2…L-1,计算累积均值m(k).
4.计算全局灰度均值
m
G
m_G
mG。
5.对于K=0,1,2,…,L-1,计算类间方差
σ
B
2
\sigma^2_B
σB2。
6.得到Otsu阈值
k
∗
k*
k∗,即使得
σ
B
2
\sigma^2_B
σB2最大的k值。如果最大值不唯一,用相应检测到的各个最大值k的平均值得到
k
∗
k*
k∗。
7.在k=k*处计算可分性度量.