2016-10-28 29 views
0

我有一些二進制圖像與文本,象下面這樣:如何通過二值圖像的水平投影來分割文本?

圖像1:

enter image description here

圖像2:

enter image description here

和相應的水平投影是:

投影圖像1: enter image description here

投影圖像2: enter image description here

看來,我可以通過水平投影分割,但如何?

在此先感謝!

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

在投影上使用閾值較高的值(例如0.95)。然後你有一個1D的掩碼,其中_sequences_爲零(假),你有字母和其他東西。還有一些(真的)你有全白的coulmns。真實序列的開始和結束索引告訴你白色列開始和結束的位置。請參閱[這裏](http://stackoverflow.com/a/35014061/5008845)提示(使用C++) – Miki

+0

謝謝@Miki。我會在稍後嘗試。我認爲文字和其他內容最顯着的不同之處在於文字區域在投影圖像上的價值正在迅速變化,所以我想用這個特性來查找文字區域。但不幸的是我不知道如何。 – Zieng

回答

-1

分割可以通過使用垂直投影,然後水平投影來完成。但要區分文本信件和其他不需要的東西,可以使用基於形狀的特徵描述符,如「定向梯度直方圖」。使用這些功能,您可以訓練支持SVM或基於神經網絡的分類器,但對於培訓,您首先需要這些樣本字母圖像的數據庫(如MNIST)。

+1

這應該是一個評論,因爲它不回答問題 – Miki

+0

@Gaurav Pawar感謝您的回覆。在應用垂直投影和更多分析後,圖像已經是結果。原始圖像要複雜得多。所以我已經把文本切成了一行,現在我需要找到一種方法來刪除這一行中不相關的東西,只保留文本。 – Zieng