2

私はこのようなことをしようとしています: http://www.youtube.com/watch?feature=player_embedded&v=MIYt1yNwoZU

私は正しい道を進んでいます.2時間のコーディングでうまくいきます. しかし、私はいくつかの質問があります:

  • 私はopencv 2.4を使用していますが、いくつかのオプションがあります..ここを参照してください。どれが最高ですか?いくつかの自動機能検出を備えたルーカス・カナデ?それとも、単純なグローバルオリエンテーションで十分でしょうか? またはカルマンフィルター?今のところ、私は密なファーネバックのアルゴリズムを使用しています。これが最初の(=より単純な)オプションだと思いますが、おそらく最良のオプションではありません。

  • 画像のオプティカルフローを計算した後(オプティカルフローを計算するのは大変な作業なので2倍に縮小されています)、ベクトルの平均を取ります。通常の平均、それらすべてを合計し、ベクトルの数から除算します。そのため、フローマットのネストされた for ループを使用します。より良い方法?

    Point2f average_motion(0,0); float n=1;
    
    for(int y = 0; y < flow.rows; y += step)
        for(int x = 0; x < flow.cols; x += step) {
    
            const Point2f& fxy = flow.at<Point2f>(y, x);
    
            if( abs(fxy.x) > threshold || abs(fxy.y) > threshold) {
                average_motion += fxy;
                n++;
            }
    
        }
     average_motion *= 1/n;
    
     average_motion *= 1/n;
     cout << average_motion << endl;
    
  • 私は四角形を動かしていますが、右/左の動きは少し奇妙に思えますが、代わりに上/下は本当にうまく機能します! 誰かが私に理由を説明できますか?

  • 翻訳は大丈夫ですが、回転に行き詰まっています..平均ベクトルを取得した場合、次数を取得するにはどうすればよいですか? X 軸を持つベクトル間の角度を試してみましたが、うまくいきません。何かヒント?

  • 今、私はopencv drawing apiで何かを描いていますが、2.4からはopenglのサポートもあります..そしていいはずですが、その例が見つかりません..

4

2 に答える 2

4

オプティカル フローの最適なアプローチは、カルマン フィルターを使用して動きを予測することです。これにより、パッチをその方向に投影し、次のフレームの検索領域を減らすことができます。計算速度の向上。

悪いニュースは、カルマン フィルターを適切に追跡するのが難しい作業であることです。

于 2012-09-28T07:03:12.207 に答える
2

I would propse the use the Lucas Kanade method because it is quite fast. Or you could use the GPU implementation of the RLOF, which is similar to the Lucas Kanade. Do not estimate a dense motion vector field just estimate motion vectors for a grid (e.g. each 5th pixel) this saves you a lot of runtime. Or seed the features to track regarding your rectangles you want to move. To move your rectangle it would be a more elegant to estimate transformation matrices e.g. affine or perspective by cv::getPerspectiveTransform or cv::getAffineTransform. The affine transformation contains translation, rotation, and scaling and the perspective contains also scheering. (By both RANSAC is a good estimator). The new positions of the rectangle points could be easly computed by matrix operation.

[x,y,1] = Matrix * [x_old, y_old, 1], see OpenCV documentation

于 2013-01-16T16:05:59.603 に答える