二值化
二值化是将灰度图像的每个像素以阈值为基准转换为白(亮)或黑(暗)两值的图像处理。比阈值亮的像素分为白,暗的分为黑。在二维码解码中,这是判定模块「暗」还是「亮」的核心步骤。
二值化的精度很大程度上取决于阈值的设定方法。固定阈值(对整个图像应用相同值)在均匀照明条件下有效,但在有阴影或照明不均的环境下部分模块会被误判。自适应阈值(对图像的局部区域动态计算阈值)即使在照明不均的环境下也能实现稳定的二值化。现代手机的二维码读取器采用自适应阈值。
现代手机的二维码读取器之所以采用自适应阈值,差别就在下面这几点。
| 观点 | 固定阈值 | 自适应阈值 |
|---|---|---|
| 阈值怎么定 | 对整个图像应用相同的值 | 对图像的每个局部区域动态计算 |
| 照明均匀时 | 能起作用 | 可以稳定地二值化 |
| 有阴影或照明不均时 | 部分模块会被误判 | 靠局部的阈值仍能稳定地二值化 |
二值化变得困难的情况包括:低对比度的二维码(浅色模块)、逆光环境(二维码背后有强光源)、反射(光泽表面印刷的二维码)、运动模糊(移动中扫描)。纠错功能可以补偿部分误判,但根本上最好的对策是在适当环境下印刷和张贴高对比度的二维码。