当前位置: 首页 > news >正文

Tesseract OCR之页面布局分析

1. 核心目标

将文档图像划分为逻辑区域(如文本栏、表格、图片),并确定文本行的阅读顺序。关键在于检测制表位(Tab Stops)—— 文本列的对齐边界。

想象你在看一份报纸的扫描件,用剪刀沿着报纸的空白处剪开,把不同的栏目和段落分离出来,这就是布局分析的目的。

  1. 找到所有文字区域(比如标题、正文栏、表格内的文字)。
  2. 排除非文字干扰(如图片、装饰线条、页眉页脚)。
  3. 确定文字之间的关联(哪些文字属于同一段落/同一列)。
2. 投影分析:快速定位文字密集区
  • 水平投影:统计每行像素中的非空白(如黑色)像素数,反映文本行密度。
    H(y)=∑x=0widthbinary_image(x,y)H(y) = \sum_{x=0}^{width} \text{binary\_image}(x, y)H(y)=x=0widthbinary_image(x,y)

    • 水平投影举例 → 上下移动手指,数每行有多少字:
    标题行:    XXXXXXXXXX (10字) ← 手指停在这里(峰值)
    空白行:  
    正文行:    XXXX XXXX (8字) 
    

    输出:发现文字集中在Y=5060(标题)、Y=100200(正文)。

  • 垂直投影:统计每列像素中的非空白像素数,反映文本列密度。
    H(y)=∑x=0heightbinary_image(x,y)H(y) = \sum_{x=0}^{height} \text{binary\_image}(x, y)H(y)=x=0heightbinary_image(x,y)

  • 垂直投影举例 → 左右移动手指,数每列有多少字:

    左栏: X | X |   | X |... (第3列为空)
    右栏:   | X | X |   |...
    

    输出:发现X=0150是左栏,X=200350是右栏(中间X=150~200是空白)。

3. 制表位检测:对齐参考线
文本行基线定位(水平投影)
  1. 寻找峰值:水平投影的局部最大值对应文本行位置。
  2. 过滤噪声
    • 阈值:峰高 > 平均投影值 * 系数(如0.3)。
    • 合并邻近峰(若行间距小于字体高度的1.5倍)。
  • 文字栏的边界:垂直投影的空白处就是栏间分隔。
    左栏文字结束 ←|→ 右栏文字开始(此处垂直投影值为0)
    
列分隔检测(垂直投影)
  1. 寻找低密度谷:垂直投影的连续低值区域(如宽度≥10像素且值<平均值的10%)。
  2. 验证列边界
    • 检查左右两侧的投影梯度突变(如从0突然上升)。
    • 排除过窄的间隔(如<20像素可能是字符间隙)
  • 段落缩进:水平投影中突然的左侧偏移可能是新段落。
        XXXX ← 缩进2字符
    XXXX    ← 顶格
    
4. XY-Cut:递归“剪空白”
算法流程(递归分割)
  1. 初始区域:整个图像作为第一个待分割区域。
  2. 切割方向选择
    • 若区域宽度 > 高度,优先尝试垂直切割(沿垂直投影的空白)。
    • 否则优先水平切割(沿水平投影的空白)。
  3. 终止条件
    • 区域内无空白间隙(全文本)或区域面积小于阈值。

示例,实际切割过程类似这样:

原始页面:
+-----------------------+
| 标题         图片     |
|                       |
| 左栏段落1    右栏段落1|
| 左栏段落2             |
+-----------------------+第1刀:沿垂直空白切开
+-----------+-----------+
| 标题 |图片|左栏 |右栏 |
|     |    |段落1|段落1|
|     |    |段落2|     |
+-----------+-----------+第2刀:水平切开标题区域
+-----------+
| 标题 |图片|
+-----------+
|左栏 |右栏 |
|段落1|段落1|
|段落2|     |
+-----------+

5.标点符号的作用

  • 边界辅助判断
    右对齐的标点(如句号、逗号)会强化垂直投影的右侧下降沿,帮助确认列边界。

    左栏文字结束 → 此处投影突降。 ← 标点密集处
    右栏文字开始 → 此处投影突升
    
  • 连字符处理
    跨行的连字符(如英语单词docu-和下一行ment)需要特殊合并逻辑。

扩展阅读

  • 经典论文:《XY-Cut: A Fast Segmentation Algorithm for Constraint Object Recognition》
  • 现代改进:《Document Layout Analysis via Attention to Split, Merge or Copy》 (CVPR 2023)
http://www.xdnf.cn/news/1365823.html

相关文章:

  • Linux系统的网络管理(一)
  • c# 读取xml文件内的数据
  • 网络编程-HTTP
  • zookeeper-znode解析
  • 【动态规划】309. 买卖股票的最佳时机含冷冻期及动态规划模板
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(中)
  • 【C语言16天强化训练】从基础入门到进阶:Day 11
  • 信号处理的核心机制:从保存、处理到可重入性与volatile
  • 系统架构设计师-计算机系统存储管理的模拟题
  • 【数据结构】栈和队列——队列
  • AR远程协助:能源电力行业智能化革新
  • 数据库迁移幂等性介绍(Idempotence)(Flyway、Liquibase)ALTER、ON DUPLICATE
  • 05 开发环境和远程仓库Gitlab准备
  • coze工作流200+源码,涵盖AI文案生成、图像处理、视频生成、自动化脚本等多个领域
  • 向量库Qdrant vs Milvus 系统详细对比
  • 智能专网升级:4G与5G混合组网加速企业数字化转型
  • FunASR基础语音识别工具包
  • 【Canvas与标牌】维兰德汤谷公司logo
  • JavaScript 中类(class)的super 关键字
  • 【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署
  • UniApp文件上传大小限制问题解决方案
  • kafka 副本集设置和理解
  • kafka常用命令
  • 宋红康 JVM 笔记 Day07|本地方法接口、本地方法栈
  • Linux(四):进程状态
  • python项目中pyproject.toml是做什么用的
  • SDC命令详解:使用set_timing_derate命令进行约束
  • K8s高可用:Master与候选节点核心解析
  • 基于MalConv的恶意软件检测系统设计与实现
  • 力扣(用队列实现栈)