先日公開した動画で実験的に作成・使用した画像処理について少しばかり書いておこうかと。
撮影時の失敗をカバーすべく苦し紛れに考案した方法なのだが、予想よりうまく行ったので備忘録を兼ねて。
発端はこの時の動画撮影時のこと。
三脚を使用した撮影の大原則は「カメラよりなるべく重い三脚(及び雲台)を使う」ということ。
そうでなければカメラが不安定になってブレが起きやすくなるし転倒の危険もある。。
それは分かっているのだが、荷物の重い泊りこみでの山岳撮影の場合そんな理想論は言っていられない。
軽いカーボン三脚を使用しつつ、上のような問題が起きないように逐次工夫して撮るしかない。
今回、そもそも強風での撮影で厳しかったことに加えて、カメラ側で致命的な設定ミスをしてしまった。
それは、三脚を使っていたのにうっかり手振れ補正をONにしたまま撮ってしまったということ。
手振れ補正は非常に便利な機能なのだが、三脚固定の時にONにしてしまうと過補正という現象が起きて映像が過度にブレてしまう。
この現象は経験上とりわけ強風によるカルマン渦で筐体が等周期振動しているときに派手に起きる。
そういう風ブレ映像を期せずして量産していたことに帰ってから気づき途方に暮れてしまった。
強風の吹いたタイミングでフレーム全体がボケてしまっているためにスタビライズ処理程度では対処できず、なんとか補正できないものかと方法論の検討をしてみた。
風ブレが発生しているフレームの拡大。
今回思いついた方法は表題にある画像ピラミッドの一種であるラプラシアン・ピラミッド(laplacian pyramids)という画像処理を応用して補正できないかというもの。
https://en.wikipedia.org/wiki/Pyramid_(image_processing)
この画像ピラミッドという手法は画像処理界隈ではいろいろな用途で使われており、例えばHDR合成のTone Mappingのアルゴリズムでコントラスト成分を分離するのにも用いられている。
簡単に言うと、与えられた画像を周波数成分毎に何枚かの画像に分割する(ピラミッド分割と呼ぶ)。OpenCVにそのまま処理関数があるのでプログラムを組んでみると以下のような感じ。高周波成分はそのままではほぼ真っ黒なので見やすいようにレベルを誇張。
まずはブレていないフレームのLaplacian Pyramids。
そしてブレたフレームのLaplacian Pyramids。
並びは周波数成分の高い順で、最後の画像が元画像から高周波を取り除いたもので強いガウシアンブラーがかかった状態になり、少々のブレ程度ではあまり変化・影響がない。
そして、それぞれ分割した画像をすべて加算していくと元の画像に戻る仕組み。
比較してみるとブレた画像は結果的にブラーがかかっているのと等価なため、画像の中の高周波成分が大きく失われてしまっていることが分かる。
ということは、もし三脚固定した固定視点の風景動画程度であればブレていない別フレームの高周波成分をブレた画像に移植すればブレてない画像に戻せるのでは?…というのがアイデアの発端。
実際この方法で補正をやってみるとノイズが無さ過ぎて写真的になってしまうため、処理後の動画に元のブレ動画を薄く被せると動的なノイズが発生して動画っぽさが戻る。
いろいろ調整をしながら元の動画と仕上がった動画を比較してみると以下のような感じ。
順番に、ブレ動画->補正後動画->補正後動画+ブレ動画を薄く被せたもの。
完璧ではないが、ブレによるボケボケがかなり補正されているのがお分かりいただけるかと。
制約として、このような静止画に近いような動画にしか使えないが。
今回使用した画像ピラミッドという技法、これだけではなくていろいろ応用の可能性があり、今後更に追求してみようかとも考えてます。