私がやりたいのは、マーカー(絵が描かれたかなり小さな紙)を追跡することです。そこにあるかどうか知りたいだけです。マーカーを単純な幾何学的形状 (紙から切り取った星) にする場合の輪郭の検索や、もちろん SIFT や SURF などのより深刻なものなど、さまざまなアルゴリズムを検討してきました。
現在、FLANN で SURF を試しています。使用するコードは次のとおりです (ほとんど変更なし): http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html
問題は、結果が本当に良くないことです: 私の結果 http://img46.imageshack.us/img46/8729/xpu5.jpg
マーカー以外のすべてのものと一致するようです... マーカーで得られるいくつかの幸運な一致でさえ、2 つの画像間で同じではありません。私の「実世界」でのアプリケーションは、多くのオブジェクトがあり、カメラが少し揺れている白い均一な背景ではなく、非常に「ノイズの多い」環境になるため、これは大きな問題です。また、最初は、これよりもずっと小さいマーカー (current_size/4) を使用したいと考えていました。
私の質問は、どうすれば精度を向上させることができますか? より多くのテクスチャなどを使用して、より複雑なマーカーを作成する必要があります (SURF/SIFT はテクスチャの低いオブジェクトの検出が苦手であると読んだため) ? 別のマッチャーは大きな違いを生むでしょうか、それとも SIFT を使用する必要があるのでしょうか? あるいは、マーカーには別のアプローチ/アルゴリズムの方が適していますか? マーカーがその一部ではなく完全に表示されている場合にのみ検出された場合、それは問題にならないことを知っています(実際には、この方法の方が便利です)。マーカーベースのARを使用したことがあるので、それらのライブラリが得意であることは知っていますが、使用するアルゴリズムの種類はわかりません。いずれにせよ、サンプル コード、リンク、または単なるアドバイスをいただければ幸いです。
いくつかの追加の有用な情報: 私はこれをラズベリー Pi (C++ OpenCV、Linux Debian) で実行しています。カメラ ボードが統合されているため、解像度が最適ではなく、低速です (コードの実行に 1 ~ 2 分)。問題ありません。私はリアルタイムを目指しているわけではありません (いいと思いますが)。このテストでは、できるだけ良い結果が得られるように、巨大な画像 (2592x1944) を使用しました。解像度を 800x600 に変更する必要がありますか? 奇妙な理由で精度が向上しますか?
編集: 要求に応じて、元の画像: http://img35.imageshack.us/img35/2329/5a93.jpg http://img703.imageshack.us/img703/847/cwg8.jpg
EDIT2: ブルート フォース マッチャーを実行しただけで、まったく同じ結果が得られました。スクリーン ショットを投稿すると、以前のスクリーン ショットをコピーすることになります。今、私は自分のイメージが悪いだけだと思い始めています. より良いカメラで参照画像の写真を撮り、それを使用して、他のカメラ (現在 Pi で使用しているもの) で撮影した画像と一致させるのは賢明でしょうか? カメラのパラメーターが何らかの役割を果たす可能性があることを知っているので、私の質問です。