对于我的项目,我正在为扫描文档编写一个图像预处理库。截至目前,我坚持使用线路删除功能。
问题描述:样本扫描表格:
Name* : ______________________________
Age* : ______________________________
Email-ID: |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
注: 以下是附加条件:
- 扫描的文档可能包含更多的垂直和水平引导线。
- 线条粗细可能超过1px
- 文档本身打印不正确,可能会出现墨水膨胀或厚度不均等形式的噪音
- 文档可能有彩色背景或线条
现在我要做的是检测这些行并删除它们。在这样做的同时,手写内容不应丢失。
解决方案:当前的解决方案是用 Java 实现的。
通过使用 canny/sobel 边缘检测器和阈值滤波器的组合检测这些线(使图像双色调)。从上一个动作中,我得到了一个黑白像素阵列。遍历数组并检查该像素的亮度是否低于指定的 bin 值。如果我发现 30 个(以像素为单位的最小线长)这样的像素,我会删除它们。我对垂直线重复相同的操作,但考虑到由于水平线的去除会造成切割。
尽管该解决方案似乎有效。但是也有问题,比如
- 去除重叠字符
- 如果图像中的字符间距不正确,则它也被视为一条线。
- 边缘检测的输出图像是黑白的。
- 有点慢。2480*3508 的图像通常需要 40 秒左右。
请指导如何正确有效地进行操作。如果有开源库,请直接指导。
谢谢