使用SciKit-Image和SciKit-Learn进行图像预处理和聚类 - 需要一些建议

时间:2017-03-19 23:12:58

标签: image-processing machine-learning scikit-learn cluster-analysis scikit-image

我有一大堆来自1930年代至40年代的官方文件的图像,包括颜色和B&amp; W,它们的质量相当低(通常一般<250 kB)。这些是官方机构(例如医院和市政当局等)使用的标准表格的照片,这些照片是用手或打字机填写的,带有个人信息。我在这篇文章的最后给出了两个典型的例子。 (请注意,这些是空表格 - 我宁愿不在网上放置个人信息。)

我需要做的是订购集合,以便将所有相同类型的文档组合在一起。我不知道有多少种不同的类型。或者,我可以首先尝试尝试查找某个特定文档类型的所有实例。我认为前一种方法是一种聚类方法,而后者是一种相似性方法。

关于聚类方法,我的想法是(1)预处理图像以增强有用信息,(2)从每个图像中提取特征向量,以及(3)将这些特征向量提供给聚类算法。我想使用SciKit-Image和SciKit-Learn库来完成这三项任务。我做了一些研究和阅读以熟悉这个主题和可能性,但我不知道从哪里开始并提出一些基本问题。

  • 预处理即可。哪些方法显示有用?有很多选择:二值化,灰度,去歪斜,去噪,模糊,裁剪,缩放......
  • 功能提取。我想如果在特征向量中捕获图像的最有趣特征(角落,线条,网格,图片,徽标)是有帮助的 - 换句话说,如果要素基于所谓的兴趣点。同样,是否有特定的方法已被证明在这方面有所帮助?将图像表示为特征向量的最佳方法是什么?如何提取有趣的特征?
  • 聚类即可。我看到SciKit-Learn提供了几种聚类算法。哪一个最适合我的任务?哪些是最适合的 - 像k-means?

关于相似性任务,我不清楚如何处理这个问题,或者如果可能的话。 欢迎任何帮助...

我意识到这是一个相当广泛的问题。总的来说,我希望得到一些关于我的方法是否有意义的反馈,以及它是否可能产生有用的结果。此外,我非常感谢您对示例,现有管道或一般好建议的任何指示!

示例:

Example form 1

Example form 2

3 个答案:

答案 0 :(得分:1)

预处理: 你可以做,灰度,降噪,删除边框和偏移。应该足够我的计划。

  1. 调整图像大小以匹配A4等常见格式,但请注意保留图像的宽高比。

  2. 你会找到兴趣点并将其裁剪掉。这样你只考虑表单字段,而不是可以变化的条目。

  3. 您可以为文档的每个兴趣点制作指纹。

  4. 您可以从所有个人指纹构建一个完整的图像指纹。

  5. 只需对所有指纹进行排序,无需复杂的聚类。

  6. 在排序的指纹列表中,找出一组文档以某种方式结束而另一组文档开始并分开的位置。

  7. 你完成了!

    如果你去聚类等,这个过程会慢得多,结果也会一样。很好地取决于聚类算法,以及你要向它提供什么样的特征向量。但这应该更快,也更适合程序。

答案 1 :(得分:1)

对这些数据进行聚类将非常困难。 k-means对不良数据点非常敏感,所以不要认为它会很好用。但它在很大程度上取决于您的功能质量。

我不认为像SIFT这样的标准功能会有很多用处。它们适用于具有渐变等的照片。

您需要仔细制作这些功能,例如水平线的数量与垂直线的数量,背景色调等。然后尝试使用鲁棒聚类算法,如DBSCAN和层次聚类。后者可能是一个更容易的起点,但难以扩展。

答案 2 :(得分:0)

我认为,如果您手动识别文档类型的数量,然后通过确定与已识别类别的相似性来查找匹配项,那么您的任务会更容易。

作为一个相似性指数,我会采用以下两种策略之一:

1)基于表格的常量部分进行图像配准。

2)匹配短语/关键词。从您的示例中,即使没有对图像进行任何预处理,也可以通过pytesseract从图像中轻松提取“Antrag auf Krankenhausaufname”:

td

这会产生:

from PIL import Image
import pytesseract

img = Image.open("test.jpg")
text = pytesseract.image_to_string(img, lang="deu")

print text

显然,您可以通过匹配您知道可以通过tesseract从文档中可靠提取的短语来匹配文档。