2

ビデオを使用して、長いシーンのリニア/ストリップ パノラマを作成するプロジェクトを開始しました。これは、パノラマが中心を中心に回転するのではなく、シーンに平行に移動することを意味します。道路正面に対して垂直に見える車両に取り付けられた vid カム。

私が従う手順は次のとおりです。

  1. ビデオからフレームをキャプチャする
  2. 特徴検出 - (SURF)
  3. 特徴追跡 (カナデ・ルーカス・トマシ)
  4. ホモグラフィ推定
  5. ステッチモザイク。

これまでのところ、ビデオから個々のフレームを保存し、2 つの画像だけで SURF 特徴検出を完了することができました。プロジェクト全体の解決を誰かに依頼しているわけではありませんが、キャプチャされた残りのフレームで SURF 検出を完了しようとして行き詰まっています。

質問:連続するフレームに SURF 検出を適用するにはどうすればよいですか? YAML または xml として保存しますか?

機能検出のために、OpenCV のサンプル find_obj.cpp を使用し、使用する画像を変更しました。

誰かがそのようなプロジェクトを経験したことがありますか? 私が達成したいことの例は、Iwane technologies http://www.iwane.com/en/2dpcci.phpからのものです。

4

1 に答える 1

1

同様のプロジェクトに取り組んでいるときに、std::vector一連の SURF キーポイント (ポイントと記述子の両方) を作成し、それらを使用してペアワイズ マッチングを計算しました。ムービーをフレームごとに読み取っているときにベクトルが塗りつぶされましたが、一連の画像でも同じように機能します。

リソースが非常に限られている場合やシーケンスが非常に長い場合を除き、メモリを飽和させる (そして yml/xml ファイルを使用する) ほどのポイントはありません。

少なくともほとんどの標準的なケースでは、特徴追跡部分は必要ないことに注意してください。SURF 記述子の一致は、ホモグラフィの推定も提供できます (追跡は必要ありません)。

ベクトルへの読み取り

たとえば、Mat のベクトルを宣言することから始めstd::vector<cv::Mat> my_sequence;ます。次に、次の 2 つの選択肢があります。

  1. フレーム数がわかっている場合は、ベクトルを正しいサイズにサイズ変更します。次に、フレームごとに、イメージを変数に読み取り、my_sequence.at(i) = frame.clone();またはを使用して、シーケンス内の正しい場所にコピーします。frame.copyTo(my_sequence.at(i));

  2. または、事前にサイズがわからない場合は、push_back()通常どおりメソッドを呼び出すだけです。my_sequence.push_back(frame);

于 2013-04-12T07:01:31.720 に答える