固定したカメラで撮った動画で、画素ごとに時間について平均を取れば、(適当な速度で)動くものを消せます。Mathematicaだとこんな感じです。(参照:フリーソフトウェアを使う方法)
Export["result.jpg", Image[Mean[Map[ImageData, Import["movie.mov", "ImageList"]]]]]
おまけ:フレームの平均を計算していく過程(最初の5秒を30秒で)
詳細:風景から歩行者が消えていく様子(リアルタイム版)
追記:画質的には平均ではなく中央値や最頻値を使った方がいいかもしれませんが、「手軽」ではなくなります。「平均でもできるんだ」という「手軽」さの実例だと理解していただければと思います。
中央値:Mean
をMedian
に置き換えるだけで試せますが、計算時間・消費メモリともに増大します。平均なら約90秒で終わるこの動画(1280x720x372フレーム)の処理に約450秒かかります。消費メモリは2倍くらいになるようです(Core i7 4700MQ、メモリ16GB、Windows 7 64bit、Mathematica 9.0.1)。
最頻値:中央値と同様、計算負荷が高くなります。数値の揺らぎも心配です。Mathematicaの最頻値(Commonest[]
)は戻り値がリストなので、コードの書き換えも面倒です。
カメラからの入力を「手軽」にリアルタイム処理する場合にも、やはり平均を使うのがいいでしょう。
- 動画ファイルをMathematicaで処理する場合(この記事)
- 動画ファイルをフリーソフトウェアで処理する場合
- ウェブカメラのデータをMathematicaで処理する場合
- ウェブカメラのデータをフリーソフトウェアで処理する場合(Processing)