全局阈值分割#
阈值分割是图像分割中最直接的方法。给定输入图像 I(x,y) 和阈值 T,输出二值图像 B(x,y) 定义为:
B(x,y)={10(前景),I(x,y)≥T(背景),I(x,y)<T选择什么样的 T 决定了分割的质量。如果 T 选在小波谷处,前景和背景就会被干净地分开;如果选在波峰上,两边都会被错误划分。人工调 T 需要反复尝试,Otsu 法给出了一个自动确定的准则。
Otsu 大津法#
Otsu(1979)的核心思想是:最佳阈值应该使前景和背景两类之间的差异最大,或者说使两类内部的差异最小。两个角度等价。
符号定义#
- L:灰度级数(通常 256),灰度值为 0,1,…,L−1
- ni:灰度值为 i 的像素数
- N=∑i=0L−1ni:总像素数
- pi=ni/N:灰度 i 出现的概率,∑pi=1
选定阈值 t 后,像素被分为两类:
- C0:灰度值 [0,t](背景)
- C1:灰度值 [t+1,L−1](前景)
两类概率与均值#
ω0(t)=i=0∑tpi,ω1(t)=i=t+1∑L−1pi=1−ω0μ0(t)=ω01i=0∑tipi,μ1(t)=ω11i=t+1∑L−1ipi全局灰度均值 μT 与两类的均值有以下关系:
μT=ω0μ0+ω1μ1类内方差与类间方差#
定义两类各自的方差(类内方差):
σ02(t)=ω01i=0∑t(i−μ0)2pi,σ12(t)=ω11i=t+1∑L−1(i−μ1)2pi总类内方差 σW2=ω0σ02+ω1σ12。类间方差定义为两类均值加权的方差:
σB2(t)=ω0(μ0−μT)2+ω1(μ1−μT)2可以证明总方差 σT2=σW2+σB2,即类内与类间之和为常数。最小化类内方差等价于最大化类间方差,通常使用后者,因为计算更简单。
Otsu 准则#
Otsu 选择使类间方差最大的阈值作为最优阈值:
t∗=0≤t<L−1argmaxσB2(t)展开 σB2 消去 μT 得到一个只依赖于 ω0,ω1,μ0,μ1 的形式:
σB2(t)=ω0(t)ω1(t)[μ0(t)−μ1(t)]2这个形式更直观:最优点在 ω0 和 ω1 平衡且两类均值相差最大的位置。
算法流程#
- 计算归一化直方图 pi。
- 遍历 t=0,1,…,L−2:
- 计算 ω0(t),μ0(t),μ1(t)(可用累积直方图递推加速)。
- 计算 σB2(t)。
- 取 σB2 最大的 t 作为分割阈值。
- 输出 B(x,y)=I(x,y)≥t∗。
Otsu 可以在 O(L) 时间内完成,非常高效。
局限与扩展#
Otsu 假设直方图呈双峰分布。当直方图为单峰或平坦时,类间方差最大值对应的阈值可能没有实际意义。
- 多阈值 Otsu:将阈值扩展为 (t1,t2,…,tK−1),最大化 K 类的类间方差。计算量随 K 指数增长,实际常用 K=2 或 3。
- Triangle 法:在直方图上从最高峰到最远端画一条线,取距离该线最远的直方图点作为阈值。适用于单峰直方图场景(如 MRI 影像)。