動画内の球体の速度を求めたい。preferences.動画内の球体の速度を求めたい。Kusano水中を流れる球体(白と赤の2種類)があり、その球の速度を求めたいです。動画内にはスケールがあるので距離はわかります。120fpsとフレーム数が多いのでそれを利用できる方法があればな、と考えております。参考に動画をインポートし、任意のフレーム(画像)を選択し、色のしきい値を調整することで(静止画内の)対象とする球を検出することまで出来ています。現在動画上で検出できるように挑戦しているところなのですが、動画内で追跡できたとしても速度を求める方法が見当たりません。球の速度を求める方法(またはアイデア)を教えていただきたいです。本ケースでは水中ということで背景も多少変化してしまうので、追跡等にも苦戦しています。年内に完成させなければならず、行き当たりばったりなことができないので質問させていただきました。Clipboardシンプルに速度=距離÷時間の公式に則って計算するのではうまくいかなそうなのでしょうか。Clipboardご回答ありがとうございます。フレーム数)で速度を求めることはできますが、球の数、および動画数が多いのでmatlabで処理したいと考えました。matlab上で同じことをするためによい方法はありませんでしょうか?球を追跡し、一定区間(座標など)を通過するまでのフレーム数などで計算できないものかと考えていますが、役立つ関数などが見つかっておりません。同様の事例がありましたら参考にしたいと考え質問させていただいています。Clipboardやりたいことがシンプルですので、特に関数も必要なく次の手順で実装するのがいいかと思います。1.フレームごとに球の位置を取得2.位置の変化から距離を計算3.フレームレートからフレーム間の時間を計算4.速度=距離÷時間で速度を計算もし検出位置にばらつきがあるようでしたら、1フレーム毎ではなく複数フレームをまとめて計算すれば、安定した結果になるのではないかと思います。Clipboardご回答ありがとうございます。シンプルにしてみることにしました。そこで、質問があります。下に示す文の中で、utilitesとcreateUtilitesについて何を示すものなのか分かりませんでした。同じ文を使うとcreateUtilitesが認識されません。出ますが、何を示すものなのかわからないので対処に困っています。説明のページも見当たらなかったので...何度もすみません。Clipboardこのカルマンフィルタのサンプルちょっとわかりづらいんですよね。createUtilities関数は、ページのずっと下、本当に最後の方に定義されています。このサンプルの構造として、冒頭に書いてある通り、メインのコードが最初に出てきて、その中に出てくる子関数が最後にダーッと書かれています。このように入れ子になっているので、見覚えがない関数が出てきたらページ内で検索かけてみてください。ところで交通量調査の方のサンプルでは不足でしょうか。カルマンフィルタが入ってくると一気にややこしくなりますので「球が何かに隠れて検出できないフレームがある」という場合以外は、交通量調査の方でやってるように、ただの検出をフレームごとに繰り返す、でもいいんじゃないかと思いました。Clipboardご回答ありがとうございます。カルマンフィルタの説明最後まで読み切れてませんでした、、、createUtilitiesはとりあえず解決出来ました!ありがとうございます。交通量調査の方で動画内で追うことは出来たのですが、画像一枚づつをとらえているだけなので複数の球が存在すると速度を求められないという問題があります。(もちろん人力で比較の組み合わせを見ればできることですが、あくまで自動で行いたいので、、、)この点は交通量調査のやり方でも解決できるのでしょうか?(各フレームでのマーカーを同一物として認識させたいです。)また、動作はしたものの途中で理解出来ない部分がありました。下記文のif~endまでが赤点のマーカーを出していることはわかるのですが各文の意味合い不明でした。解説または参考になるものを教えていただきたいです。Vid.FrameRate;implay(taggedCars,frameRate);初心者の質問ですみません。Clipboardなるほど、複数あるんですね。その場合でしたら確かに検出だけではなく追跡が必要ですね。この例ですと複数物体の追跡するには追記が必要になってしまいます。複数オブジェクトの追跡のサンプルが下記にあるので、こちらを参考にした方がいいのではないかと思います。detection)ので、お手持ちのデータだとうまく動かないかもしれませんが、その場合は検出の部分だけ、今の色ベースのものに差し替えて使ってください。ちなみにこのサンプルも入れ子関数の構造になっていますので、少しわかりにくいです。念のためif文の中についてざっと解説しておきます。stats変数には検出できた車(と思われる)領域の面積(Area)と重心位置座標(Centroid)の情報が格納されています。if文の中の処理は、isemptyで検出された車があれば実行されるよう条件付けされています。処理の中身は、上から一番面積の大きい領域の重心位置を取得(1-3行目)重心位置(1点の情報)を5x5の領域に拡張(点だと面積1なので画像上で見づらいから広げているだけと思われます。fliplrは別にしなくてもいい。その場合はrowとcolが入れ替わる)(4-7行目)その領域を赤色(255,0,0)で塗りつぶす(taggedCarsは、読み込んだフレームに検出した車の重心位置を赤色でマーキングすることで検出結果を見やすく加工したものになる。)(残り)となります。Clipboardお返事ありがとうございます。動きに基づく複数オブジェクトの追跡ですが、背景が動かないことが前提だと思い、カルマンフィルタを使用したオブジェクトの追跡を参考にしておりました。検出部分の方法を入れ替えて挑戦してみたいと思います。if文の中身を解説していただきありがとうございます。納得出来ました!たくさん丁寧に教えていただきありがとうございます。