2012-04-18 206 views
9

我想從圖像中檢測文本區域作爲tesseract OCR引擎的預處理步驟,當輸入僅爲文本但輸入圖像包含非文本內容時,引擎工作正常,所以我只想檢測圖像中的文本內容,如何做到這一點的任何想法將是有益的,謝謝。如何從圖像中檢測文本區域?

+1

我會去圖像處理解決方案。嘗試谷歌刪除背景技術。 – 2012-04-18 09:32:05

+0

沒有示例圖像很難理解你的問題。請在imageshack.us上傳圖片並在此處提供鏈接。 – 2012-04-18 18:02:57

+0

沒關係,這是我想從http://imageshack.us/photo/my-images/171/img0052ir.jpg/除去非文本區域的樣本圖像的鏈接,但我認爲正方體管理所有進程上它的所以我們不會關心圖像的外觀。 – chostDevil 2012-04-19 06:51:41

回答

7

看看這個bounding box技術與OpenCV的代碼所示:

輸入

enter image description here

侵蝕

enter image description here

結果

enter image description here

+0

對掃描圖像中的非文本區域,(即當我使輸入圖像上的侵蝕,將輸入圖像中的非文本區域忽視?)什麼 – chostDevil 2012-04-19 17:11:56

+0

當你有一個邊界框,你可以提取它的內容到新的形象,忘掉盒子裏面沒有的其他東西。對於此任務,請在我們的論壇中搜索OpenCV代碼中的** Region Of Interest **或** ROI **。 – karlphillip 2012-04-19 17:14:35

+0

如果有任何技術精確比這個請讓我知道了,非常感謝:) – chostDevil 2012-04-19 18:08:36

2

好吧,我沒有很好地經歷了圖像處理,但我希望我可以幫助你用我的理論方法。

在大多數情況下,文本正在形成平行的水平行,其中行之間的空間將包含批次的背景像素。這可以用來解決這個問題。 所以...如果你組成圖像中的每個像素列,你會得到一個1像素寬的圖像作爲輸出。當輸入圖像包含文本時,輸出將很可能是週期性圖案,其中黑暗區域後面是重複的較亮區域。這些較暗像素的「」將指示文本內容的位置,而較亮的「組」「將指示各行之間的間隙。 您可能會發現,較亮的區域會比其他區域小得多。文本比任何其他圖片元素更通用,所以它應該很容易分離。

您必須執行檢測這些週期性重複的過程。一旦腳本可以確定輸入圖片具有這些特徵,則其包含文本的可能性很高。 (但是,這種方法無法區分實際文本和簡單的水平條紋......)

對於下一步,您必須找到一種方法來確定段落的邊界,使用上述方法。我正在考慮一個漂亮的虛擬算法,女巫會將輸入圖像分成更小,更窄的條紋(50-100像素),並且會分別檢查這些區域。然後,它會比較這些結果以構建填充文本的可能區域的地圖。這種方法不太準確,但它可能不會影響OCR系統。

最後,您需要使用文本地圖在所需位置運行OCR。

另一方面,如果輸入文字旋轉超過3-5度,此方法將失敗。還有另一個退出,如果你只有幾行,那麼你的模式搜索將是非常不可靠的。更行,更準確...

問候,G

2

我是新來的StackOverflow。但是我寫了一個類似於這個問題的答案,這對任何分享這個問題的讀者都是有用的。不管這個問題是否真的是重複的,因爲這個問題是第一個,我會留給其他人。如果我應該複製並粘貼這個答案,請告訴我。我還在谷歌上首先發現了這個問題,而不是我回答的問題,所以這可能會讓更多的人獲得鏈接。特別是因爲它提供了獲取文本區域的不同方式。對於我來說,當我查閱這個問題時,它不適合我的問題案例。

Detect text area in an image using python and opencv