文件图像处理

Ped*_*dro 11 language-agnostic classification machine-learning image-processing

我正在处理一个处理文档图像(主要是发票)的应用程序,基本上,我想将某些感兴趣的区域转换为XML结构,然后根据该数据对文档进行分类.目前我使用ImageJ分析文档图像和Asprise/tesseract for OCR.

现在我正在寻找一些让开发变得更容易的东西.具体来说,我正在寻找能够自动校正文档图像并分析文档结构的东西(例如,将图像转换为四叉树结构以便于处理).虽然我更喜欢Java和ImageJ,但我对任何库/代码/论文感兴趣,无论它是用什么编程语言编写的.

虽然我正在研究的系统应尽可能自动处理数据,但用户应监督结果,并在必要时更正系统建议的分类.因此,我有兴趣使用机器学习技术来获得更可靠的结果.处理类似文件时,例如特定公司的发票,其结构通常是相同的.当用户先前已经校正了公司的文档数据时,将来应该考虑这些更正.我对机器学习技术知之甚少,想知道如何实现我的想法.

Mat*_*sio 12

Mathematica中的以下原型找到文本块的坐标,并在每个块中执行OCR.您可能需要调整参数值以适合实际图像的尺寸.我没有解决机器学习问题的一部分; 也许你甚至不需要这个应用程序.

导入图片,为打印部件创建二进制掩模,并使用水平闭合(扩张和侵蚀)放大这些部件.

在此输入图像描述

查询每个blob的方向,聚类方向,并通过平均最大聚类的方向来确定整体旋转.

在此输入图像描述

使用以前的角度来拉直图像.此时OCR是可能的,但是你会丢失文本块的空间信息,这将使后处理比它需要的更加困难.相反,通过水平关闭找到文本blob.

在此输入图像描述

对于每个连接的组件,查询边界框位置和质心位置.使用边界框位置提取相应的图像补丁并在补丁上执行OCR.

在此输入图像描述

此时,您有一个字符串列表及其空间位置.这还不是XML,但它听起来像是一个很好的起点,可以直接根据您的需求进行定制.

这是代码.同样,形态函数的参数(结构元素)可能需要根据实际图像的比例进行更改; 另外,如果发票过于倾斜,您可能需要大致"旋转"结构元素,以便仍能实现良好的"不倾斜".

img = ColorConvert[Import@"http://www.team-bhp.com/forum/attachments/test-drives-initial-ownership-reports/490952d1296308008-laura-tsi-initial-ownership-experience-img023.jpg", "Grayscale"];
b = ColorNegate@Binarize[img];
mask = Closing[b, BoxMatrix[{2, 20}]]
orientations = ComponentMeasurements[mask, "Orientation"];
angles = FindClusters@orientations[[All, 2]]
\[Theta] = Mean[angles[[1]]]
straight = ColorNegate@Binarize[ImageRotate[img, \[Pi] - \[Theta], Background -> 1]]
TextRecognize[straight]
boxes = Closing[straight, BoxMatrix[{1, 20}]]
comp = MorphologicalComponents[boxes];
measurements = ComponentMeasurements[{comp, straight}, {"BoundingBox", "Centroid"}];
texts = TextRecognize@ImageTrim[straight, #] & /@ measurements[[All, 2, 1]];
Cases[Thread[measurements[[All, 2, 2]] -> texts], (_ -> t_) /; StringLength[t] > 0] // TableForm
Run Code Online (Sandbox Code Playgroud)