阈值的选择可以认为是在灰度 PDF 中寻找将两个峰值(能够分别代表前景和背景)区分开来的位置。
也可以理解成一个一维数据的二分类问题。
阈值化技术的缺陷与难点:
即使如此,根据统一性测量的原则进行图像阈值化是有其应用意义的,尤其是在工业计数或监测等场景下,对环境和光照有完全的把握。
阈值化的技巧:
Otsu, N. A threshold selection method from gray-level histogram. IEEE Transactions on Systems, Man and Cybernetics, 9, 62-66. 1979 https://u-aizu.ac.jp/course/bmclass/documents/otsu1979.pdf
二类别的类内方差(within-class variance):$\sigma_w^2=\omega_0\sigma_0^2 + \omega_1\sigma_1^2$
二类别的类间方差(between-class variance, BCV):$\sigma_b^2=\omega_0(\mu - \mu_0)^2 + \omega_1(\mu - \mu_1)^2$
借助下图可以理解上述两个概念公式的意义。类内方差是指各类别内部方差 $\sigma_0^2, \sigma_1^2$ 的加权和(权重即为类别占整体样本的比例);类间方差则是各类别均值 $\mu_0, \mu_1$ 偏离整体均值 $\mu$ 的程度($(\mu - \mu_0)^2, (\mu - \mu_1)^2$)的加权和。
另有 $\sigma_w^2 + \sigma_b^2= \sigma^2$,证略。
根据以上定义,一种最简单的算法伪代码如下:
统计图像中各灰度值出现的频次 n[0], n[1], ... n[L-1]
统计样本整体的均值 mu(公式1)
枚举每个阈值 k,从 1 到 L-1:
统计前类别的均值 mu0(前类别的灰度集合是 i 从 0 到 k-1)(公式2)
统计后类别的均值 mu1(后类别的灰度集合是 i 从 k 到 L-1)(公式2)
计算 sigma2_b(公式3)
维持类间方差的当前最大值 sigma2_b_max 和对应的阈值 k_maxi
求得让类间方差最大化的阈值 k_maxi
涉及的公式:
通过频次数据 $n_i$ 统计均值 $\mu$:
$$ \mu = \frac{\sum_{i=0}^{L-1} n_i \cdot i}{N} $$
通过频次数据 $n_i$ 统计前后类别的均值 $\mu_0, \mu_1$:
$$ \mu_0 = \frac{\sum_{i=0}^{k-1} n_i \cdot i}{N_0} = \frac{\sum_{i=0}^{k-1} n_i \cdot i}{\omega_0N} \ \ \ \ \ \left( \omega_0=\frac{\sum_{i=0}^{k-1} n_i }{N} \right) $$
$$ \mu_1 = \frac{\sum_{i=k}^{L-1} n_i \cdot i}{N_1} = \frac{\sum_{i=k}^{L-1} n_i \cdot i}{\omega_1N} \ \ \ \ \ \left( \omega_1=\frac{\sum_{i=k}^{L-1} n_i }{N} \right) $$
二类别的类间方差公式:
$$ \sigma_b^2=\omega_0(\mu - \mu_0)^2 + \omega_1(\mu - \mu_1)^2 $$