【发布时间】:2011-10-09 04:29:36
【问题描述】:
我正在开发一个生成和读取表单的文档处理应用程序。随附的示例表单生成为打印文档,由人员填写、扫描并反馈给应用程序以检测填充值,包括光学标记(气泡)、文本 (OCR) 等。Click here for Sample Form。
由于扫描会在旋转、缩放和平移方面扭曲图像,因此我使用这三个标记来检测方向并以相当原始的方式校正图像,这种方式在计算和内存方面非常昂贵。这是它的要点:
- 从磁盘读取图像。
- 使用 AForge.net 检测 bolb。
- 使用形状、相对大小和其他属性过滤掉标记。
- 计算旋转和旋转图像。
- 使用 AForge.net 从旋转图像中检测圆球。
- 计算比例和缩放旋转图像。
- 使用 AForge.net 从缩放图像中检测圆球。
- 计算平移并平移旋转、缩放的图像。
- 使用 AForge.net 从翻译后的图像中检测 bolb。
- 过滤掉答案标记(气泡),因为我已经有了原始表单的位置。
- 提取平均颜色并与阈值进行比较以确定选项是否已填充。
以上是一种极其准确但效率低下的处理方式,我希望采用几何方法仅提取一次斑点,过滤掉标记/气泡,并使用简单的数学计算出气泡相对于标记的预期位置。这应该会减少 80% 的处理时间和 60% 的内存使用量。
或者,必须有一种方法可以将所有三个变换应用于单个图像,而不会影响下一个图像。这也将减少三次检测斑点的需求。
【问题讨论】:
-
您要问什么具体问题?
-
我想从数学上算出气泡标记相对于黑色标记的坐标,而不必转换实际图像。
-
目标是读取这些气泡标记的像素值,以确定它们是否已被用户填写。
-
你用什么OCR软件,不能用它的输出?
-
这在我的情况下是不可能的,因为文本不仅对用户来说是可选的,而且会误导应用程序降低准确性。
标签: c# image transformation