使用 SciKit-Image 和 SciKit-Learn 进行图像预处理和聚类——需要一些建议
Image preprocessing and clustering using SciKit-Image and SciKit-Learn - some advice needed
我有一大堆 1930-40 年代的官方文件图片,包括彩色和黑白,质量相当低(通常 < 250 kB)。这些是医院和市政当局等官方机构使用的标准表格的照片,这些表格是用手或打字机填写个人信息的。我在这篇 post 的末尾放了两个典型的例子。 (请注意,这些是空表格 - 我不想将包含个人信息的表格放在网上。)
我需要做的是对集合进行排序,以便将所有相同类型的文档组合在一起。我不知道有多少种不同的类型。或者,我可以先尝试查找一种特定文档类型的所有实例。我想前一种方法是一种聚类方法,而后者是一种相似性方法。
关于聚类方法,我的想法是 (1) 预处理图像以增强有用信息,(2) 从每个图像中提取特征向量,以及 (3) 将这些特征向量提供给聚类算法。我想使用 SciKit-Image 和 SciKit-Learn 库来完成这三个任务。我已经做了一些研究和阅读以熟悉主题和可能性,但我不知道从哪里开始并有一些基本问题。
- 预处理。哪些方法已被证明是有用的?选项太多了:二值化、灰度化、去歪斜、去噪、模糊、裁剪、缩放……
- 特征提取。我想如果图像的最有趣的特征(角、线、网格、图片、徽标)被捕获在特征向量中——换句话说,如果这些特征基于所谓的兴趣点,那将会很有帮助。同样,是否有特定方法已证明在这方面有帮助?将图像表示为特征向量的最佳方式是什么?如何提取有趣的特征?
- 聚类。我看到 SciKit-Learn 提供了几种聚类算法。哪些最适合我的任务?哪些最适合入手 - 比如 k-means?
关于相似性任务,我不清楚如何处理这个问题,或者如果可能的话。 欢迎任何帮助...
我意识到这是一个相当宽泛的问题。总的来说,我希望收到一些关于我的方法是否有意义以及是否可能产生有用结果的反馈。此外,我将非常感谢任何指向示例、现有管道或一般性好的建议的指针!
示例:
预处理:
你可以做,灰度,去噪,去除边框和去歪斜。应该足以让我的计划生效。
调整图像大小以匹配一些常见的格式,例如 A4,但注意保持图像的纵横比。
您确实找到了兴趣点并将其裁剪掉。这样你就只考虑表单字段,而不是可以变化的条目。
您为文档的每个兴趣点制作指纹。
你从所有这些单独的指纹构建了一个完整的图像指纹。
只需对所有指纹进行排序,无需复杂的聚类。
在已排序的指纹列表中,以某种方式找出一组文档结束的位置和另一组文档的开始位置并将它们分开。
大功告成!
如果你进行集群等,这个过程会慢很多,但结果是一样的。好吧,这取决于聚类算法,以及您要为其提供什么样的特征向量。但这应该更快,并且编程起来也更整洁。
聚类此类数据将非常困难。 k-means 对坏数据点非常敏感,所以不要认为它会很好地工作。但这在很大程度上取决于您的功能质量。
我认为像 SIFT 这样的标准功能不会有多大用处。它们适用于具有渐变等的照片。
您需要精心设计功能,例如水平线的数量与垂直线的数量、背景色调等。然后使用 robust 聚类算法(例如 DBSCAN 和层次聚类)进行实验。后者可能是一个更容易的起点,但更难扩展。
如果您手动确定文档类型的数量,然后尝试通过确定与您确定的类别的相似性来查找匹配项,我认为您的任务会容易得多。
作为相似性指数,我会采用以下两种策略之一:
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 从文档中可靠提取的短语来匹配文档。
我有一大堆 1930-40 年代的官方文件图片,包括彩色和黑白,质量相当低(通常 < 250 kB)。这些是医院和市政当局等官方机构使用的标准表格的照片,这些表格是用手或打字机填写个人信息的。我在这篇 post 的末尾放了两个典型的例子。 (请注意,这些是空表格 - 我不想将包含个人信息的表格放在网上。)
我需要做的是对集合进行排序,以便将所有相同类型的文档组合在一起。我不知道有多少种不同的类型。或者,我可以先尝试查找一种特定文档类型的所有实例。我想前一种方法是一种聚类方法,而后者是一种相似性方法。
关于聚类方法,我的想法是 (1) 预处理图像以增强有用信息,(2) 从每个图像中提取特征向量,以及 (3) 将这些特征向量提供给聚类算法。我想使用 SciKit-Image 和 SciKit-Learn 库来完成这三个任务。我已经做了一些研究和阅读以熟悉主题和可能性,但我不知道从哪里开始并有一些基本问题。
- 预处理。哪些方法已被证明是有用的?选项太多了:二值化、灰度化、去歪斜、去噪、模糊、裁剪、缩放……
- 特征提取。我想如果图像的最有趣的特征(角、线、网格、图片、徽标)被捕获在特征向量中——换句话说,如果这些特征基于所谓的兴趣点,那将会很有帮助。同样,是否有特定方法已证明在这方面有帮助?将图像表示为特征向量的最佳方式是什么?如何提取有趣的特征?
- 聚类。我看到 SciKit-Learn 提供了几种聚类算法。哪些最适合我的任务?哪些最适合入手 - 比如 k-means?
关于相似性任务,我不清楚如何处理这个问题,或者如果可能的话。 欢迎任何帮助...
我意识到这是一个相当宽泛的问题。总的来说,我希望收到一些关于我的方法是否有意义以及是否可能产生有用结果的反馈。此外,我将非常感谢任何指向示例、现有管道或一般性好的建议的指针!
示例:
预处理: 你可以做,灰度,去噪,去除边框和去歪斜。应该足以让我的计划生效。
调整图像大小以匹配一些常见的格式,例如 A4,但注意保持图像的纵横比。
您确实找到了兴趣点并将其裁剪掉。这样你就只考虑表单字段,而不是可以变化的条目。
您为文档的每个兴趣点制作指纹。
你从所有这些单独的指纹构建了一个完整的图像指纹。
只需对所有指纹进行排序,无需复杂的聚类。
在已排序的指纹列表中,以某种方式找出一组文档结束的位置和另一组文档的开始位置并将它们分开。
大功告成!
如果你进行集群等,这个过程会慢很多,但结果是一样的。好吧,这取决于聚类算法,以及您要为其提供什么样的特征向量。但这应该更快,并且编程起来也更整洁。
聚类此类数据将非常困难。 k-means 对坏数据点非常敏感,所以不要认为它会很好地工作。但这在很大程度上取决于您的功能质量。
我认为像 SIFT 这样的标准功能不会有多大用处。它们适用于具有渐变等的照片。
您需要精心设计功能,例如水平线的数量与垂直线的数量、背景色调等。然后使用 robust 聚类算法(例如 DBSCAN 和层次聚类)进行实验。后者可能是一个更容易的起点,但更难扩展。
如果您手动确定文档类型的数量,然后尝试通过确定与您确定的类别的相似性来查找匹配项,我认为您的任务会容易得多。
作为相似性指数,我会采用以下两种策略之一:
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 从文档中可靠提取的短语来匹配文档。