先日紹介した「風景から歩行者を消す手軽な方法」は、動画の画素ごとに時間について平均をとると動いているものを消せるという話でした。
この方法について、(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で処理する場合(この記事)
- ウェブカメラのデータをフリーソフトウェアで処理する場合
初めて書き込みさせていただきます。
>(2)の方法は知らなかったのですが、上のような動画を作るのはちょっと面倒なのではないでしょうか。
(2)の方法につきましては、それを言った人は静止画を念頭に置いているのではないかと思います。
フィルムカメラやデジタルカメラでは、レンズの前にNDフィルタと呼ばれる光量を減らすためのフィルタを取り付け、シャッタースピードを遅くして撮影するという方法があります。シャッタースピードを遅くすることで通行人を消したり、水の流れの表現を変えたりといった場合です。基本的に数秒~数十秒かけて一枚の画像を撮影するという手法のため、動画には向きません。(NDフィルタ自体は雪山や太陽を撮影する時に露出オーバーを防ぐためにも使用され、この場合はビデオカメラなどにも使われます)
この方法ですと、静止画であれば特に後処理をせずとも通行人が消えたような画像を撮影することが可能です。
フィルタメーカーのサイトを見に行ったのですが作例で手頃なものが無かったため、以下に検索で見つかったデジカメ系サイトのURLを。
http://aska-sg.net/filter_tech/filter-tech-07.htm
第7回 NDフィルター(3) 長時間露光で通行人やクルマが消える 【レンズフィルター 初級講座】 – スタジオグラフィックス
宮杉さん
解説、ありがとうございます。
NDフィルタも面白そうですね。ただ、目的が静止画だったとしても、露出時間をどうするかとか、試行錯誤は必要かと思います。
とはいえ、いろんな方法があるのはいいことです。