2014-01-14 86 views
5

我一直在嘗試使用圖像處理腳本/ OCR,這將允許我從下圖中找到的框中提取字母(使用tesseract)。使用OpenCV OCR對圖像進行銳化

http://i622.photobucket.com/albums/tt310/seraphelitis/rename_zps80dcdd06.png

繼處理了很多,我能得到的圖片看起來像這樣

3

爲了消除噪音我倒的圖像,然後floodfilling和高斯模糊去除噪音。這就是我接下來的結果。

4

通過一些threholding和侵蝕運行它來消除噪聲(糜爛是歪曲文本中的步驟)我能得到的圖像看起來像這樣通過正方體運行它之前之後

enter image description here

這是一個非常好的渲染,可以通過tesseract獲得相當準確的結果。雖然它有時會失敗,因爲它將哈希(#)作爲H或W讀取。這使我想到了我的問題!

有沒有一種方法使用opencv,skimage,PIL(opencv優先)我可以銳化這個圖像,以增加我tesseract正確閱讀我的形象的機會?或者有沒有一種方法可以從第三張圖像到最終圖像,而不必使用最終扭曲圖像中文字的侵蝕。

任何幫助將不勝感激!

+0

你可以分享你已經做了哪些預處理嗎? – Dabo

+0

我添加了幾個導致我所指的失真的關鍵步驟:) – JamesLLee

+1

[圖像處理和提取字符]的可能重複(http://stackoverflow.com/questions/20427759/image-processing-and-字符提取) – karlphillip

回答

4

OpenCV確實具有像filter2D這樣的功能,它可以將任意內核與給定圖像進行卷積運算。特別是您可以使用用於圖像銳化的內核。主要問題是這是否會改善您的OCR庫的結果。圖像已經非常清晰,圖像中的噪點不是模糊的結果。我從來沒有與teseract合作過,但我確信它已經完成了所有的降噪工作。在這個過程中「幫助」他可能會產生相反的效果。例如,任何銳化過程傾向於放大噪聲(與通常模糊圖像的降噪過程相反)。提供原始(未處理)圖像時,大多數計算機視覺庫會提供更好的結果。

編輯(問題更新後): 有多種方式可以這樣做。我會測試的第一個是:你的第一個二進制鏡像非常乾淨清晰。而不是使用降低字母質量的形態操作切換到過濾輪廓。使用findContours函數查找圖像中的所有輪廓並存儲它們的層次結構(即哪個輪廓在其中)。從所有找到的輪廓中,實際上只需要第一個和第二個層次上的輪廓,即每個字母的外輪廓和​​內輪廓(零水平輪廓是最外輪廓)。其他輪廓可以丟棄。在屬於第一級的輪廓中,可以放棄那些邊界框太小而不能成爲真實字母的輪廓。經過這兩個丟棄程序後,我預計剩下的大部分輪廓都是那些字母的一部分。在白色圖像上繪製它們並運行OCR。 (如果您想在黑色背景上使用白色字母,則需要反轉輪廓中頂點的順序)。

+0

謝謝你的repsonse,邁克爾!我用更多的步驟更新了原始帖子,可能會澄清導致文本失真的原因。最終扭曲圖像中的文字是爲了獲得第四張圖像而侵蝕第三張圖像。有沒有可能有一個替代工具,我可以用來獲得相同的效果?謝謝! – JamesLLee

+0

感謝您的更新。我不知道我將如何去隔離第一和第二級輪廓,但希望一些快速的谷歌搜索會對我有好處。建議非常感謝! – JamesLLee