IPhoneでOpenCVを使用していて、画像内の数値を検出する必要があります。画像を小さい画像に分割して、各画像に1つだけの数値(1〜9)を割り当てます。すべての数字は印刷され、手書きではありません。
OpenCVで数値を把握するための最良のアプローチは何でしょうか?
UPDATE:
数字を見つけて抽出しました。彼らはこのように見えます:
http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg
それらが抽出されると、同じサイズになります。私はたくさんの画像を保存し、それらをOCRディレクトリに配置して、それらを数値に分類しています。例:ocr/1/100.jpg 101.jpg ....およびocr/2/200.jpg 201.jpg ....
次に、基本的なOCRチュートリアルと同じアプローチを使用しました: http://blog.damiles.com/?p=9
しかし、私はiPhone用にプログラミングしていて、C++コード(コンパイル時のエラーなど)を使用できず、highguiにアクセスできません。
私はcvMatchTemplate()を使用して一連の画像を照合しましたが、かなりうまくいかないようです...
私が試すことができる他のアイデアはありますか?
数字が印刷されている場合、ジョブは非常に簡単です。一致する機能のニースセットを理解する必要があります。数字が1つのフォントである場合は、このアプローチで回避できます。
小さなトレーニングセットに対してこれを行い、各数値の「平均」画像を撮ります
新しい画像の場合は、上記の手順に従いますが、最後の手順は、数値テンプレートごとの画像の絶対的な違いです。次に、差分の合計(差分画像のピクセル)を取得します。最小のものはあなたの番号です。
上記はすべて基本的なOpenCV操作です。
多分最もシンプルで便利な方法は、mlアルゴリズムとしてsvmを使用することです http://opencv.willowgarage.com/documentation/cpp/support_vector_machines.html と特徴ベクトルとして灰色の画像。
基本的にあなたの問題は、特徴ベクトルを分類することです。これは、いくつかの前処理ステップの後のピクセル強度のセットです。たとえば、このタスクには任意の分類子を使用できます。ニューラルネットワーク。OpenCV内にC実装が必要です。また、サポートベクターマシン用のC libsvmライブラリを試すこともできます。
この問題に関連する 良いサイト があり、多くの論文とトレーニングデータベースがあります。
目的のC++? .mファイルの名前を.mmに変更すると、iPhoneプロジェクトでc ++を使用できるようになります。
畳み込みニューラルネットワークは、手書きの数字に最適なアルゴリズムです。これらはUSPSなどのほとんどのシステムに実装されています。アルゴリズムを説明するいくつかの論文を次に示します。 http://yann.lecun.com/exdb/lenet/
Tesseractは、iPhoneですぐに利用できる素晴らしい無料のOCRエンジンでもあり、独自のトレーニング画像セットを使用できます。 http://tinsuke.wordpress.com/2011/11/01/how-to- compile-and-use-tesseract-3-01-on-ios-sdk-5 /
これは素晴らしい オープンソース 、iPhone上のORCDemoです。
これはあなたを助けるかもしれません。 OpenCV APIはどちらも同じであるため、コードをPython=からC++に変換することは難しくありません。
HOG + SVM(カーネルで遊んでみてください)