从精梳场的图像中提取角色

时间:2018-03-30 20:45:27

标签: python image opencv character extraction

我目前正致力于从形式的手写字符识别。到目前为止,一切都运作良好,但我希望我能从一个盒装或者#34;梳理的图像中提取角色。字段

例如,在特定字段被裁剪并进行了binazarized之后(使用otu&#39的方法),我留下了类似的内容:

Binary Field Image

对于字符识别,我使用emnist数据集训练有素的CNN模型。为了预测字符,我必须逐个提取字符。从盒子中提取字符的最佳方法是什么?

目前,我正在使用一种非常简单的方法来查找水平和垂直像素的非白色线条的分组,这些像素占据了与图像宽度和高度相关的一定数量的像素。例如,我会找到由至少90%非白色像素组成的水平线,并将具有并发y坐标的水平线组合成一个矩形对象,该对象将是图像上的水平线(应该是两条线的长度) /矩形,用于顶部和底部)。对于垂直线我做了类似的事情,除了我最终会得到{2 * charLength}行。我使用这些值来裁剪每个角色。但是,它并不完美。

以下是一些问题:

  • 场并不总是完全平直(旋转略微偏离)。我已经将SURF和单应性应用于原始图像,这非常好,但并不完美。
  • 如果用户写了" 1"它占据了盒子的整个高度,很可能会错误地表明它是盒子的垂直线。
  • 坐标不会始终与原始图像和输入图像匹配。因此,部分领域有时会被裁剪掉。为了解决这个问题,我目前正在提取字段的周围部分(如图中所示),但这也会导致问题,因为表单可以有非常接近某些字段的其他垂直和水平线。这将导致我当前琐碎的方法无法正常工作。

有更好的方法吗?有一件事是我必须牢记性能。我正在考虑再次为场图像进行SURF匹配,但是为整个表单页面执行它需要很长时间,因此我不确定是否要为我正在阅读的每个字段再次执行此操作。

我希望有人会有建议。我正在使用OpenCV进行图像处理,但是单词解决方案很好。谢谢

1 个答案:

答案 0 :(得分:0)

我知道这是一个迟到的回应,但我最终使用了OpenCV提取角色部分的轮廓特征。

当OpenCV找到图像的轮廓时,它会建立轮廓的层次结构系统。第一级最终成为非常外盒,所以我能够抓住下一级别的轮廓来提取角色。

它在开始时没有100%工作,但经过一些额外的图像处理后,我能够在至少99%的情况下正确提取字符。