C# 中的图像转换

4
我正在开发一款文档处理应用程序,可以生成和读取表格。附上的示例表格是作为打印文档生成的,由人们填写、扫描并反馈到应用程序中以检测填写的值,包括光学标记(气泡)、文本(OCR)等。点击此处查看示例表格
由于扫描会扭曲图像的旋转、缩放和平移,我使用三个标记来检测方向并以非常原始的方式纠正图像,这对计算和内存都非常昂贵。以下是其要点:
  1. 从磁盘中读取图像。
  2. 使用AForge.net检测blob。
  3. 使用形状、相对大小和其他属性过滤出标记。
  4. 计算旋转并旋转图像。
  5. 使用AForge.net从旋转后的图像中检测blob。
  6. 计算比例并缩放旋转后的图像。
  7. 使用AForge.net从缩放后的图像中检测blob。
  8. 计算平移并平移旋转、缩放后的图像。
  9. 使用AForge.net从平移后的图像中检测blob。
  10. 过滤答案标记(气泡),因为我已经拥有原始表格的位置。
  11. 提取平均颜色并与阈值进行比较,以确定选项是否已填写。
上述方法非常精确但效率低下,我正在尝试采用几何方法来仅提取blob一次、过滤标记/气泡并使用简单的数学方法来确定气泡相对于标记的预期位置。这应该可以将处理时间缩短80%,内存使用减少60%。
或者,必须有一种方法可以在单个图像上应用所有三个转换而不会影响下一个转换。这也将减少需要三次检测blob的需求。

2
你具体在问什么问题? - Daniel Mann
我想通过数学计算来确定气泡标记相对于黑色标记的坐标,而不是必须转换实际图像。 - Raheel Khan
目标是读取气泡标记的像素值,以确定它们是否被用户填写。 - Raheel Khan
你使用什么OCR软件?你不能使用它的输出吗? - Gert Arnold
这在我的情况下是不可能的,因为用户输入的文本不仅是可选的,而且可能会误导应用程序,降低准确性。 - Raheel Khan
经过更多的搜索,答案似乎是几何/矩阵变换,尽管我对此不太熟悉。这个想法是计算相对于另一个给定坐标系的坐标,因为你知道在图像旋转/缩放/平移之前的所有坐标。 - Raheel Khan
1个回答

0
我会在内存中对图像进行建模和转换,而不是直接对实际图像进行操作。然后,一旦计算出变换矩阵,就可以将其应用于实际图像以进行OCR。

谢谢。您能详细说明一下如何对图像进行建模吗? - Raheel Khan
很抱歉,我想我说的是,如果你能将斑点计算成一个矩形,那么你就可以不必旋转图像,而是将旋转应用于矩形对象作为矩阵变换。然后,你应该能够知道斑点的位置,然后可以通过这种方式计算比例和平移。一旦你有了最终的变换矩阵,只需将其应用于图像,你就完成了。对图像执行单个变换。 - justin.m.chase
谢谢。这正是我要找的,但结果似乎不太准确。当我将旋转、缩放和平移应用于矩阵,并最终调用变换时,它们似乎受到所调用序列的影响。 - Raheel Khan
是的,变换的顺序会产生很大的影响。你应该先进行缩放、旋转,然后再进行平移。 - justin.m.chase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接