如果unet可以正确识别出横竖线,能否输出横竖线的坐标, 然后根据横竖线的坐标焦点计算出连通域? 这种做法与现有做法对比,哪种更稳定,为什么?
这是一个非常深入且专业的问题。简短的回答是:先提取线坐标,计算焦点并延长连接,再重新生成Mask进行连通域分析(即“先矢量化梳理,再栅格化分析”),是目前公认最稳定的有线表格恢复方案。
这也是 MinerU(以及许多商业级OCR引擎)采用的核心策略。
我为您详细对比这两种方案的优劣和原理:
| 特性 | 方案A:基于Mask的直接连通域 (现有做法) | 方案B:基于矢量线的重构连通域 (推荐做法/MinerU做法) |
|---|---|---|
| 核心逻辑 | UNet -> 概率图 -> 二值化 -> 也就是现在的做法 | UNet -> 概率图 -> 提取线段坐标 -> 数学延长线段使其相交 -> 重绘Mask -> 连通域 |
| 处理交叉点 | 依赖形态学膨胀(Dilate)去"糊"住缺口。如果缺口大或错位,容易失败。 | 依赖几何计算。强制将线段延伸直到与另一条线相交,从数学上消灭缺口。 |
| 抗干扰性 | 弱。噪点、虚线、污渍会直接影响连通域形状。 | 强。只提取显著的长线段,过滤掉细碎噪点。 |
| 抗形变性 | 强。弯曲的表格也能很好适配(因为Mask是像素级的)。 | 较弱。如果表格弯曲严重,直线拟合误差会变大(需引入曲线拟合)。 |
| 复杂度 | 低。主要靠OpenCV基础算子。 | 高。涉及线段聚类、直线方程求解、交点计算等。 |
| 稳定性 | 中等。容易出现“单元格漏检”(线没连上)或“单元格粘连”。 | 极高。只要线被检出,单元格就一定闭合,且形状非常规整。 |
您遇到的 *"明明肉眼看线是清楚的,但连通域却漏了"*,通常是因为 像素级的断连。
目前我们尝试的 enhance_box_line (膨胀) 依然属于 方案A 的修补措施。如果您的业务场景中包含大量打印不清、有轻微断线的表格,方案B 是终极解决方案。