【问题标题】:Compare Scanned Images and detect very small visible changes比较扫描的图像并检测非常小的可见变化
【发布时间】:2014-04-07 22:35:11
【问题描述】:

我需要一个解决方案来比较两个扫描的图像。 我有一张申请表的图像(未填写),我需要将其与同一表格的其他图像进行比较,并想检测是否有任何完全未填写的申请表。

我刚刚尝试使用 Emgu CV AbsDiff、MatchTemplate 等,但它们都没有给我 100 % 的匹配,即使我在同一个扫描仪中扫描了同一个表格两次,可能是因为扫描中的噪音,我可以应用一个容差,但问题是我需要找出用户是否在其中填写了任何内容。如果我应用容差,则不会检测到表单中的微小变化。

我还查看了 Python Image Libray、Accord.Net 等,但找不到比较此类图像的方法。

关于如何进行这种类型的图像比较有什么建议吗? 是否有任何免费或付费图书馆可用于此?

【问题讨论】:

  • 给我们看一些图片怎么样?
  • 我尝试上传图片但失败了,因为我的知名度不够,我应该有10分:(

标签: opencv image-processing python-imaging-library emgucv


【解决方案1】:

仅检查表单字段。没有分心,更容易检测到小的变化。您也不必检查每个像素。使用直方图或平均颜色。我用过 SimpleCV:

from SimpleCV import *

form = Image("form.png")
form_field = form.crop(34, 44, 200, 30) 
mean_color = form_field.meanColor()[0] # For simplicity only red channel.

if mean_color < 253:
    print "Field is filled"
else:
    print "Field is empty"

或者寻找特征。例如。角落、斑点或关键点。关键点将忽略噪声,并且在扫描不佳时效果更好:

key_points = form_field.findKeypoints()

if key_points:
    print "Field is filled"
    key_points.show(autocolor=True)
else:
    print "Field is empty"

【讨论】:

  • 重新缩放图像的强度以使对比度处于相同范围内也可能是合理的。这将在扫描仪使图像整体太暗或太亮的情况下有所帮助。
  • @wbest:对于平均颜色阈值,您是对的。确保纸张白色实际上是白色将简化过程。但要小心处理图像。不要过滤掉有用的信息。这就是findKeypoints() 很酷的原因。关键点是图像中的独特区域,它表现出对照明变化的某种程度的不变性。他们不关心最佳亮度/对比度/颜色。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 2014-08-12
  • 1970-01-01
  • 2013-02-10
  • 2014-11-17
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
相关资源
最近更新 更多