C#中的图像转换

我正在开发一个生成和读取表单的文档处理应用程序。 附加的样本表格作为打印文档生成,由人填写,扫描并反馈给应用程序以检测填充值,包括光学标记(气泡),文本(OCR)等。 单击此处查看样本表格 。

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

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

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

或者,有一种方法可以在单个图像上应用所有三个变换,而不会影响下一个。 这也将减少blob检测三次的需要。

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