【发布时间】:2018-01-28 21:15:20
【问题描述】:
我的问题很简单:给定 Python 中的一维分布,如何识别该分布中具有类似正弦的波动模式的区域?
我正在努力识别历史文档页面扫描中的图像。这些图像在扫描中基本上总是全角的(也就是说,它们基本上从不与文本并列)。这使我相信最简单的解决方案是删除页面扫描中包含文本行的区域。
使用以下 sn-p,可以将图像读入内存并测量图像中每一行的聚合像素亮度,从上到下,将输入图像转换为下图:
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from scipy.ndimage import imread
import numpy as np
import sys
img = 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 array
window_size = 150
running_average_y = np.convolve(row_sums, np.ones((window_size,))/window_size, mode='same')
# plot the y dimension pixel distribution
plt.plot(running_average_y)
plt.show()
输入图片:
输出图:
鉴于这种分布,我现在想要识别曲线区域,这些区域具有人们在绘图的前三分之一和后三分之一中看到的规则波动模式(粗略地说)。其他人对如何完成这项任务有想法吗?
起初我尝试将线性模型拟合到整个一维分布,但由于各种原因失败了。我现在认为尝试将正弦波之类的东西拟合到曲线段可能是有意义的,但这似乎有点矫枉过正。其他人是否对如何最好地完成这项任务有想法?任何建议或见解将不胜感激!
【问题讨论】:
-
您可能想在dsp.stackexchange.com询问
-
像DTFT或Wavelet transform这样的分段频域?不是专家,但似乎有帮助。
-
愿你想做适合顺序的样条拟合。
-
所有图片都有黑框吗?如果您不通过卷积进行平滑处理,则该框架非常明显。
标签: python opencv numpy machine-learning classification