【问题标题】:Analyzing scanned images in C#在 C# 中分析扫描的图像
【发布时间】:2014-02-27 15:57:50
【问题描述】:

我有兴趣分析扫描的文档、表格,并且我希望能够检测是否有人在表格的各个位置选中或填写了复选框(可能类似于扫描仪),并可能捕获签名的图像等。

由于这些复选框将位于已知位置,因此我似乎可以在 (x,y) 处要求几个像素,并在其比 N 阈值暗时对它们进行平均,然后选中。但是,我认为扫描可能会导致实际位置相对于图像边缘发生很大变化。

很明显我是这个领域的新手,是否存在框架(开源或商业)或任何任何人都可以指出的模式或示例,以开始这条道路。 (或者这在 .net 中可能无法做到,我应该开始研究托管应用程序?)

【问题讨论】:

  • 可能是重复的问题:stackoverflow.com/questions/8576652/…
  • 看看图像处理库OpenCV,它也适用于C#:emgu.com/wiki/index.php/Main_Page
  • 尝试研究OCR库。
  • 我们的组织实际上就是这样做的。我们找不到适合我们所做工作的框架,但该算法的构建相当简单。在复选框的“已知位置”裁剪位图,在框的区域上执行GetPixel(x,y),然后比较数字以确定值。如果要捕获复选框的实际可见区域,也可以保存裁剪后的图像。
  • 任何数量的图像处理框架都可以用于此应用程序。 OpenCV 是免费的,这是一个不错的价格,但不是最简单易用的,也不一定是最好的。对于任何图像处理应用程序,请至少发布一张示例图像。对于我们这些在该领域的专业人士并且必须为潜在客户制作报告的人来说,这是必须的。

标签: c# .net image-processing


【解决方案1】:

这称为 ICR(智能字符识别)。
这是一个成熟的领域。 ICR 进行边缘检测,因为倾斜扫描很常见。
你可以尝试自己做,但有很多事情要做。

Leadtools 不是免费的,我不为他们工作
但这是 ICR 作为工具 (SDK) 的一个很好的例子
LEADTOOLS ICR SDK

如果您有纸质文件,另一种选择是将它们交给商业扫描供应商。
他们将拥有专为 ICR 设计的软件。
他们还有与 ICR 配合使用的高端扫描仪。

【讨论】:

  • 我很确定 ICR/OCR 很好超出了 OP 对这项任务的需求。
  • 此应用程序根本不需要 OCR/ICR。标准模板匹配(归一化相关)、连通分量和类似的基本算法就足够了,尤其是因为要填充的椭圆位于网格中。
  • @Rethunk 问题确实将椭圆形填充到位于网格中的位置中。它在不同的地方声明了复选框。
  • 好的:椭圆形、正方形、圆形、星形,形状无关紧要,只要它与整个图像中使用的形状相同即可。与之前的相同点:尽管可以训练 OCR 算法以找到任意形状,但 OCR 不是必需的。不过,碰巧有更好的工具来完成这项工作。
  • @Rethunk 我在哪里说 OCR?如果您有更好的工具,请发布它。我没有说那是最好的工具——只是一个例子。如果网格中的椭圆无关紧要,那你为什么说“特别是因为”?
【解决方案2】:

我不熟悉 .NET 图像处理,但我一般了解图像处理。所以我会给你理论,以及对 OpenCV 的参考。

为了适应图像的倾斜,查看Fourier transformsHough Transforms and Hough Lines. 您基本上想要做的是运行fourier transform,然后将结果转换为 BW 图像。为 HoughLines 找到最强的线,然后保留其中最长的线。这条线将是轴线之一,在我的实验中,它通常是垂直轴。求出与一条垂直直线的偏离角度,然后(取决于特定的旋转算法)将图像旋转这个量的负数。

如果旋转算法填充为 0(或使用与图像颜色相差太远的白色),您可以使用之前找到的角度裁剪图像以计算偏差(这是您在学校学到的所有三角派上用场)。

然后找到包含页面上文本的bounding box 并裁剪到该文本。当检查一个框是否被选中时,您需要查看可能比复选框大小大 5-10 像素的区域,具体取决于分辨率,以获得复选框 ROI。

有了这个,您可能想查看是否写入了 x% 的 ROI,以验证该框是否被选中。

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 2011-01-29
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多