OCR文字识别中的二值化与版面分析

先按拍摄条件选择阈值,而不是直接套参数

OCR 预处理最容易出错的地方,是把不同光照、纸张和字体混用同一套二值化参数。可执行的顺序是:先灰度化,再根据背景是否均匀选择全局阈值、Otsu 大津法或自适应阈值,之后才做去噪、倾斜校正和版面分析。

灰度化就是把 RGB 彩色图压缩成一个亮度通道,常用公式为 Y=0.299R+0.587G+0.114B。绿色通道权重最高,因为人眼对绿色亮度变化更敏感。浅黄色纸张、蓝色印章和阴影可能与黑字拥有相近的某个颜色通道,因此直接按 R、G、B 中的单一通道阈值处理,容易误删文字或保留背景。

可以按以下条件选择方法:

  • 全局阈值:适合平板扫描、背景均匀的黑白文档。整页使用同一个阈值,速度快,但无法处理明显的局部阴影。
  • Otsu 大津法:根据灰度直方图最大化前景与背景的类间方差自动选阈值。它适合黑字白底两类分布较清楚的图像,不适合背景渐变或彩色内容复杂的页面。
  • 自适应阈值:按局部窗口计算阈值,适合手机拍摄、纸张泛黄和局部光照不均。窗口太小会把纸张纹理当成字,太大则可能忽略局部阴影。

自适应阈值可从 15×1531×3151×51 三组窗口试起,偏移量 C 可从 2510 比较。窗口应明显大于笔画宽度,却不必大到覆盖整页;最终以细笔画是否保留、空白区域是否干净为判断标准,而不是固定使用某个数字。

用小核去噪,避免把汉字笔画一起抹掉

二值图只保留两种像素状态,常见约定是 0 表示黑色前景、255 表示白色背景。OpenCV 等工具的函数可能要求相反的前景极性,处理前应确认接口定义,否则开运算和连通域统计会作用在背景上。

形态学操作利用结构元素修整像素形状。开运算先腐蚀再膨胀,适合清除孤立小点;闭运算先膨胀再腐蚀,适合连接断裂笔画。它们都会改变字符轮廓,所以不能把核尺寸越大理解为效果越好。

正文扫描图宜从 2×23×3 矩形核开始。每改变一次核尺寸,都应检查逗号、句号、汉字内部空隙和细横画;若相邻字符开始粘连,或“口”“日”等结构被填满,应立即回退参数。去噪后仍有大片黑边、装订线或阴影,应优先做边缘裁剪和背景校正,而不是继续扩大形态学核。

倾斜校正也应早于版面分析。页面倾斜 2°~3° 时,水平投影的行峰可能变宽;手机照片中的透视变形则不能只靠旋转解决,需要先根据页面四角做透视校正。没有可靠角点时,裁掉黑边并保留原图,比强行拉伸页面更安全。

  1. 复制原图,保留分辨率和拍摄方向。
  2. 裁掉黑色边框、装订线和明显空白边缘。
  3. 生成全局阈值、Otsu 和自适应阈值三份图像。
  4. 对每份图像先试 2×23×3 核,并放大检查细笔画。
  5. 完成旋转或透视校正后,再进入版面分区。

先分栏和表格,再用投影切文字行

水平投影统计每一行的黑色像素数量。文字行通常形成连续高值区,行间空白形成低值区;但表格横线、行距过小和字符粘连会让多个峰连成一片。投影适合切行,不适合单独决定复杂页面的阅读顺序。

连通域分析会把相互连接的前景像素归为一个区域,并返回外接矩形。一个连通域不一定等于一个字符:汉字可能因笔画相连而成块,标点可能独立存在,断裂笔画也可能被拆成多个区域。因此,连通域更适合提供字符高度、行高和间距估计。

版面分析可按下面的顺序执行:

  1. 检测页面方向,估计倾斜角并校正。
  2. 按大块空白、投影低谷或检测到的竖直分隔线切分栏区域。
  3. 在每个区域内统计水平投影,合并垂直间隔较小的行峰。
  4. 用连通域外接矩形修正行边界,保留每个区域的原始坐标。
  5. 按页面阅读规则排序,而不是简单按全页横坐标排序。
  • 单栏正文:先用水平投影切行;行距不稳定时,结合连通域的垂直中心。
  • 双栏论文:先分左、右栏,再分别从上到下识别,避免左右栏末行串接。
  • 表格:先检测横线和竖线,识别单元格后再处理单元格内文字。
  • 手机照片:先做透视与阴影校正,再选择自适应阈值;否则投影峰可能反映的是阴影边界。

用 CER 对比参数,按错误类型回退

OpenCV 4.x 可用于灰度化、阈值、形态学和连通域分析,Tesseract OCR 5.x 可用于验证识别结果。不要只看整页是否“黑白分明”,应保存每个版本的参数、二值图和 OCR 文本,定位错误究竟来自预处理、版面排序还是识别模型。

  1. 印刷体扫描先统一到约 300 dpi;不同引擎的最佳输入尺寸可能不同,这个数值应作为起点。
  2. 分别生成全局阈值、Otsu 和自适应阈值版本。
  3. 对每个版本测试 2×23×3 核,放大检查标题、正文和标点。
  4. 完成倾斜校正,再分别处理单栏、双栏和表格区域。
  5. 每类区域至少抽查一小段,并记录漏字、粘字、噪声和行错位。

字符错误率 CER 计算插入、删除和替换造成的字符差异,适合中文文本;词错误率 WER 依赖分词,中文分词方案不同,数值也会改变。若没有标注工具,可先人工建立一段正确文本作为基准,再比较不同预处理版本的错误数量;有条件时,再用 CER 做统一评估。

  • 漏掉细笔画:减小腐蚀或形态学核,降低阈值处理的侵蚀程度,并检查自适应窗口是否过小。
  • 字符粘连:减小闭运算强度,检查是否把表格线或阴影保留成前景。
  • 背景纹理过多:增大自适应窗口,或先做背景估计;同时确认浅色文字没有消失。
  • 行顺序错误:重新分栏和表格区域,不要只调整投影峰的合并距离。

实际判断可归纳为一条规则:背景均匀用全局阈值或 Otsu,局部阴影明显用自适应阈值;二值化后先用小核,发现细笔画消失就回退;多栏和表格页面先分区,再切行。最佳参数取决于纸张底色、光照、字体大小、输入分辨率和 OCR 引擎,不能把某个阈值或窗口尺寸当成通用答案。

更多推荐

先分清两个“半径”:r决定窗口,σ决定衰减 高斯模糊调不出预期效果,常见原因不是公式错,而是把工具里的“半径”误当成同一个参数。卷积核半径 r决定参与计算的窗口大小,高斯标准差 σ决定距离中心越远的像素被压低得有多快。 当核半径为 r 时,

了解更多 >

先判定透明区域的显示目标 PNG 支持 Alpha 透明通道,Alpha 可以理解为每个像素的“不透明程度”;JPEG/JPG 标准格式不保存 Alpha 通道。因此,PNG 转 JPG 时,透明区域不能继续保持透明,必须先与某种背景色合成

了解更多 >

SVG路径如何转换为像素覆盖率 SVG转PNG时,真正决定边缘效果的不是文件扩展名,而是路径如何被栅格化。SVG路径通常由直线、二次贝塞尔曲线和三次贝塞尔曲线组成;栅格化器不会直接“显示数学曲线”,而是计算曲线与像素网格之间的覆盖关系。

了解更多 >

从PDF矢量指令到像素网格 PDF页面不是一张固定分辨率的图片,而是一组绘制指令:路径、文字、嵌入图像、透明度、颜色空间以及它们之间的覆盖关系。栅格化的任务,是把这些指令按页面顺序计算出来,再映射到指定DPI的像素网格中;pdf文件转图片

了解更多 >

PNG、JPEG与WebP转换:体积、画质与兼容性的测试方法 照片通常应比较JPEG与WebP有损编码;截图、文字和透明图标通常应比较PNG与WebP无损编码。但不能仅凭格式判断体积,必须固定编码器和参数后,实测文件大小、画质与兼容性。

了解更多 >