Python: 在一维分布中识别波浪形模式

我的问题简述如下:在Python中,给定一个一维分布,如何识别该分布中具有类似正弦波的波浪形模式的区域?

我正在尝试在历史文档的页面扫描中识别图像。这些图像在扫描中几乎总是占据整个宽度(也就是说,它们几乎从不与文本并排)。这让我认为最简单的解决方案是移除页面扫描中包含文本行的区域。

使用以下代码片段,可以将图像读取到内存中,并测量图像中每一行的像素亮度总和,从上到下,将输入图像转换为下面的图表:

import matplotlib.mlab as mlabimport matplotlib.pyplot as pltfrom scipy.ndimage import imreadimport numpy as npimport sysimg = imread(sys.argv[1])row_sums = list([(sum(r)/len(r)) for r in img ])# the size of the returned array = size of row_sums input arraywindow_size = 150running_average_y = np.convolve(row_sums, np.ones((window_size,))/window_size, mode='same')# plot the y dimension pixel distributionplt.plot(running_average_y)plt.show()

输入图像:

enter image description here

输出图表:

enter image description here

基于这个分布,我现在想识别曲线中具有规律波浪形模式的区域,这些模式在图表的前三分之一和后三分之一处可见(粗略来说)。其他人对如何处理这项任务有何建议?

起初,我尝试对整个一维分布进行线性模型拟合,但由于各种原因失败了。现在我认为可能有意义的是尝试对曲线的某些部分拟合类似正弦波的模型,但这似乎有些过头。其他人对如何最好地处理这项任务有何建议?任何建议或见解都将非常受欢迎!


回答:

这并没有回答你的问题,但可能解决了你的问题。平滑行总和隐藏了一个事实,即图像中的文本行被白色空间很好地分隔开——这对于活动字体印刷来说是预期的现象。

你可以使用白色空间作为分隔符,将图像分成块。在大多数情况下,一个块对应于一行。非常大的块对应于图像。

enter image description here

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注