web-dev-qa-db-ja.com

テキスト認識のための画像前処理

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

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

テキストのサイズは任意であるため、ローパスまたはハイパスフィルターを適用することは適切ではありません。私は中央値とバイラテラルフィルターを試しましたが、それらは画像にあまり影響を与えていないようです。

理想的な結果は、すべてのテキストが白で、残りのほとんどが黒のバイナリイメージです。その後、この画像はOCRエンジンに送信されます。

ありがとう

12
Osiris

最高のセットに勝るものはありません。デジタル画像は異なるキャプチャデバイスで取得でき、各デバイスは独自の前処理システム(フィルター)や、画像を大幅に変更し、ノイズを追加する可能性のあるその他の特性を組み込むことができることに注意してください。したがって、すべてのケースは異なる方法で処理(前処理)する必要があります。

ただし、検出を改善するために使用できる一般的な操作があります。たとえば、非常に基本的な操作は、画像をグレースケールに変換して適用することです。 a threshold 画像を二値化します。以前に使用したもう1つの手法は、テキスト領域を検出できる バウンディングボックス です。画像からノイズを除去するには、侵食/拡張操作に関心があるかもしれません。これらの操作の一部を この投稿 で説明します。

また、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);
17
karlphillip

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

2
go4sri