0

私は、興味のあるすべてのコーナーポイントの軌跡を見つける必要があるコードに取り組んでいます。したがって、同じために、前の画像のコーナーポイントを使用して現在のコーナーポイントを見つけるLKPyrオプティカルフローを使用しました画像。私はオプティカル フローをフレームごとに使用しています。そうではなく、追跡するのに適した機能を実行するたびにポイントが変化します。問題は、軌道ポイントの場合、現在のポイントを追跡し、新しいポイントが来たら追加する必要があり、古いポイントが失われようとしている場合です。ポイントを1つずつ追跡できるように、ステータス= 0を取得する必要があります。そうする方法はありますか?ビデオの各ポイントがいつ終了するかを知る方法はありますか? 軌跡を追跡できるように?cvLKpyrOpticalFlow への呼び出しでフラグを変更すると、連続フローを取得するのに役立ちますか?

    cvGoodFeaturesToTrack ( imgGrayscale, imgEigen, imgTemp, corners_img, &corner_count, 0.01, 5.0, 0, 3, 0.4 );

    cvCalcOpticalFlowPyrLK( imgGrayscale, nxtimgGrayscale, pyr_img, pyr_nxtimg, corners_img, corners_nxtimg, corner_count, cvSize ( win_size, win_size ), 5, status, track_error, IterCriteria, NULL);

これは、オプティカル フローを取得するために実行しているコード ブロックです。

4

1 に答える 1

2

追跡しているシーケンスの「最初の」(または「参照」) フレームでのみ cvGoodFeturesToTrack を実行し、その後のフレームでのみ cvCalcOpticalFlowPyrLK を実行する必要があります。

前者のルーチンは、参照フレーム内で「ハイ コントラスト」(明確に定義された式の意味で) を持っているため、より簡単に追跡できる可能性が高いピクセルとパッチを識別します。後者のルーチンは実際に追跡を行い、参照フィーチャを後続のフレーム内の近くの場所と照合して、それらの新しい場所を識別します。成功すると、ステータス ベクトルの対応する要素が 1 に設定されます。後続のフレームのこれらの機能は、フレーム自体の「追跡に適した機能」である場合とそうでない場合があります。これは、より高いコントラストを持つ他の画像領域が存在する可能性があるためです。ほとんどのアプリケーションでは、参照フレームで検出された「優れた機能」のみを追跡したいと考えています。

追跡は通常、一部の機能で失敗するため、数フレーム後に、「ライブ」で追跡された機能が残っていない (または十分でない) ことがわかる場合があります。この時点で、「良い機能」検出の別のパスを実行して、セットを補充できます。

于 2012-06-07T12:19:38.843 に答える