Otsu算法理解
L:灰度级(0∼255为256个灰度级)L: 灰度级(0\sim255为256个灰度级)L:灰度级(0∼255为256个灰度级)
ni:表示灰度级为i的像素个数n_i: 表示灰度级为i的像素个数ni:表示灰度级为i的像素个数
MN:图像的像素MN:图像的像素MN:图像的像素,即
MN=n0+n1+n2+...+nL−1=high∗wide
\begin{aligned}
MN&=n_0+n_1+n_2+...+n_{L-1} \\
&=high*wide
\end{aligned}
MN=n0+n1+n2+...+nL−1=high∗wide
则当直方图归一化后有分量pi=ni/MNp_i=n_i/MNpi=ni/MN即每个灰度级在全图中所占的比重,则有
∑i=0L−1pi=1,pi≥0(1)
\sum_{i=0}^{L-1}p_i = 1,\quad p_i\geq 0 \tag{1}
i=0∑L−1pi=1,pi≥0(1)
然后我们假设我们有一个阈值T(k)=k,0<k<L−1T(k) = k,0<k<L-1T(k)=k,0<k<L−1,将直方图分为C1C_1C1,C2C_2C2两个部分,则某一像素在C1C_1C1中的概率P1(k)P_1(k)P1(k)如下
P1(k)=∑i=0kpi(2)
P_1(k)=\sum_{i=0}^{k}{p_i}\tag{2}
P1(k)=i=0∑kpi(2)
同样的在C2C_2C2中的概率P2(k)P_2(k)P2(k)为
P2(k)=∑i=k+1L−1pi=1−P1(k)(3)
P_2(k)=\sum_{i=k+1}^{L-1}{p_i}=1-P_1(k)\tag{3}
P2(k)=i=k+1∑L−1pi=1−P1(k)(3)
此时分别计算C1C_1C1区和C2C_2C2区的平均灰度值m1m_1m1、m2m_2m2
m1(k)=∑i=0kiP(i/C1)=∑i=0kiP(C1/i)P(i)/P(C1)=1P1(k)∑i=0kipi(4)
\begin{aligned}
m_1(k)&=\sum_{i=0}^{k}iP(i/C_1) \\
&=\sum_{i=0}^{k}iP(C_1/i)P(i)/P(C_1) \tag{4} \\
&=\frac{1}{P_1(k)}\sum_{i=0}^{k}{ip_i}
\end{aligned}
m1(k)=i=0∑kiP(i/C1)=i=0∑kiP(C1/i)P(i)/P(C1)=P1(k)1i=0∑kipi(4)
其中,P1(k)P_1(k)P1(k)由式(1)(1)(1)给出。第一行中的P(i/C1)P(i/C_1)P(i/C1)是值iii在C1C_1C1中的概率,则通过贝叶斯公式
P(i/C1)=P(C1/i)P(i)/P(C1)
P(i/C_1) = P(C_1/i)P(i)/P(C_1)
P(i/C1)=P(C1/i)P(i)/P(C1)
已知iii在C1C_1C1内,所以P(C1/i)=1P(C_1/i)=1P(C1/i)=1,由(2)(2)(2)知P1(k)=P(C1)P_1(k)=P(C_1)P1(k)=P(C1)。则m1(k)=1P1(k)∑i=0kipim_1(k)=\frac{1}{P_1(k)}\sum_{i=0}^{k}{ip_i}m1(k)=P1(k)1∑i=0kipi
同理可得C2C_2C2中的m2m2m2
m2(k)=∑i=k+1L−1iP(i/C2)=1P2(k)∑i=k+1L−1ipi(5)
\begin{aligned}
m_2(k) &= \sum_{i=k+1}^{L-1}{iP(i/C_2)} \\
&=\frac{1}{P_2(k)}{\sum_{i=k+1}^{L-1}{ip_i}} \tag{5}
\end{aligned}
m2(k)=i=k+1∑L−1iP(i/C2)=P2(k)1i=k+1∑L−1ipi(5)
到k的累加均值则为
m(k)=∑i=0kipi(6)
m(k)=\sum_{i=0}^{k}{ip_i}\tag{6}
m(k)=i=0∑kipi(6)
全局均值,即整张图像的平均灰度
mG=∑i=0L−1ipi(7)
m_G = \sum_{i=0}^{L-1}{ip_i}\tag{7}
mG=i=0∑L−1ipi(7)
则得到
P1m1+P2m2=mG(8)
{P_1}{m_1}+{P_2}{m_2}={m_G}\tag{8}
P1m1+P2m2=mG(8)
和
P1+P2=1(9)
{P_1}+{P_2}={1}\tag{9}
P1+P2=1(9)
那么接下来该如何说明这个阈值kkk的效果呢,我们使用了归一化的无量纲矩阵(我也不知道这个名词是啥意思,但是看下去,你能懂它的内容):
η=σB2σG2(10)
\eta = \frac{\sigma_B^2}{\sigma_G^2}\tag{10}
η=σG2σB2(10)
其中,σG2\sigma_G^2σG2是全局方差[即图像中所有像素的灰度方差,就是每个像素和均值对比]:
σG2=∑i=0L−1(i−mG)2pi(11)
{\sigma_G^2}=\sum_{i=0}^{L-1}{(i-mG)^2}{p_i}\tag{11}
σG2=i=0∑L−1(i−mG)2pi(11)
σB2\sigma_B^2σB2是类间方差,定义为
σB2=P1(m1−mG)2+P2(m2−mG)2(12)
\sigma_B^2 = {P_1(m_1-m_G)^2}+{P_2(m_2-m_G)^2}\tag{12}
σB2=P1(m1−mG)2+P2(m2−mG)2(12)
将(8)(8)(8)和(9)(9)(9)代入该表达式(12)(12)(12),接着再将(3)(3)(3)和(7)(7)(7)代入,可写为:
σB2=P1P2(m1−m2)2=(mGP1−m)2P1(1−P1)(13)
\begin{aligned}
{\sigma_B^2} &= {P_1}{P_2}{(m_1-m_2)^2} \\
&=\frac{({m_G}{P_1}-m)^2}{P_1({1-P_1})}\tag{13}
\end{aligned}
σB2=P1P2(m1−m2)2=P1(1−P1)(mGP1−m)2(13)
从上面的表达式中我们可以看出m1m_1m1和m2m_2m2彼此隔得越远,σB2\sigma_B^2σB2越大,这表明类间方差是类之间的可分性度量[就是看两个类之间差的多不多],
然后通过(11)(11)(11)我们知道σG2\sigma_G^2σG2在一张图中是固定的,即为一个常数,若我们想要质量η\etaη好的话就要最大化σB2\sigma_B^2σB2,即在阈值集合kkk中找到一个k∗k^*k∗使得
σB2(k∗)=max0≤k≤L−1σB2(k)(14)\sigma_B^2(k^*)=\max\limits_{0\leq{k}\leq{L-1}}{\sigma_B^2}(k) \tag{14}
σB2(k∗)=0≤k≤L−1maxσB2(k)(14)
找到k∗k^*k∗后便可对图像进行分割:
g(x,y)={1,f(x,y)>k∗0,f(x,y)≤k∗(15)
g(x,y)=
\begin{cases}
&1,\quad f(x,y)>k^*\\
&0,\quad f(x,y)\leq k^*
\end{cases}\tag{15}
g(x,y)={1,f(x,y)>k∗0,f(x,y)≤k∗(15)