先日紹介した「風景から歩行者を消す手軽な方法」は、動画の画素ごとに時間について平均をとると動いているものを消せるという話でした。
この方法について、(1)平均ではなく中央値や最頻値を使った方がいいのではないか、(2)シャッターを開きっぱなしにするのと同じではないかと言われたので、お答えしようと思います。(ネタを引きずるのはよくないのですが。)
(1)については、やっていることの意味からすればその通りです。しかし、中央値や最頻値は平均に比べて計算負荷が高いので(前記事の追記も参照)、動画という重いデータを扱う際には、そこにこだわるべきではないと思います。簡単なものをまず試し、できたらそれでよしとするわけです。例えば、ウェブカメラの画像を取得するCurrentImage[]
を使って、先の話のリアルタイム版を作れるのですが、平均でやるなら次のように簡単です(Mathematica)。
t = 1; accumu = ImageData[CurrentImage[]]; Dynamic[Refresh[Image[accumu/t], TrackedSymbols -> {t}]] (*ここに動画が表示される*)
While[True, accumu += ImageData[CurrentImage[]]; t++; Pause[0.1]];
いいウェブカメラがあれば、下のような動画が見られるはずです。(実時間だと速くてよくわからないので、最初の5秒を30秒に引き延ばしたのが冒頭の動画です。)
これを中央値や最頻値でやろうとすると、すぐにメモリがなくなるでしょう。最頻値の場合は数値の揺らぎの程度(あるいは数値を丸める必要の有無)も確認しなければなりません。
(2)の方法は知らなかったのですが、上のような動画を作るのはちょっと面倒なのではないでしょうか。
- 動画ファイルをMathematicaで処理する場合
- 動画ファイルをフリーソフトウェアで処理する場合
- ウェブカメラのデータをMathematicaで処理する場合(この記事)
- ウェブカメラのデータをフリーソフトウェアで処理する場合