問題タブ [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.
c++ - calcOpticalFlowPyrLK() による不正確なトラッキング
ナンバー プレートを追跡するプログラムを開発しようとしています。プレートを追跡し、ID 番号でマークする必要があるため、すべてのプレートに対して認識プログラムを 1 回だけ呼び出すことができます。追跡に問題があります。ナンバー プレート領域の検出に成功したら、マスクを作成してプレートからのみ特徴を抽出し、画像全体でそれらを追跡します。goodFeaturesToTrack()
でオプティカルフローを使用して計算しcalcOpticalFlowPyrLK()
ます。これは私のアルゴリズムです:
- カメラからフレームを取得します。
- ナンバー プレートを見つけます。
- ナンバー プレート領域から特徴を抽出します。
- カメラから次のフレームを取得します。
- フレームから特徴を抽出します。
- calcOpticalFlowPyrLK() を呼び出す
- ナンバー プレートから機能の少なくとも半分を正常に追跡する一方で、追跡を行い、機能を次の機能と交換します。
コード(一部のみ):
出力は次のとおりです。
緑色の点は以前の機能で、赤色の点は実際の機能です。
ご覧のとおり、何とか追跡されていますが、スケーリングされており、ナンバー プレートから遠く離れているように見えます。ナンバー プレートから 1 回だけ特徴を抽出し、次にフレームからのみ特徴を抽出したいと考えています。私の論理はどこか間違っています。ここで何が問題になる可能性がありますか?
opencv - cvCalcOpticalFlowPyrLK が期待どおりに機能しない
これは十分に文書化された問題であることは知っていますが、オンラインで満足のいく解決策を見つけることができませんでした。ここに行きます。
特徴点の動きを追跡するために cvCalcOpticalFlowPyrLK を使用しています。cvGoodFeaturesToTrack で特徴点を見つけ、cvFindCornerSubPix で調整します。最初のフレーム (参照フレーム) で特徴点を見つけ、LK を使用して参照フレームに対するこれらの点の動きを追跡します。見つかった現在のフレームの特徴点座標で点を更新します。私が観察したものは次のとおりです。
1) いいえ。cvGoodFeaturesToTrack によって検出された優れた特徴点はごくわずかです。私は 100 点を見つけようとしましたが、いつも 10 点未満になります。2) いいえ。5 ~ 6 フレーム後の特徴点の数は 50% 減少し、5 フレーム後にはさらに 50% 減少しました。これは被写体が動いていないときです。一部のポイントは正しく追跡されていますが、一部はかなり外れているという意味で、追跡は不完全です。
YouTube または iPhone アプリでデモ アプリケーションを見たことがあります。いいえのドロップオフ。フレームからフレームへの特徴点の数は、アプリケーションで表示されるものではありません。そのため、設定したパラメーターが間違っているのではないかと疑っています。
これは私が関数を呼び出す方法です:
cvGoodFeaturesToTrack( image, eigen_image, temp_image, corners_point, &corner_count, 0.01(品質レベル), 3(最小距離), 0, 10(ブロックサイズ), 0(ハリスを使用), 0.04(k));
cvFindCornerSubPix( image, cornersPoint, corner_count, cvSize(WINDOW_SIZE, WINDOW_SIZE), cvSize(-1, -1), cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.3));
cvCalcOpticalFlowPyrLK(image, currentFrame, rpV->pyramid_images0, rpV->pyramid_images1, cornersPoint, cornersCurrent, corner_count, cvSize(WINDOW_SIZE, WINDOW_SIZE), 10(レベル), features_found, feature_errors, cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.3), 0 );
もう 1 つのことは、グレースケール カメラ (赤外線カメラ) を使用していることです。私はそれがあまりにも重要ではありません。ここで重要な何かが欠けているのではないかと思っています。
どんな形の助けも大歓迎です。
ありがとう、ケルビン
android - opencv androidでのオプティカルフローの計算
私は OpenCV の初心者で、OpenCV のcalcOpticalFlowFarneback
方法を使用してオプティカルフローを計算しようとしています。
私の実装を見てください:
パラメータに間違った値を渡している可能性があるため、エラーが発生しています。誰でも助けてもらえますか?
android - onPreviewFrame は Nexus 4 電話で呼び出されていません ... しかし、エミュレーター上にあります
以上がカメラの開き方です。(その他のコードはhttps://github.com/sungjkang/OpticalFlow/blob/master/src/com/wais/opticalflow/View.javaにあります)
エミュレーターを使用しているラップトップでは問題なく動作しますが、Nexus 4 ではまったく動作しません。掘り下げた後、電話を使用しているときに onPreviewFrame に入っていないことに気付きましたが、その方法は私のエミュレータで呼び出されました。
ここで何が起こっているか知っている人はいますか?
opencv - ocl::PyrLKOpticalFlow::dense() からオプティカル フロー イメージを描画する方法
オプティカル フローの水平成分と垂直成分の両方を実際に計算するオプティカル フロー画像を描画する方法はocl::PyrLKOpticalFlow::dense()
? だから私はそれらを描く方法がわかりません。私は opencv が初めてです。誰でも私を助けることができますか?
構文 :
opencv - opencv オプティカル フローがほとんどのベクトルを検出しない
比較的小さい (288 x 360) トラフィック ビデオでオプティカル フローを使用していますが、問題があります。フレーム内のいくつかの場所のオプティカル フロー ベクトルを取得できません。この画像は、
goodFeaturesToTrack()
次のように機能します。
後ろにたくさんの点が検出されているのがわかりますが、使用すると
calcOpticalFlowPyrLK()
次のようなオプティカル フロー ベクトルを取得します。
画像のブローのように、正面のポイントのみを返します。
しかし、すべてのビデオのベクトルが必要です。では、どうすれば後ろからもベクトルを取得できますか?
編集:
私が間違っていたのは、小さなベクトルをフィルタリングしていたことです。
c++ - 各ピクセルのオプティカル フローを見つける opencv
追跡アルゴリズムのベースとして、次の関数を使用します。
//1. つまり、機能を検出します。この関数は、良い機能のみを抽出し、
// 2.特徴を追跡する
cv::calcOpticalFlowPyrLK
入力として前の画像から点のベクトルを取り、次の画像の適切な点を返します。良い機能ではなく、各ピクセルのオピカル フローを計算したいとします。
別の意味で、(1,1) から (m,n) へのオプティカル フローの計算を開始します。