Otsu算法理解

本文介绍了Otsu算法,用于图像二值化的阈值选择。通过计算类间方差σB2来评估不同灰度级阈值的分割效果,目标是最大化类间方差以提高分割的可分性。Otsu算法通过对图像直方图的分析,找到最佳分割阈值k*,从而实现图像的最优分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Otsu算法理解

L:灰度级(0∼255为256个灰度级)L: 灰度级(0\sim255为256个灰度级)L:(0255256)
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+...+nL1=highwide
则当直方图归一化后有分量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=0L1pi=1,pi0(1)
然后我们假设我们有一个阈值T(k)=k,0<k<L−1T(k) = k,0<k<L-1T(k)=k,0<k<L1,将直方图分为C1C_1C1C2C_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=0kpi(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+1L1pi=1P1(k)(3)
此时分别计算C1C_1C1区和C2C_2C2区的平均灰度值m1m_1m1m2m_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=0kiP(i/C1)=i=0kiP(C1/i)P(i)/P(C1)=P1(k)1i=0kipi(4)
其中,P1(k)P_1(k)P1(k)由式(1)(1)(1)给出。第一行中的P(i/C1)P(i/C_1)P(i/C1)是值iiiC1C_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)
已知iiiC1C_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)1i=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+1L1iP(i/C2)=P2(k)1i=k+1L1ipi(5)
到k的累加均值则为
m(k)=∑i=0kipi(6) m(k)=\sum_{i=0}^{k}{ip_i}\tag{6} m(k)=i=0kipi(6)
全局均值,即整张图像的平均灰度
mG=∑i=0L−1ipi(7) m_G = \sum_{i=0}^{L-1}{ip_i}\tag{7} mG=i=0L1ipi(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=0L1(imG)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(m1mG)2+P2(m2mG)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(m1m2)2=P1(1P1)(mGP1m)2(13)
从上面的表达式中我们可以看出m1m_1m1m2m_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∗)=max⁡0≤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)=0kL1maxσ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)>k0,f(x,y)k(15)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值