【问题标题】:How to segmentation text by horizontal projection of a binary image?如何通过二值图像的水平投影来分割文本?
【发布时间】:2016-10-29 15:11:39
【问题描述】:

我有一些带有文本的二进制图像,如下所示:

图片 1:

图片 2:

而对应的水平投影为:

图像 1 的投影:

图像 2 的投影:

看来我可以通过水平投影进行分割,但是如何呢?

提前致谢!

PS:做投影的代码:

from matplotlib import pyplot as plt
import pylab

(rows,cols)=img.shape
h_projection = np.array([ x/255/rows for x in img.sum(axis=0)])
plt.plot(range(cols), h_projection.T)
pylab.savefig(outfile, bbox_inches='tight')
plt.clf()

为了消除误解,当我说水平投影时,我的意思是a projection made on a plane parallel to the horizon.

【问题讨论】:

  • 在投影上使用高值(例如 0.95)的阈值。然后你有一个 1D 掩码,其中有 sequences 零(假),你有字母和其他东西。和那些(真的)你有所有白色的coulmns。真实序列的开始和结束索引告诉您白色列的开始和结束位置。请参阅here 以获取提示(在 C++ 中)
  • 谢谢@Miki。我稍后会尝试。我觉得文本和其他东西最显着的不同是文本区域在投影图像上具有快速变化的值,所以我想使用这个功能来找到文本区域。但不幸的是我不知道怎么做。

标签: opencv image-processing


【解决方案1】:

可以通过使用垂直投影然后水平投影来完成分割。但是要区分文本字母和其他不需要的东西,您可以使用基于形状的特征描述符,例如“定向梯度直方图”。使用这些功能,您可以训练基于 SVM 或神经网络的分类器,但首先要进行训练,您需要这些样本字母图像的数据库(如 MNIST)。

【讨论】:

  • 这应该是评论,因为它没有回答问题
  • @Gaurav Pawar 感谢您的回复。这些图像已经是我应用垂直投影和更多分析后的结果。原始图像要复杂得多。所以我已经把文字剪成了一行,现在我需要想办法把这行不相关的东西去掉,只保留文字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2012-12-28
  • 1970-01-01
  • 2021-06-30
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多