Thresholding

**阈值化(thresholding)**把一幅灰度图像转换为逐像素的二元判定:保留或舍弃,前景或背景,边缘或非边缘。尽管形式简单,它却贯穿于整个视觉流水线——既作为显式的图像二值化,也隐式地存在于比较强度或分数与某个截断值的检测器和描述子内部。

全局阈值化

最简单的形式对整幅图像应用一个阈值 TT

B(x,y)={1if I(x,y)>T0otherwiseB(x, y) = \begin{cases} 1 & \text{if } I(x, y) > T \\ 0 & \text{otherwise} \end{cases}

手动选择 TT 并不可靠,因此Otsu 方法会根据强度直方图自动选取阈值:它选取能使两个结果像素类别的**类间方差(between-class variance)**最大化的 TT

σ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,ω1\omega_0, \omega_1 分别是低于/高于 TT 的像素比例,μ0,μ1\mu_0, \mu_1 是它们各自的平均强度。最大化类间方差等价于最小化类内方差——也就是能最好地把直方图分成两个峰值的阈值。

自适应(局部)阈值化

单一的全局 TT 在照明不均匀(阴影、渐晕)的情况下会失效。自适应阈值化根据局部邻域为每个像素计算一个阈值:

T(x,y)=mW(x,y)CT(x, y) = m_W(x, y) - C

其中 mWm_W 是像素周围窗口 WW 内的(普通或高斯加权)均值,CC 是一个较小的常数。然后将每个像素与其自身的局部阈值进行比较。基准标记检测器(ArUco、AprilTag)在提取黑白标记网格之前,正是通过这种方式可靠地对图像进行二值化的。

滞后阈值化(Hysteresis thresholding)

Canny 边缘检测使用两个阈值。梯度幅值高于 ThighT_{\text{high}} 的像素被接受为强边缘;梯度幅值介于 TlowT_{\text{low}}ThighT_{\text{high}} 之间的像素只有在与某个强边缘相连时才会被保留。这样既能保留长而弱的边缘段,又能剔除孤立的噪声响应——每当单一截断值要么把良好的结构切碎、要么放入太多噪声时,这个技巧都值得记住。

特征流水线中隐含的阈值

阈值化被内嵌在大多数特征相关的机制中:

对SLAM的意义

SLAM系统中充满了各种阈值,掌握选取这些阈值的标准技巧,正是稳健系统与脆弱系统的区别所在。自适应阈值化能让基于标记和基于特征的流水线在光照变化下持续工作;FAST 阈值决定了下游每个模块所依赖特征的密度和稳定性;滞后式的双阈值逻辑可以推广到许多接受/拒绝的判定中(例如匹配过滤)。当一个SLAM前端在从室内进入室外时失效,一个硬编码的全局阈值往往就是罪魁祸首。

相关条目