【问题标题】:Image transformation in C#C# 中的图像转换
【发布时间】:2011-10-09 04:29:36
【问题描述】:

我正在开发一个生成和读取表单的文档处理应用程序。随附的示例表单生成为打印文档,由人员填写、扫描并反馈给应用程序以检测填充值,包括光学标记(气泡)、文本 (OCR) 等。Click here for Sample Form

由于扫描会在旋转、缩放和平移方面扭曲图像,因此我使用这三个标记来检测方向并以相当原始的方式校正图像,这种方式在计算和内存方面非常昂贵。这是它的要点:

  1. 从磁盘读取图像。
  2. 使用 AForge.net 检测 bolb。
  3. 使用形状、相对大小和其他属性过滤掉标记。
  4. 计算旋转和旋转图像。
  5. 使用 AForge.net 从旋转图像中检测圆球。
  6. 计算比例和缩放旋转图像。
  7. 使用 AForge.net 从缩放图像中检测圆球。
  8. 计算平移并平移旋转、缩放的图像。
  9. 使用 AForge.net 从翻译后的图像中检测 bolb。
  10. 过滤掉答案标记(气泡),因为我已经有了原始表单的位置。
  11. 提取平均颜色并与阈值进行比较以确定选项是否已填充。

以上是一种极其准确但效率低下的处理方式,我希望采用几何方法仅提取一次斑点,过滤掉标记/气泡,并使用简单的数学计算出气泡相对于标记的预期位置。这应该会减少 80% 的处理时间和 60% 的内存使用量。

或者,必须有一种方法可以将所有三个变换应用于单个图像,而不会影响下一个图像。这也将减少三次检测斑点的需求。

【问题讨论】:

  • 您要问什么具体问题?
  • 我想从数学上算出气泡标记相对于黑色标记的坐标,而不必转换实际图像。
  • 目标是读取这些气泡标记的像素值,以确定它们是否已被用户填写。
  • 你用什么OCR软件,不能用它的输出?
  • 这在我的情况下是不可能的,因为文本不仅对用户来说是可选的,而且会误导应用程序降低准确性。

标签: c# image transformation


【解决方案1】:

我会对图像进行建模,并在内存中对该模型进行转换,而不是对实际图像进行转换。然后,一旦您计算出转换矩阵,您就可以将其应用于实际图像以进行 OCR。

【讨论】:

  • 谢谢。您能否详细说明一下图像建模?
  • 对不起,我想我的意思是,如果您可以将 blob 计算为一个矩形,那么您可以将旋转应用于矩形对象而不是旋转图像作为矩阵转换。然后你应该能够知道斑点会在哪里,然后你可以用这种方式计算比例和平移。一旦你有了最终的转换矩阵,只需将它应用到图像上,你就应该完成了。对图像执行一次转换。
  • 谢谢。这就是我正在寻找的,但不知何故,结果似乎并不准确。当我对矩阵使用应用旋转、缩放和平移并最终调用变换时,它们似乎受到被调用序列的影响。
  • 是的,转换的顺序有很大的不同。您可能应该缩放、旋转,然后平移。
猜你喜欢
  • 2023-03-31
  • 2015-05-27
  • 1970-01-01
  • 2013-06-17
  • 2011-02-07
  • 2022-01-09
  • 1970-01-01
  • 2013-02-26
  • 2011-08-16
相关资源
最近更新 更多