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

Posted

技术标签:

【中文标题】使用 SciKit-Image 和 SciKit-Learn 进行图像预处理和聚类 - 需要一些建议【英文标题】:Image preprocessing and clustering using SciKit-Image and SciKit-Learn - some advice needed 【发布时间】:2017-08-11 03:13:32 【问题描述】:

我有一大堆 1930-40 年代的官方文件图片,包括彩色和黑白,质量相当低(通常小于 250 kB)。这些是医院和市政当局等官方机构使用的标准表格的照片,这些表格是用手工或打字机填写的个人信息。我在这篇文章的末尾放置了两个典型的例子。 (请注意,这些是空表格 - 我宁愿不要将带有个人信息的表格放在网上。)

我需要做的是对集合进行排序,以便将相同类型的所有文档组合在一起。我不知道有多少种不同的类型。或者,我可以首先尝试尝试查找一种特定文档类型的所有实例。我想前一种方法是一种聚类方法,而后者是一种相似方法。

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

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

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

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

例子:

【问题讨论】:

【参考方案1】:

预处理: 你可以做,灰度,去噪,去除边框和歪斜。我的计划应该足够了。

    调整图像大小以匹配某些常见的格式,例如 A4,但要注意保持图像的纵横比。

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

    您为文档的每个兴趣点制作一个指纹。

    您从所有这些单独的指纹中构建了一个完整的图像指纹。

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

    在已排序的指纹列表中,以某种方式找出一组文档的结束位置和另一组文档的开始位置并将它们分开。

你就完成了!

如果你选择集群等,这个过程会慢很多,结果是一样的。这取决于聚类算法,以及你要输入什么样的特征向量。但这应该更快,编程也更整洁。

【讨论】:

【参考方案2】:

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

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

您需要精心设计功能,例如水平线的数量与垂直线的数量、背景色调等。然后尝试鲁棒聚类算法,如 DBSCAN 和层次聚类。后者可能是一个更容易的起点,但更难扩展。

【讨论】:

【参考方案3】:

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

作为相似度指标,我会采用以下两种策略之一:

1) 基于表单常量部分的图像配准。

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

from PIL import Image
import pytesseract

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

print text

这会产生:

Zur Bendmmg für den Veru'dxerlenl ’

Die." Antragudm’n in! der Krln Iren In n: vor
Au/wdum du Krankenhnu an zlnzuru'dlem

Antrag auf Krankenhausaufnahme

._ ‚x, - >

A Namp des Mitgligds:
V'orname: - '

Ehefrau: „_
Kind :

Arbeitgeber :
Behandelt seit arbeitsgnfähig seit

Gehikhlq? ja _ nein i s
Belördemnq durch Kunkenkranwagen — Mxelklahwagen — Ist
‘ -- nichl — eflordarllch. r- „ -
Arbeilsunh‘” Folge eine: Irüheren Arbgttsunlalls’l Un‘allvemlchefle
Berulxkvankheifl Verkghßq Spodunlall. Schlägerei. Trunksuchfl
VevsorgungslaideI-J Fundemwirkung? Folge emer Irühercn. nichl
behobene" Krankhen7

.AZuInfimJn Inlmmidnn g

Krankheitsbezeichnung ')x WM.-."

/



Begründung: __.___.

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

【讨论】:

太棒了!这最接近我正在寻找的解决方案。我曾经摆弄过 Tesseract,但不知道 Pytesseract。

以上是关于使用 SciKit-Image 和 SciKit-Learn 进行图像预处理和聚类 - 需要一些建议的主要内容,如果未能解决你的问题,请参考以下文章

scikit-image:遥感图像geotiff格式转mat格式

AI常用框架和工具丨6. 图像处理库Scikit-image

AI常用框架和工具丨6. 图像处理库Scikit-image

升级 scikit-image 版本的问题

scikit-image 安装错误

在 Scikit-image [Python] 中移动图像