7

私たちは、特定の標識と指示に従い、指示されたルートを通過する自律型ロボット(大学のイベントで)を作成しています。ロボットの頭にはカメラが取り付けられます。前方の道路や壁に描かれた標識に従い、それに応じて決定を下します。標識は緑の矢印(GO信号の場合)、または停止の標識としての赤いTになります。ロボットはこれらの記号をリアルタイムでスキャンし、必要なアクションを実行します。これらの標識は、正面の壁に貼ったり、前方の小道に描いたりすることができます。

必要な画像変換アルゴリズムまたは方法を探してみましたが、この分野はまったく新しいものです。この問題にどのように取り組むことができるか、そして私たちを助けるかもしれない必要なコードについてあなたに助けを求めます(私たちが初心者であると仮定して)。

次のスレッドを調べましたが、混乱しています:-OpenCVオブジェクト検出-中心点 -この画像の長方形を認識する方法は? -http ://www.chrisevansdev.com/computer-vision-opensurf.html(使用できません)

イベントに与えられたヒントの1つは、三角形の中心がその長方形の右側にあるか(右に行くことを意味する)、そうでないかを見つけるために、矢印を長方形と三角形を組み合わせたものとしてモデル化できることでした。Tについても同様です。

ありがとう!:)

4

2 に答える 2

8

兆候が以前にわかっている場合は、「特徴検出によってオブジェクトを認識する」方法を使用できます。

アイデアは、サイン(矢印またはT)の写真があり、オフラインで次のトレーニング手順を実行することです。

1-機能の検出(、SURF、FASTなどを使用)

2-SIFT、FREAKなどを使用した(機能からの)記述子の抽出...

次に、リアルタイムの部分があります。フレームごとに、特徴の検出と記述子の抽出を実行する必要がありますが、トレーニング画像とのマッチングを行って、取得したオブジェクトを確認する必要があります。リアルタイムで機能する例:

cv::FAST detector;
cv::FREAK descriptor;
BFMatcher matcher = BFMatcher(NORM_HAMMING,false);

detector.detect(frame,keypoints_frame);
descriptor.compute(frame, keypoints_frame,descriptors_frame);
matcher.match(descriptors_trainning, descriptors_frame);

これがマッチングの最初のアプローチであり、次に外れ値を調整して削除する必要があります。いくつかのテクニックは

  • 比率テスト

  • クロスチェック

  • RANSAC+ホモグラフィ

ここに完全ながあります。

于 2012-12-19T08:28:28.177 に答える
3

イベントの前にサインを取得できると思います。矢印のサインを取得し、彼から「シフト記述子」を取得して、ロボットに保存します。

次に、ロボットが取得する各フレームで、標識の色を探します。標識に似たものを見つけたら、記述子をふるいにかけ、保存されている記述子と新しい記述子の間に登録してみます。成功した場合は、元の保存された記号と画像で見つけた記号の間の回転行列と平行移動行列を計算してみてください。

siftについて読むには、次のサイトをお勧めします。http: //aishack.in/tutorials/sift-scale-invariant-feature-transform-introduction/ siftの基本を理解したら、代わりにいくつかの実装をダウンロードすることをお勧めします。自分で実装するのは非常に面倒な作業であり、多くの落とし穴があります

ところで、ふるい分けは「スケール不変特徴変換」ですが、「遠近法変換」もある場合でも、あなたのケースでも機能すると確信しています。

お役に立てば幸いです

于 2012-12-18T05:36:18.503 に答える