用于从扫描文档中提取字段的图像配准算法/技术?
Posted
技术标签:
【中文标题】用于从扫描文档中提取字段的图像配准算法/技术?【英文标题】:Image registration algorithms / techniques used to enable extraction of fields from scanned document? 【发布时间】:2013-01-28 06:25:29 【问题描述】:我正在尝试确定从扫描文档中提取手写数据的最佳方法。
手写数据位于特定的加框区域。我生成了文档的数字版本,因此我知道加框区域的坐标,并且如果需要,还可以生成文档的其他变体(即屏蔽版本以使字段更易于提取)
我不能只使用文档生成中的坐标提取字段的原因是在扫描过程中发生了移位/缩放/透视修改,这可以推/拉每个人的坐标框不同(扫描的文档确实有用于对齐的角标记,但即使如此,通常也会发生意外的转换)。
我认为有两种方法可以解决这个问题:逐步检查页面上每个框的坐标,并尝试使用某种技术/算法“纠正”它们,或者将已完成的表格与空白表格进行比较(被屏蔽?)并尝试以这种方式提取正确的字段。
针对这些修改进行调整并准确提取包含笔迹的区域的最有效技术/算法是什么?还有其他选择吗?
【问题讨论】:
如果您的框被线包围,您可以通过相关或任何其他方法(霍夫变换等)轻松找到它。顺便说一句,如果图像可以旋转,相关性会给您带来不好的结果,但霍夫变换将帮助您确定旋转角度(因为文档中的主线是水平和垂直的)。旋转校正后,你真的可以用标准具做一个简单的相关来找到偏移坐标。 没有看到表格,我只是在猜测。我的上一个项目确定了点的模式。点的方便之处在于,无论它处于什么旋转位置,点都是点。点的图案可以形成地标,软件可以将其用作旋转原点。通过知道原点和角度,很容易提取区域。点的图案也可以指示分辨率。我很困惑为什么角标记只能达到 5 度以内。间隔那么远的标记应该比这更好。 我已按照建议添加了表单图像,以帮助更好地解释问题。我还应该澄清的是,在预处理阶段,图像会根据角标记进行旋转以正确定位 - 我遇到的问题与仅在捕获的图像的某些部分发生翘曲有关。 即使是灰色的,框也比背景浅。如果你对像素暗度进行滚动平均(单个像素可以做奇怪的事情),当背景和框之间的暗度变化时,你应该会看到一个重大变化。通过寻找 10% 的黑暗变化,无论盒子是灰色还是白色,它都必须明显更亮。 @HipHop-opatamus 首先确保没有“最佳方法”。但是,使用 SURF 和一个不错的关键点匹配器可以为您的示例提供完美的结果,然后图像配准也可以提供完美的结果。你有没有尝试过基于关键点检测和匹配的方法? 【参考方案1】:有许多可能的techniques 可以为您的问题实现近 100% 的准确度。
只需按照本页http://www.codeproject.com/Articles/24809/Image-Alignment-Algorithms 中描述的步骤操作即可。简而言之,您首先计算两个图像之间的光流,然后估计产生这种光流的变换。
注意:当匹配的图像几乎相同时,这种方法效果最好。
【讨论】:
【参考方案2】:您的第二种方法可以。更多细节:由于您已经打印了诸如“A 部分”、“A6”和“其他”等形式的字母,并且您提到您有对齐的角标记,您可以将它们用作地标,执行 template matching
到在原始文档和扫描文档中查找地标的坐标。然后使用这两组地标(角标记可能就足够了)生成仿射变换M = cv2.getAffineTransform(landmarks1, landmarks2)
,将cv2.warpAffine(img, M, ...)
应用于扫描图像,使其与原始文档匹配。这样,框将正确对齐(可能仍有一点偏移),然后您可以正确定位每个框。见https://www.geeksforgeeks.org/python-opencv-affine-transformation/
在输入以上所有内容后,我发现这个网页用代码谈论同样的事情:https://learnopencv.com/feature-based-image-alignment-using-opencv-c-python/
【讨论】:
以上是关于用于从扫描文档中提取字段的图像配准算法/技术?的主要内容,如果未能解决你的问题,请参考以下文章