【图像处理】 最大类间方差算法(Otus算法)

【图像处理】 最大类间方差算法(Otus算法)

Otsu算法的原理

最大类间方差法(Otus算法),可以自动的选取二值化的阈值。
它的原理如下:

  1. 假设一副灰度图有 L L L个灰度级,即 [ 1 , 2 , 3 , . . . L ] [1,2,3,...L] [1,2,3,...L] ,灰度级为 i i i的像素点有 n i n_i ni个,那么总的像素点个数 N = n 1 + n 2 + . . . + n l N = n_1 + n_2 +...+n_l N=n1+n2+...+nl。那么一个像素点灰度级为 i i i的概率为: p i = n i N ( p i > 0 , ∑ i = 1 L p i = 1 ) p_i = \dfrac{n_i}{N} (p_i>0,\displaystyle\sum_{i = 1}^{L}p_i = 1) pi=Nni(pi>0i=1Lpi=1)
  2. 现在假设通过一个灰度级 k k k将这些像素点划分为两类 C 0 C_0 C0 C 1 C_1 C1 [ 1 , 2 , . . . k ] [1,2,...k] [1,2,...k] C 0 C_0 C0,二值化为 0 0 0 [ k + 1 , k + 2 , . . . L ] [k+1,k+2,...L] [k+1,k+2,...L] C 1 C_1 C1,二值化为 255 255 255。Otsu算法就是自动的找到这个算法认为的最优的阈值 k k k
  3. C 0 C_0 C0 C 1 C_1 C1两类,每一类出现的概率以及各类的平均灰度级分别由下面的式子给出:
    ω 0 = P r ( C 0 ) = C 0 类出现的概率 = ∑ i = 1 k p i = ω ( k ) \omega_0=P_r(C_0)=C_0类出现的概率=\displaystyle\sum_{i = 1}^{k}p_i = \omega(k) ω0=Pr(C0)=C0类出现的概率=i=1kpi=ω(k)
    ω 1 = P r ( C 1 ) = C 1 类出现的概率 = ∑ i = k + 1 L p i = 1 − ω ( k ) \omega_1=P_r(C_1)=C_1类出现的概率=\displaystyle\sum_{i = k+1}^{L}p_i =1- \omega(k) ω1=Pr(C1)=C1类出现的概率=i=k+1Lpi=1ω(k)
    μ 0 = ∑ i = 1 k i ∗ P r ( i ∣ C 0 ) = ∑ i = 1 k i ∗ p i ω 0 = C 0 类的平均灰度级 = μ ( k ) ω ( k ) \mu_0=\displaystyle\sum_{i = 1}^{k}i*P_r( i|C_0)=\displaystyle\sum_{i = 1}^{k}i* \dfrac{p_i}{\omega_0}=C_0类的平均灰度级=\dfrac{\mu(k)}{\omega(k)} μ0=i=1kiPr(iC0)=i=1kiω0pi=C0类的平均灰度级=ω(k)μ(k)
    μ 1 = ∑ i = k + 1 L i ∗ P r ( i ∣ C 1 ) = ∑ i = k + 1 L i ∗ p i ω 1 = C 1 类的平均灰度级 = μ T − μ ( k ) 1 − ω ( k ) \mu_1=\displaystyle\sum_{i = k+1}^{L}i*P_r( i|C_1)=\displaystyle\sum_{i = k+1}^{L}i* \dfrac{p_i}{\omega_1}=C_1类的平均灰度级=\dfrac{\mu_T-\mu(k)}{1-\omega(k)} μ1=i=k+1LiPr(iC1)=i=k+1Liω1pi=C1类的平均灰度级=1ω(k)μTμ(k)
    其中:
    μ ( k ) = ∑ i = 1 k i ∗ p i \mu(k)=\displaystyle\sum_{i = 1}^{k}i*p_i μ(k)=i=1kipi,是 1 到 k 1到k 1k的平均灰度级。
    μ T = ∑ i = 1 L i ∗ p i \mu_T=\displaystyle\sum_{i = 1}^{L}i*p_i μT=i=1Lipi,是整幅图的平均灰度级。
  4. 容易验证:
    ω 0 μ 0 + ω 1 μ 1 = μ T \omega_0\mu_0+\omega_1\mu_1=\mu_T ω0μ0+ω1μ1=μT ω 0 + ω 1 = 1 \omega_0+\omega_1=1 ω0+ω1=1
  5. C 0 C_0 C0 C 1 C_1 C1各自的类内方差如下:
    σ 0 2 = ∑ i = 1 k ( i − μ 0 ) 2 P r ( i ∣ C 0 ) = ∑ i = 1 k ( i − μ 0 ) 2 p i ω 0 \sigma_0^2=\displaystyle\sum_{i = 1}^{k}(i-\mu_0)^2P_r(i|C_0)=\displaystyle\sum_{i = 1}^{k}(i-\mu_0)^2\dfrac{p_i}{\omega_0} σ02=i=1k(iμ0)2Pr(iC0)=i=1k(iμ0)2ω0pi
    σ 1 2 = ∑ i = k + 1 L ( i − μ 1 ) 2 P r ( i ∣ C 1 ) = ∑ i = k + 1 L ( i − μ 1 ) 2 p i ω 1 \sigma_1^2=\displaystyle\sum_{i = k+1}^{L}(i-\mu_1)^2P_r(i|C_1)=\displaystyle\sum_{i = k+1}^{L}(i-\mu_1)^2\dfrac{p_i}{\omega_1} σ12=i=k+1L(iμ1)2Pr(iC1)=i=k+1L(iμ1)2ω1pi
  6. 所以整幅图片的类内方差,两个类的类间方差,图片的总方差,分别如下:
    σ W 2 = 整幅图片的类内方差 = ω 0 σ 0 2 + ω 1 σ 1 2 \sigma_W^2=整幅图片的类内方差=\omega_0\sigma_0^2+\omega_1\sigma_1^2 σW2=整幅图片的类内方差=ω0σ02+ω1σ12
    σ B 2 = 两个类的类间方差 = ω 0 ( μ 0 − μ T ) 2 + ω 1 ( μ 1 − μ T ) 2 \sigma_B^2=两个类的类间方差=\omega_0(\mu_0-\mu_T)^2+\omega_1(\mu_1-\mu_T)^2 σB2=两个类的类间方差=ω0(μ0μT)2+ω1(μ1μT)2
    跟据4.中两个等式,可以将 σ B 2 \sigma_B^2 σB2化简为 ω 0 ω 1 ( μ 1 − μ 0 ) 2 \omega_0\omega_1(\mu_1-\mu_0)^2 ω0ω1(μ1μ0)2
    σ T 2 = 图片的总方差 = ∑ i = 1 L ( i − μ T ) 2 p i \sigma_T^2=图片的总方差=\displaystyle\sum_{i = 1}^{L}(i-\mu_T)^2p_i σT2=图片的总方差=i=1L(iμT)2pi
  7. 因为 σ T 2 \sigma_T^2 σT2 k k k无关。 σ W 2 \sigma_W^2 σW2是二阶统计(类方差),而 σ B 2 \sigma_B^2 σB2是一阶统计(类均值)。所以 σ B 2 \sigma_B^2 σB2,即类间方差是最简单的判断 k k k选取好坏的评判标准。
  8. 所以Otus算法遍历 k k k,最后选取使 σ B 2 \sigma_B^2 σB2最大的 k k k作为阈值。

opencv中的Otsu算法

_, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 在python opencv的二值化函数cv.threshold中,通过最后的参数选择使用Otus算法
# 第一个输入是输入的灰度图像
# 第二个参数是阈值,因为这个由算法自动选择,所以填0
# 第三个参数是最大值,即大于阈值的像素点都等于这个值,小于阈值的都是0
# 第一个返回值就是所取的阈值,如果不用Otus算法,第一个返回值也是我们选取的阈值
# 第二个返回值是二值图

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
如果我的文章对您有帮助,转载请注明出处。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Observed OTUs方法是一种用于估计物种丰富度的方法。它通过计算样本中观察到的不同物种的数量来衡量物种的多样性。在Alpha多样性分析中,使用Observed OTUs方法可以得到一个物种丰富度的估计值,即有多少不同的物种存在于样本中。\[1\] 这种方法在微生物组学研究中被广泛使用,特别是在分析细菌群落的多样性时。通过使用Observed OTUs方法,研究人员可以了解样本中存在的不同细菌物种的数量,从而揭示细菌群落的多样性水平。\[3\] 需要注意的是,Observed OTUs方法只提供了物种的数量信息,而没有提供物种的丰度信息。因此,它不能反映不同物种在样本中的相对丰度。为了综合考虑物种数量和丰度两个层面的结果,研究人员常常使用其他指标,如Shannon指数和Chao1指数。\[2\] 总之,Observed OTUs方法是一种用于估计物种丰富度的方法,适用于微生物组学研究中的多样性分析。它可以提供关于样本中存在的不同物种数量的信息,帮助研究人员了解细菌群落的多样性水平。 #### 引用[.reference_title] - *1* [QIIME 2 2020.8 版本更新学习](https://blog.csdn.net/zd200572/article/details/108419747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [扩增子图表解读1箱线图:Alpha多样性,老板再也不操心的我文献阅读了](https://blog.csdn.net/woodcorpse/article/details/73810572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值