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