SSブログ

撮影動画から交通量を計測する(その1) [プログラム開発]

撮影動画から交通量を計測するソフト開発を再開した。
開発環境としてOpenCV(動画読み込み用)とOpenGLを使い認識はDeep learningを使って車種まで認識したい。さて、勉強しながらの試作です。

ステップ1.「動体を判断する方法の考察」
〇.動体(車など)が無い背景画を作り、現在の動画(静止画)と比べ違いがある部分が動きがある部分と判断する。
作法①.動画から1フレームずつ静止画として取り出せます。なので、普通は1フレームの全ピクセルを毎回重ね合わせ平均色を求めていくと時間的に多く存在する色が背景の色に近づくはずです。
(前までの平均の色 × 前までの加算回数 + 現在色 ) / ((現在の加算回数) = 新しい平均色を保存
しかし、OpenGLのフレームバッファではRGB各8ビットなので新しい平均色を保存できる領域が8ビットでは加算数が256を超えたら全く反映されなくなります。※これが分かるまで時間を使ってしまった。(涙)
OpenCVのサンプルは8ビットを32ビットに拡張してやっているようです。大量にメモリー消費するし、OpenGLのシェーダーでは無理なので、このやり方は断念しました。
作法②.OpenGLのシェーダーで実現するために頭を絞りました。(笑い)
フレームバッファを2個別に用意しピクセル単位で近い色(距離で閾値内)の集合を2種類作成するようにして、閾値内の色が出てきたらAビット部分をカウンターとして使いアップさせます。閾値外の3色目が出てきたらカウントの少ない方を破壊して新しい色とします。作法②は私が独自に考えた方法なので宜しく。
 ※近い色の判断は3次元の距離で判断します。
  色1(r1, g1, b1), 色2(r2, g2, b2)
  距離d = √( r1 – r2 )^2 + √( g1 – g2 )^2 + √( b1 – b2 )^2

【結果状況】
元動画


作り出した背景と比較し動きのある部分だけにした動画。

まだ道や残像が残っています。チューニングが必要ですね。

ソーベルフィルターで輪郭だけにした動画

まだまだ試行錯誤が必要です。
パソコンの性能にもよりますが、ハイビジョンの画質(1920x1080)ですが、OpenGLのシェーダーだけで計算しているので、1フレーム読み込み含めソーベルフィルター表示まで17ms以内で終わっています。
車の個体をどのように切り出すかな、Deep learningに食わせるまで先は長いです。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。