2011-06-24 1 views
5

おそらくopenCVを使用してBoggleボード上の文字を認識することに興味があります。文字はすべて同じフォントですが回転させることができるので、標準的なテキスト認識ライブラリを使用することは少し問題です。さらに、MとWにはそれらを区別するための下線があり、Qは実際にはQu。 私はイメージの中の別個の文字を分離することができると確信しています。私は認識部分をどうやって行うのかと思っています。画像からのボグル/スクラブル文字の認識

答えて

6

どのくらい速くする必要があるかによって異なります。 あなたは、私はあなたを示唆している手紙の広場を分離し、文字を含む正方形の辺が水平方向と垂直になるように回転させることができた場合:

  • は文字で(白/黒に画像を変換1つの色と他のダイの残りの部分
  • 4つの可能な方向(すなわち直立と90度、180度と270度の回転)のすべての文字の参照画像のデータセットを作成します。
  • cvMatchTemplateを使用して、新しい画像ごとにデータセットから最適なマッチング画像を見つけます。

これは少し時間がかかるので、最適化は可能ですが、妥当な結果が得られると思います。 正しい向きで取得することが困難な場合は、新しい入力のローテーションされたバージョンをオンザフライで生成し、それらを参照データセットに一致させることもできます。向きは問題ではない場合、あなたが使用することができます(つまり、あなたの尻込みブロック検出も正しい方向にブロックを置くことができる)

  • :文字が異なるスケールを持っている場合は

    その後、私は2つのオプションを考えることができます入力画像のスケールの大まかなインジケータとしての文字色を持つ領域の境界ボックス、および参照画像上のバウンディングボックスと同じサイズになるようにスケールします(参照画像ごとに異なる場合があります)

  • Ifオリエンテーションが問題になり、検索スペースのパラメータとしてスケーリングを追加するだけです。あなたはすべての回転(0〜360度)とすべての合理的なサイズ(あなたはおそらくあなたが持っている画像から合理的な範囲を推測できるはずです)を検索します。
+0

さまざまなサイズ/ズームの画像で使用できますか?すなわち、カメラがタイルに近づいているか、遠くにある場合、 – eggbert

+0

あなたの質問に私の答えが更新されました。 –

4

Tesseractのような単純なOCRを使用できます。それは使いやすく、非常に高速です。しかし、あなたは4回転をしなければならないでしょう(@ jilles de witの答えに言及されているように)。

2

私はOpenCVに基づいてこれだけのiOS-appを作った。それはSnapSolveと呼ばれています。検出の仕組みについてはblogと書きました。 基本的には、26x4の可能なすべての文字+回転を各図形に重ねて表示し、どの文字が最も重なっているかを確認します。これを少し微調整することは、オーバーレイ画像を滑らかにして、文字がほぼ重なり合っているがかなりはっきりしていないアーティファクトを取り除くことです。

+0

私は数年間私のプロジェクトを見ていないが、非常に興味深い記事、ありがとう。 javacスクリプトでそれを行うことについてのブログへのリンクもかなり面白いです。 – eggbert