755 字
4 分钟
图像分割:阈值分割与Otsu大津法
2026-06-30
无标签

全局阈值分割#

阈值分割是图像分割中最直接的方法。给定输入图像 I(x,y)I(x,y) 和阈值 TT,输出二值图像 B(x,y)B(x,y) 定义为:

B(x,y)={1(前景),I(x,y)T0(背景),I(x,y)<TB(x,y) = \begin{cases} 1 & (\text{前景}), \quad I(x,y) \geq T \\ 0 & (\text{背景}), \quad I(x,y) < T \end{cases}

选择什么样的 TT 决定了分割的质量。如果 TT 选在小波谷处,前景和背景就会被干净地分开;如果选在波峰上,两边都会被错误划分。人工调 TT 需要反复尝试,Otsu 法给出了一个自动确定的准则。

Otsu 大津法#

Otsu(1979)的核心思想是:最佳阈值应该使前景和背景两类之间的差异最大,或者说使两类内部的差异最小。两个角度等价。

符号定义#

  • LL:灰度级数(通常 256),灰度值为 0,1,,L10, 1, \dots, L-1
  • nin_i:灰度值为 ii 的像素数
  • N=i=0L1niN = \sum_{i=0}^{L-1} n_i:总像素数
  • pi=ni/Np_i = n_i / N:灰度 ii 出现的概率,pi=1\sum p_i = 1

选定阈值 tt 后,像素被分为两类:

  • C0C_0:灰度值 [0,t][0, t](背景)
  • C1C_1:灰度值 [t+1,L1][t+1, L-1](前景)

两类概率与均值#

ω0(t)=i=0tpi,ω1(t)=i=t+1L1pi=1ω0\omega_0(t) = \sum_{i=0}^{t} p_i,\quad \omega_1(t) = \sum_{i=t+1}^{L-1} p_i = 1 - \omega_0μ0(t)=1ω0i=0tipi,μ1(t)=1ω1i=t+1L1ipi\mu_0(t) = \frac{1}{\omega_0} \sum_{i=0}^{t} i p_i,\quad \mu_1(t) = \frac{1}{\omega_1} \sum_{i=t+1}^{L-1} i p_i

全局灰度均值 μT\mu_T 与两类的均值有以下关系:

μT=ω0μ0+ω1μ1\mu_T = \omega_0 \mu_0 + \omega_1 \mu_1

类内方差与类间方差#

定义两类各自的方差(类内方差):

σ02(t)=1ω0i=0t(iμ0)2pi,σ12(t)=1ω1i=t+1L1(iμ1)2pi\sigma_0^2(t) = \frac{1}{\omega_0} \sum_{i=0}^{t} (i - \mu_0)^2 p_i,\quad \sigma_1^2(t) = \frac{1}{\omega_1} \sum_{i=t+1}^{L-1} (i - \mu_1)^2 p_i

总类内方差 σW2=ω0σ02+ω1σ12\sigma_W^2 = \omega_0 \sigma_0^2 + \omega_1 \sigma_1^2。类间方差定义为两类均值加权的方差:

σB2(t)=ω0(μ0μT)2+ω1(μ1μT)2\sigma_B^2(t) = \omega_0 (\mu_0 - \mu_T)^2 + \omega_1 (\mu_1 - \mu_T)^2

可以证明总方差 σT2=σW2+σB2\sigma_T^2 = \sigma_W^2 + \sigma_B^2,即类内与类间之和为常数。最小化类内方差等价于最大化类间方差,通常使用后者,因为计算更简单。

Otsu 准则#

Otsu 选择使类间方差最大的阈值作为最优阈值:

t=arg max0t<L1σB2(t)t^* = \argmax_{0 \leq t < L-1} \sigma_B^2(t)

展开 σB2\sigma_B^2 消去 μT\mu_T 得到一个只依赖于 ω0,ω1,μ0,μ1\omega_0, \omega_1, \mu_0, \mu_1 的形式:

σB2(t)=ω0(t)ω1(t)[μ0(t)μ1(t)]2\sigma_B^2(t) = \omega_0(t) \omega_1(t) \big[\mu_0(t) - \mu_1(t)\big]^2

这个形式更直观:最优点在 ω0\omega_0ω1\omega_1 平衡且两类均值相差最大的位置。

算法流程#

  1. 计算归一化直方图 pip_i
  2. 遍历 t=0,1,,L2t = 0, 1, \dots, L-2
    • 计算 ω0(t),μ0(t),μ1(t)\omega_0(t), \mu_0(t), \mu_1(t)(可用累积直方图递推加速)。
    • 计算 σB2(t)\sigma_B^2(t)
  3. σB2\sigma_B^2 最大的 tt 作为分割阈值。
  4. 输出 B(x,y)=I(x,y)tB(x,y) = I(x,y) \geq t^*

Otsu 可以在 O(L)O(L) 时间内完成,非常高效。

局限与扩展#

Otsu 假设直方图呈双峰分布。当直方图为单峰或平坦时,类间方差最大值对应的阈值可能没有实际意义。

  • 多阈值 Otsu:将阈值扩展为 (t1,t2,,tK1)(t_1, t_2, \dots, t_{K-1}),最大化 KK 类的类间方差。计算量随 KK 指数增长,实际常用 K=2K=233
  • Triangle 法:在直方图上从最高峰到最远端画一条线,取距离该线最远的直方图点作为阈值。适用于单峰直方图场景(如 MRI 影像)。
图像分割:阈值分割与Otsu大津法
https://biscuit0613.github.io/posts/cv/cv-seg-threshold/
作者
Biscuit
发布于
2026-06-30
许可协议
CC BY-NC-SA 4.0
图像分割:水平集与快速行进法
图像分割:K均值聚类分割