2

私のプロジェクトでは、スキャンしたドキュメントの画像前処理ライブラリを作成しています。今のところ、行削除機能にこだわっています。

問題の説明: スキャンされたフォームのサンプル:

Name*  : ______________________________
Age* : ______________________________

Email-ID: |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

注: 以下は、その他の条件です。

  • スキャンされた文書には、さらに多くの縦方向および横方向のガイドラインが含まれる場合があります。
  • 線の太さが 1px を超える場合があります
  • ドキュメント自体が正しく印刷されず、インクの膨れや厚さの不均一な形でノイズが発生する可能性があります
  • ドキュメントの背景や線に色が付いている可能性があります

今私がやろうとしているのは、これらの行を検出して削除することです。その際、手書きの内容が失われてはなりません。

解決策: 現在の解決策は Java で実装されています。

キャニー/ソーベル エッジ検出器としきい値フィルター (画像をモノクロにするため) の組み合わせを使用して、これらの線を検出しました。前のアクションから、ピクセルの白黒配列を取得します。配列をトラバースし、そのピクセルの輝度が指定されたビン値を下回るかどうかを確認します。そして、そのようなピクセルが 30 (ピクセル単位の最小行長) 見つかった場合は、それらを削除します。縦線についても同じことを繰り返しますが、横線除去によるカットがあることを考慮して.

解決策はうまくいくようですが。しかし、次のような問題があります。

  • 重複文字の削除
  • 画像内の文字の間隔が適切でない場合も、線と見なされます。
  • エッジ検出の出力画像は白黒です。
  • 少し遅い。通常、2480*3508 の画像の場合、約 40 秒かかります。

適切かつ効率的に行う方法を親切にガイドしてください。また、オープンソースのライブラリがあれば教えてください。

ありがとう

4

1 に答える 1

1

最初に、私は一般的な画像処理、特に OCR について何も知らないことを述べたいと思います。

それでも、非常に単純なヒューリスティックが頭に浮かびます。

  1. イメージ内のピクセルを連結要素に分離します。
  2. 接続されたコンポーネントごとに、次のヒューリスティックの 1 つ以上を使用して、それが直線であるかどうかを決定します。
    1. 平均的な文字の長さよりも長いですか?
    2. 他の文字の近くに表示されますか? (インクの膨張やアーティファクトを除去するため)。
    3. その X 勾配と Y 勾配は十分に大きくなっていますか? これにより、この接続されたコンポーネントに水平線以上のものが含まれていることを確認できます。

私が見ることができる唯一の問題は、誰かが水平線に次のように文字を書いた場合です。

   /\     ___
  /  \   /   \
  |__|   |___/
 -|--|---|---|------------------
  |  |    \__/

その場合、行は残りますが、とにかくこのケースを処理する必要があります。

前述したように、私は決して画像処理の専門家ではありませんが、非常に単純なトリックが機能する場合があります。

于 2010-06-29T13:50:34.387 に答える