当前位置: 首页 > 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.dtcms.com/a/349859.html

相关文章:

  • 朴素贝叶斯:用 “概率思维” 解决分类问题的经典算法
  • ​Visual Studio + UE5 进行游戏开发的常见故障问题解决
  • 【区间DP】P1063 [NOIP 2006 提高组] 能量项链
  • 基于深度学习的人声分离系统设计与实现
  • Apache Commons Math_Java科学计算的利器
  • AP服务发现中两条重启检测路径
  • 南京魔数团:AR技术引领远程协作新纪元
  • C++ Core Guidelines 核心理念
  • ios webgl音频问题
  • 深入解析:为什么应该避免使用 atoi、atol 和 atof 函数
  • 集成算法概述与分类
  • 大数据毕业设计选题推荐-基于大数据的超市销售数据统计分析系统-Hadoop-Spark-数据可视化-BigData
  • 【opengl 实践】 windows下vscode配置遇到的问题
  • week4-[二维数组]幻方检测
  • 【Android】Activity和Fragment之间的通讯
  • 大型电动化工程机械设备智能施工试验场的网络设计方案
  • java基础(十五)计算机网络
  • 【栈 - LeetCode】739.每日温度
  • 深入理解JVM垃圾收集器:垃圾收集器
  • Vue3 + Golang Gin 实现客服实时聊天系统(WebSocket + Socket.IO 详解)
  • Maven、Spring Boot、Spring Cloud以及它们的相互关系
  • iptables 防火墙技术详解
  • 如何通过虚函数实现多态?
  • 文入门Ubuntu:从零到精通的Linux之旅
  • 数学建模-整数规划(IP)
  • FunASR语音识别框架流式识别模型切换
  • SpringBoot的条件装配原理
  • SpringBoot3集成Oauth2.1——10重启程序Token失效(RSA持久化)
  • Java项目-苍穹外卖_Day1
  • Visual Studio 2022调试Eigen库查看矩阵与向量的值