4. 图像二值化原理:全局阈值、自适应阈值(Otsu)与巡线影响

在机器人巡线任务中,摄像头采集到的原始图像通常是包含丰富灰度层次或彩色信息的RGB图像。然而,对于巡线机器人而言,真正需要关注的往往只是“地面背景”与“引导线”之间的边界。图像二值化正是将这种多值图像转化为纯黑(0)与纯白(255)二值图像的核心预处理步骤。本章将深入剖析全局阈值、自适应阈值(Otsu)等二值化算法的数学原理与工程实现,并重点讨论阈值选择如何直接影响巡线系统的鲁棒性与实时性。

图像二值化与巡线决策链路 原始灰度图像 8bit 0~255 光照不均/阴影 阈值方法 ① 全局固定阈值 ② Otsu自适应 ③ 局部动态阈值 二值图像 0 或 255 黑白分明 巡线决策 质心提取 偏差计算 PID电机控制 光照变化 / 阈值反馈调整 阈值选择对巡线的影响 • 阈值过高 → 引导线断裂,丢失目标 • 阈值过低 → 背景噪声被误判为引导线,产生虚假路径 • Otsu方法:自动寻找类间方差最大的阈值,适应整体光照变化 • 局部阈值:分块处理,解决光照不均问题,但计算量增大 • 工程实践:优先Otsu + 形态学滤波,必要时结合局部阈值

4.1 二值化的核心原理与数学本质

二值化的本质是一个决策函数:对于图像中每个像素的灰度值 \( f(x,y) \),根据选定的阈值 \( T \) 将其映射为两个离散值之一。数学表达式为:

g(x,y) = 0,  若 f(x,y) < T
g(x,y) = 255, 若 f(x,y) ≥ T

这里的 \( T \) 可以是全局标量,也可以是随坐标变化的函数 \( T(x,y) \)。从信息论角度看,二值化是一个有损压缩过程——它将原本256级的灰度信息压缩为1位信息,因此阈值 \( T \) 的选择直接决定了哪些信息被保留、哪些被丢弃。在巡线场景中,理想情况是:引导线(通常为深色或浅色)被完整保留为一个连通区域,而地面背景被完全抑制。

关键认知:二值化不是简单的“变黑白”,而是通过阈值将图像分割为“前景”和“背景”两个类别。巡线任务中,前景就是引导线,背景就是地面。阈值选择的本质是分类器设计——它决定了分类边界在哪里。

4.2 全局阈值:固定值与Otsu自适应

4.2.1 固定全局阈值

最简单的方案是人为设定一个固定阈值 \( T \),例如 \( T=128 \)。这种方法在光照恒定、引导线与背景对比度稳定的实验室环境中表现良好。然而,一旦环境光照变化(如从室内到室外、阴影遮挡),固定阈值就会失效。例如,当阳光直射地面时,原本深色的引导线灰度值可能从80上升到160,而浅色地面的灰度值可能从200上升到240,此时固定阈值128会将引导线误判为背景。

4.2.2 Otsu自适应阈值

Otsu算法(大津法)由日本学者大津展之于1979年提出,其核心思想是最大化类间方差。算法遍历所有可能的灰度级(0~255),计算每个阈值下前景与背景的类间方差 \( \sigma_B^2 \),选择使 \( \sigma_B^2 \) 最大的阈值作为最优分割点。类间方差定义为:

σ_B² = ω_0 · ω_1 · (μ_0 - μ_1)²

其中 \( \omega_0, \omega_1 \) 分别为前景和背景像素占比,\( \mu_0, \mu_1 \) 为两类像素的平均灰度。Otsu的数学直觉是:当阈值恰好位于两个峰之间的谷底时,两类像素的灰度差异最大,类间方差达到峰值。

对比维度 固定全局阈值 Otsu自适应阈值
计算复杂度 O(1),直接比较 O(256),遍历灰度级
光照适应性 差,需人工调整 较好,自动适应整体亮度变化
双峰要求 无 直方图需呈双峰分布
实时性 极快 快,适合嵌入式平台
适用场景 光照恒定、对比度稳定 光照变化但整体均匀

4.3 自适应阈值与局部处理

当图像存在光照不均(如一侧有阴影、另一侧强光)时,全局阈值(包括Otsu)无法同时兼顾图像不同区域的亮度差异。此时需要采用局部自适应阈值:将图像划分为若干子块(如32×32像素),对每个子块独立计算阈值。常用的局部阈值方法包括:

  • 局部均值法:计算邻域内像素均值 \( m \),阈值 \( T = m - C \),其中 \( C \) 为常数偏移量。
  • 局部高斯加权法:使用高斯窗口计算加权均值,对噪声更鲁棒。
  • 局部Otsu:对每个子块单独执行Otsu算法,计算量较大但效果最好。
性能警告:局部自适应阈值的计算量是全局阈值的 \( N \) 倍(\( N \) 为子块数量)。在嵌入式巡线机器人中,若使用树莓派或STM32,需权衡帧率与精度。建议优先使用全局Otsu,仅在光照不均严重时启用局部阈值,并优化子块大小(如64×64)。

4.4 阈值选择对巡线的影响:案例拆解

下面通过一个实际巡线场景来展示阈值选择如何影响系统性能。

案例背景:某智能车竞赛团队使用灰度摄像头(320×240分辨率)在室内灯光环境下巡线,引导线为黑色电工胶带(宽度5cm),地面为浅灰色环氧树脂地坪。初始使用固定阈值 \( T=100 \),在灯光均匀时表现良好。

初始现象:当赛车经过窗户附近时,自然光照射导致地面灰度从180升至220,黑色胶带灰度从60升至90。固定阈值100将胶带灰度(90)误判为背景,导致引导线断裂,赛车冲出赛道。

分析过程:团队采集了不同光照条件下的灰度直方图,发现直方图始终呈双峰分布,但峰位随光照整体平移。因此,固定阈值无法适应这种整体亮度漂移,而Otsu算法能够自动跟踪峰谷位置。

实际操作步骤:

  1. 将固定阈值替换为Otsu动态阈值,核心代码如下:
# Python + OpenCV 实现
import cv2
import numpy as np

def otsu_threshold(image):
    # 转换为灰度图
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 使用Otsu自动计算阈值
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    return binary
  1. 在图像底部1/3区域(近视野)计算质心,作为巡线偏差信号。
  2. 加入形态学开运算(3×3核)去除孤立噪点。

结果对比:切换Otsu后,赛车在窗户区域的断线率从35%降至2%,平均圈速提升12%。但团队发现,当赛车进入强烈阴影区域时,Otsu仍偶尔失效——因为阴影导致局部对比度下降,直方图双峰不明显。

进一步优化:团队最终采用全局Otsu + 局部均值补偿的混合策略:先计算全局Otsu阈值 \( T_{otsu} \),再对每个32×32子块计算局部均值 \( m_{block} \),最终阈值为 \( T = T_{otsu} + (m_{block} - m_{global}) \times 0.3 \)。该方案在保持实时性的同时,有效解决了阴影问题。

复盘经验:阈值选择不是“一劳永逸”的,需要根据赛道环境动态调整。建议在代码中预留阈值调试接口(如串口或蓝牙),在实车调试时实时观察二值化效果,快速定位问题。

4.5 常见误区与工程建议

在巡线机器人开发中,关于二值化存在以下常见误区:

  • 误区一:阈值越大越好。实际上,阈值过高会导致引导线断裂,过低则引入噪声。正确做法是让阈值落在直方图谷底。
  • 误区二:Otsu万能。Otsu假设直方图呈双峰分布,当引导线面积过小(如占图像<5%)或光照严重不均时,Otsu会失效。
  • 误区三:忽略形态学处理。二值化后直接计算质心,容易受孤立噪点干扰。应先进行开运算(腐蚀+膨胀)去除小噪点,再进行闭运算填充引导线内部空洞。
  • 误区四:过度追求局部阈值。局部阈值虽然适应性强,但计算量大,且可能将地面纹理误判为引导线。应优先优化光照条件(如加遮光罩),而非依赖复杂算法。
场景特征 推荐阈值策略 形态学处理
室内均匀光照 固定阈值或Otsu 开运算(3×3)
室外光照变化 Otsu + 全局均值补偿 开运算 + 闭运算
强烈阴影/反光 局部自适应阈值(64×64块) 中值滤波 + 开运算
高速巡线(帧率优先) 固定阈值 + 手动标定 仅开运算(3×3)

总结而言,图像二值化是巡线系统的“第一道关卡”,阈值选择直接决定了后续路径偏差计算的准确性。工程实践中,应遵循“先全局后局部、先简单后复杂”的原则:优先使用Otsu全局阈值,配合形态学滤波;若仍无法满足要求,再引入局部自适应机制。同时,务必在实车调试中建立阈值参数的可视化监控,以便快速定位问题。