普段youtubeに上げている動画、実は密かに個人的な画像処理の実験場となっていることが多い。
手段が目的にならないように見た目には自然に見える程度に抑えてありますが。
今回の実験は簡単な割にはかなり効果があったので少し書いてみようかと。同時にgithub公開。
https://github.com/delphinus1024/temporal_median
先日作ったこの動画のために必要に迫られて作った表題のフィルタ。
他所にあったものはあまり期待通りの動作をしなかったり、AfterEffectsなどの既製フィルタにもないようなので自作することにしたもの。
ただし効果を発するのは三脚で固定されていて、且つ動きのほとんどない動画限定ですが。
今回必要に迫られた理由は2つほどあり
1. 水辺の動画なので、細かい羽虫が飛んでいることが多く視覚上見苦しいので効果的に除去したい。
2. 絵画がたゆたうような映像を欲していたので、時間方向の細かい揺らぎを除去して品をよくしたい。
いずれもこのフィルタを使えば実現できるのではないかと思ってやってみたところ、想像以上の効果が得られた。
ついでながら動画圧縮の際発生するブロックノイズやカラーノイズの類もかなり除去できるみたい。
画像に限って言うと、"Median Filter"とはあるピクセルの近隣のピクセル値を一列にソートしてその中央値をそのピクセル値に採用するというもの。
とりわけゴマ塩ノイズなどに有効的で、"Gaussian Blur"などと比べるとエッジぼけを最小限にしながらノイズ除去ができる。
ただ今回作ったのはその頭に"Temporal"(時間的)と付いている。
通常の"Median Filter"は空間方向にかけるのが一般的だが、そうではなく時間方向にフィルターをかける。
つまり同じ位置の過去に遡ったピクセルをソートしてその中央値でピクセル値を決めるというもの。
このことで細かい動きは消去されて落ち着いた滑らかな映像になる。
ピクセル値は一旦グレースケールに変換して処理している。
ボツ映像を使って比較動画も作ってみた。
遡るフレーム数が多くなるほど滑らかになるが、処理時間が長くなる。
羽虫が綺麗に除去されて、なおかつ波面が長時間露光したように動きが滑らかになっているのが分かるかと思います。