問題タブ [opticalflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - ビューファインダーの位置合わせ
Viewfinder Alignment methodで作業した人はいますか? 最初のステップ (エッジ検出) は多かれ少なかれ理解できます。「エッジを抽出するために、水平、垂直、および 2 つの対角線方向の 4 つの等間隔の方向で、画像の 2 乗勾配を取得します」と書かれています。( 1 ) 。そして、「次に、勾配の方向に垂直な方向に各勾配画像の積分射影を実行します」 ( 2 )。水平方向の場合、そのアルゴリズムを次のように実装しました。
私にとっての本当の問題は、2番目のステップであるEdge Alignmentです。px[i]1、py[i]1、pu[i]1、pv[i] 1とはどういう意味ですか? なぜそれらは1に等しいのですか? iカウンターはどう変わる?
opencv - OpenCV を使用した動的 (動く) ジェスチャー
openCV を使用して手や色付きのマーカーを検出できますが、動的ジェスチャ (たとえば、右に移動するジェスチャとして手を右に移動する) の認識に固執しています。左、右、上、下、円 (時計回りと反時計回り) を認識したい
上記のジェスチャを実現する方法を教えてください。
image-processing - cvCalculateOpticalFlowFarneback の OPTFLOW_USE_INITIAL_FLOW オプション
私は OpenCV を使用してプロジェクトに取り組んでおり、オプティカル フロー アルゴリズム cvCalculateOpticalFlowFarneback を使用してビデオのオプティカル フローを取得しています。
私はドキュメントを読んでいて、ソースを少し調べていて、アルゴリズムにフィードできるオプションがあります: OPTFLOW_USE_INITIAL_FLOW
私はそれをいじっていますが、速度や精度に違いは見られません。だから私の質問は:
オプションは何をしますか?使用しない場合と使用した場合の違いはありますか? (良いまたは悪い)
また、いくつかの実装を調べているときに、バグがあるためこのオプションは避けるべきであるというコード コメントに出くわしました。私はそれを他の場所ではうまく処理できませんでしたが、少し緊張します (特に製品ソフトウェアに組み込む場合)。
どんなコメントでも大歓迎です!
opencv - 対応する 3D ポイント セットからカメラの動きを計算する
少し問題があります。カメラと深度情報を使用して、各フレームの 3 次元ポイントのセットを抽出するプログラムを作成しました。ポイントはカメラ座標系にあります。つまり、原点はカメラの中心にあり、x は水平距離、y は垂直距離、z はカメラからの距離 (光軸に沿った距離) です。すべてメートル単位です。つまり、点 (2,-1,5) は右 2 メートル、下 1 メートル、カメラの光軸に沿って 5 メートルになります。
t-1
各時間枠でこれらの点を計算し、 のどの点が のどの 3D 点に属しているかを知っているように、対応も知っていt
ます。
私の目標は、ワールド座標系の各時間フレームでカメラの動きを計算することです (z は高さを表します)。カメラの軌跡を視覚化するために、相対運動だけでなく、開始位置から始まる絶対運動も計算したいと思います。
これは、カメラ座標の点の現在 (左) と以前の 3D 位置 (右) を含む 1 つのフレームのデータ セットの例です。
可能であれば OpenCV を使用したいのでestimateAffine3D()
、OpenCV 2.3 で関数を見つけました。この関数は、2 つの 3D ポイント入力ベクトルを取り、RANSAC を使用してそれらの間のアフィン変換を計算します。
出力として、3x4 変換マトリックスを取得します。
RANSAC パラメータを設定して計算をより正確にしようとしましたが、多くの場合、変換行列は非常に大きな並進運動を示します。サンプル データでわかるように、動きは通常非常に小さいです。
それで、誰か私が試すことができる別のアイデアを持っているかどうか尋ねたかったのですか? OpenCV はこれに対する他のソリューションを提供していますか?
また、各時間枠でカメラの相対的な動きがある場合、それを世界座標に変換するにはどうすればよいですか? また、ポイント (0,0,0) から始まる絶対位置を取得するにはどうすればよいので、各時間フレームのカメラ位置 (および方向) を取得できますか?
どなたかアドバイスいただけると助かります!
ありがとうございました!
更新 1:
@Michael Kupchickの良い答えの後、OpenCVのestimateAffine3D()関数がどれだけうまく機能するかを確認しようとしました。そこで、回転ではなく平行移動のみを行う 6 つのポイント ペアの小さなテスト セットを 2 つ作成し、結果の変換行列を調べました。
テストセット 1:
変換マトリックス:
テストセット 2:
変換マトリックス:
--> これにより、一見正しく見える 2 つの変換行列が得られます...
これが正しいと仮定すると、各タイムステップにこの変換行列がある場合、どのように軌道を再計算しますか?
なぜそれがそんなに悪いのか、誰かヒントやアイデアはありますか?
c# - 現在のフレームと前のフレームの間の X と Y の変位を取得するには、velX、velY 情報をどのように使用すればよいですか?
C# の openCV ライブラリの Lucas Kanade オプティカル フロー アルゴリズムを使用しています。一連のフレームがあり、それらの 2 つごとにオプティカル フローを調べて、それを pictureBox に表示したいと考えています。
次の関数から velX と velY を取得できました。
さて、2 つのフレーム間のフローを表示するには、これら 2 つをどのように使用すればよいでしょうか? つまり、ピクセルの変位を取得するにはどうすればよいですか?
TNX
c++ - cvCalcOpticalFlowPyrLK 入力画像サイズ
を使用するcvCalcOpticalFlowPyrLK
と、生成されたピラミッドが一部の入力画像サイズに対して正しくないように見えます。ドキュメントには、適切な入力画像サイズへの参照が見つかりません。それにもかかわらず、それはポイントを見つけます。これがどのように発生し、これを修正する方法を知っている人はいますか?
(gcc を使用している場合は、これをコンパイルして実行できますg++ pyr.cpp -o pyr -lcv -lcvaux && ./pyr
)
640x480 画像のスクリーンショット
631x480 画像のスクリーンショット
python - TypeError:cv2.calcOpticalFlowPyrLK()のnumpy配列ではありません
Pythonバインディングを使用してOpenCV2.3.1でLKトラッカーを作成しようとしています。私がする時
私は得ています
TypeError:numpy配列ではありません
どこ
cv2.calcOpticalFlowPyrLK()の詳細については、こちらをご覧ください。
設定すると
次のエラーが発生します
TypeError:Pythonスカラーに変換できるのは長さ1の配列のみです
ここで何が問題になる可能性がありますか?
c++ - cv::goodFeaturesToTrack は機能を返しません
使用しようとしていますcv::calcOpticalFlowPyrLK
が、その関数の内部アサーションが失敗することがあります。アサーションはnpoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0
です。OpenCV 2.3.1 を使用しています。この関数のソース コードは、こちらから入手できます。
特に、コンピューター グラフィックスの経験が限られていることと、コメントが不足していることから、彼らのコードに頭を悩ませるのは難しいことです。このアサーションがトリガーされるのはなぜですか? また、このアサーションは私の問題について何を示していますか?
編集:次のように関数を呼び出します:
十分に大きく、有効な画像であると思われる空でないマスクをfeatures
呼び出して取得したベクトルには、特徴が含まれていないことがわかりました。cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
これはどのように起こりますか?
curBwFrame
スキンマスク
次のコード スニペットを使用して問題を再現できます。
c - 動きベクトルのグループ化
-Lucas-kanadeアルゴリズムを使用して、openCVでビデオシーケンスのオプティカルフローを計算しています。モーションベクトルを取得しました。次に、これらの動きベクトルをいくつかのクラスターにグループ化します。互いに近くにあるベクトルをグループ化したい。最近傍アプローチのようなもの。しかし、どうすれば同じように実装できるのかわかりません。どんな助けでもありがたいです。
ありがとうございました。
オプティカルフローアルゴリズムを実行した後、cvKMeans2()を使用してコーナーポイントをグループ化しました...
ベクトルclustercontainerのベクトルにクラスターがあります。今、私はすべてのクラスターの周りに境界線を描きたいです..どうすればそうできるかわかりません...誰かが知っているなら助けてください。
openCVマニュアルの以下のコードを使用して、すべてのクラスターの周りに円を描きます。しかし、円ではなく長方形を描きたいのですが、どんな体でも助けてください。
c - OpenCV Lucas Kanade オプティカル フロー
私は、興味のあるすべてのコーナーポイントの軌跡を見つける必要があるコードに取り組んでいます。したがって、同じために、前の画像のコーナーポイントを使用して現在のコーナーポイントを見つけるLKPyrオプティカルフローを使用しました画像。私はオプティカル フローをフレームごとに使用しています。そうではなく、追跡するのに適した機能を実行するたびにポイントが変化します。問題は、軌道ポイントの場合、現在のポイントを追跡し、新しいポイントが来たら追加する必要があり、古いポイントが失われようとしている場合です。ポイントを1つずつ追跡できるように、ステータス= 0を取得する必要があります。そうする方法はありますか?ビデオの各ポイントがいつ終了するかを知る方法はありますか? 軌跡を追跡できるように?cvLKpyrOpticalFlow への呼び出しでフラグを変更すると、連続フローを取得するのに役立ちますか?
これは、オプティカル フローを取得するために実行しているコード ブロックです。