我正在开发一个生成和读取表单的文档处理应用程序。所附示例表格生成为打印文档,由人员填写、扫描并反馈到应用程序以检测填充值,包括光学标记(气泡)、文本(OCR)等。Click here for Sample Form .
由于扫描会在旋转、缩放和平移方面扭曲图像,我使用三个标记来检测方向并以相当原始的方式校正图像,这在计算和内存方面非常昂贵。这是它的要点:
- 从磁盘读入图像。
- 使用 AForge.net 检测球。
- 使用形状、相对大小和其他属性过滤出标记。
- 计算旋转并旋转图像。
- 使用 AForge.net 从旋转的图像中检测球。
- 计算缩放和缩放旋转图像。
- 使用 AForge.net 从缩放后的图像中检测球。
- 计算平移并平移旋转、缩放的图像。
- 使用 AForge.net 从翻译后的图像中检测 bolbs。
- 过滤掉答案标记(气泡),因为我已经有了原始表格的位置。
- 提取平均颜色并与阈值进行比较以确定选项是否已填充。
以上是一种极其准确但效率低下的处理方式,我希望采用几何方法仅一次提取 Blob ,过滤掉标记/气泡并使用简单的数学计算出气泡相对于标记的预期位置。这应该会减少 80% 的处理时间和 60% 的内存使用量。
或者,必须有一种方法可以在单个图像上应用所有三种变换,而不会影响下一个图像。这也将减少三次 Blob 检测的需要。
最佳答案
我会为图像建模并在内存中而不是实际图像中对该模型进行转换。然后,一旦计算出变换矩阵,就可以将其应用于实际图像以进行 OCR。
关于c# - C# 中的图像转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701448/