9

OCRを実行して画像内の文字を識別できるように、ビットマップ画像をC#プログラムにフィードしています。画像が回転していなければ、これはかなりうまくできます。ただし、プログラム要件の1つは、画像が回転したかどうかをプログラムが自動的に判断し、これらの回転を自動的に修正することです。

画像全体に線をトレースし、文字と接触する点を記録する簡単な方法を実装してから、線の点に対して単純な線形回帰を実行してみました。これはある程度機能しますが、文字の曲率などのためにあまり正確であることが証明されていません。

この問題を解決するためのより良い方法があるかどうか疑問に思いましたか?よろしくお願いします!:)

4

6 に答える 6

2

テキストの線を認識する場合は、線がほとんど実線になるように画像をぼかして、線の方向を見つけます(フーリエ変換の分析または隆起の検出のいずれかを使用)。

于 2012-11-15T05:52:01.993 に答える
2

確かに興味深い問題です。回転がわかりやすい特定の文字を探します。たとえば、大文字のA、R、またはKは、下部の両方がほぼ同じ水平面である必要があります。もう1つのオプションは、識別できない文字を取得し、さまざまな方法で回転させて、識別を再試行することです。生のスキャンで識別できなかった文字を回転させたときに識別できる場合、それはかなり大きな手がかりです。認識できない文字を認識可能な文字にする「修正」回転を特定したら、同じ回転値を他の文字に適用します。

于 2012-11-14T21:11:39.293 に答える
2

gmseDeskewアルゴリズムを使用して、プログラム内の画像をデスキューします。それは非常にうまく機能します。

于 2012-11-16T01:13:25.533 に答える
1

テキストが印刷されたドキュメント(列とテキストの行)のようにフォーマットされている場合は、これを利用できます。

ドキュメントテキストによく使用されるアプローチは、投影プロファイルを実行することです。

  1. 特定の方向でドキュメントをスキャンし、各スキャンラインの「黒」ピクセルの数を合計します(カウントの1D配列を作成し、各インデックスはY座標、プロファイルを表します)。
  2. カウントの分散を計算します(プロファイル)。
  3. 複数の角度で繰り返します(処理を減らすために二分探索方式で実行できます)
  4. 最大の分散をもたらす角度は正しい角度です(テキスト行が印刷されたテキストから大きなピークを作成し、行間にテキストがないために低い谷が作成されるため)

次に、この角度を見つけた後、それに応じて画像を調整し、素晴らしいOCRを実行できます。

于 2012-11-15T14:40:51.593 に答える
0

以前にも同様の問題に直面し、簡単で迅速な解決策を探し、最終的には市販のツールキット(leadtools)を使用しました。これを使用して、OCRする前に画像の自動処理を行うことができます。このヘルプトピックをチェックして、このツールキットを使用して画像を処理およびスキャンする方法を知ることができます。

于 2012-12-02T08:36:23.780 に答える
0

テキストに隣接する縦長の線(つまり、左マージン)を見つける方が簡単な場合があります。スキャンラインごとに、最初の黒いピクセルを記録します。それらすべてを線形回帰に入れると、ほぼ垂直の線が得られるはずです。真の垂直からの角度を測定すると、テキストの回転を解除できるはずです。上、下、右側にも同じことをして、平均を取ることを想像できます。

于 2012-11-14T21:52:46.467 に答える