2012-07-13 20 views
11

EmguCVでのテキスト認識のための画像に適用する画像前処理操作は何が最適ですか?テキスト認識のための画像前処理

私は2つのサンプル画像hereを含めました。

テキストが任意のサイズである可能性があるため、ローパスフィルタまたはハイパスフィルタを適用することは適切ではありません。私はメジアンフィルターとバイラテラルフィルターを試しましたが、画像にはあまり影響しないようです。

理想的な結果は、すべてのテキストが白で残りの部分が黒である2値画像です。この画像は、OCRエンジンに送られる。

ありがとうございました

+1

ここにサンプル画像をアップロードしてください。リンクは403の禁止を与える – Alupotha

答えて

16

ベストセラーのようなものはありません。デジタル画像はさまざまなキャプチャデバイスで取得でき、各デバイスには独自の前処理システム(フィルタ)や画像を大幅に変更したり、ノイズを追加することができるその他の特性を組み込むことができます。だから、すべてのケースを別々に扱う(前処理する)必要があります。

しかし、は、例えば、検出を改善するために使用することができるcommmon操作あり、非常に基本的なものは、グレースケール画像を2値化するthresholdを適用する画像を変換することであろう。前に使用したもう1つのテクニックはthe bounding boxで、テキスト領域を検出することができます。画像から騒音を除去するには、侵食/拡張手術に興味があるかもしれません。私はthis postでこれらの操作のいくつかを実証します。今

あなたにできる簡単なアプローチを表示するには、:また

、あなたが見てみる必要があるOCRとOpenCVの程度その他の興味深い記事がありますサンプルイメージで使用する場合は、色を反転してしきい値を適用した結果です。

cv::Mat new_img = cv::imread(argv[1]); 
cv::bitwise_not(new_img, new_img); 

double thres = 100; 
double color = 255; 
cv::threshold(new_img, new_img, thres, color, CV_THRESH_BINARY); 

cv::imwrite("inv_thres.png", new_img); 
+0

私は、各画像に対して適切な侵食/拡張動作のセットを見つけなければならないと思います。今は、すべての画像で合理的にうまく機能する組み合わせを見つけることができないようです。しかし、流域の例が最も効果的です。 – Osiris

+0

イメージ内のテキストを検出する他の方法はありますか? – Maystro

+1

2番目のOpenCVリンクが死んでいます。これは別の方法です:https://github.com/damiles/basicOCR – yurez

2

形態学的画像処理を試してください。 thisをご覧ください。ただし、バイナリイメージでのみ動作するため、イメージを2値化する必要があります(しきい値?)。それは簡単ですが、フォントサイズに依存しているため、1つの構造要素がすべてのフォントサイズで機能しません。一般的な解決策が必要な場合は、画像にテキスト検出用の論文が多数あります。この用語をGoogle検索で検索すると、役に立つ出版物が提供されるはずです。

+0

ありがとう、その紙は本当に便利になるだろう。私は形態学的操作を見ましたが、あなたが言ったように、それらはテキストサイズに依存しています。 – Osiris

関連する問題