オプティカル・フローで動画の滑らかさ向上

 今回はDeep Learningによる動画の超解像とは切って離せない「動画のフレームレートを上げる」という話です。

 Deep Learningを使った超解像を動画に適用する際、動画を静止画にバラして、各々の画像の解像度を上げて、それを再び繋げて動画にするという話は先日しました。この処理をおこなっても人間が見たときにぎこちなさを感じるケースがあります。「画面に写った被写体の動きがカクカクしている」というのがそのひとつです。これは、動画は「フレームレート」といって「1秒間に何コマの画像で構成されているか(fps: frames per second)」が重要な特徴量であるのですが、それが少ないと、個々の画像を超解像しても動きが紙芝居のようになってしまいます。

 Deep Learningでの超解像に限らず、特に被写体に動きがある動画をスムーズにするために「フレームレートを増やす」という処理が行われます。例えば、毎秒30コマの画像を毎秒60コマにするには、足りない30コマをどこかから持ってきて動画に足してあげなくてはいけなくなります。

 上記のように、足りなくなったコマを補う方法にはいくつかの手法があります。最も簡単であり効果も少なく単なるコマ数の帳尻合わせでしかないものが「フレーム・サンプリング」です。これは元々存在した画像を2回続けて表示することで不足分を補う手法です。これだとフレームレートは数字上は上がりますが実際に見たときに何も進歩がない原始的な手法です。

 もう少しだけ気が利いた方法が「フレーム・ブレンディング」です。これはシンプルに言えば「前の画像と後ろの画像をそれぞれ50%ずつ重ねた画像を作る」です。この方法も足りないコマを埋める新たな画像を生成する計算処理は少なくて良いのですが、あまりにも単純すぎて「画像がズームされていく過程」などには太刀打ちできないうえ、動画として見たときもまだぎこちなさが残ります。

 さらに気が利いた手法が「オプティカル・フロー」です。これは、これまたシンプルに言えば「前後の画像の同一特徴点をその明度を基準に検出し、その移動変化を見ることで、欠けている画像を描画する」という「存在した画像の混ぜ合わせではなく新たな画像を生成する」処理です。こう書くと、Deep Learningに造詣がある皆さんは「Deep LearningのGANsなのか?」と思われるかもしれませんがそうではありません。純粋に微分程度の基本的な数学を用いた処理で実現されるものです。

 余談ですが、この「オプティカル・フロー」の方法論は以前から存在していましたが、動画編集のメジャーなアプリケーションである「Adobe Premier」では2019年版から機能として標準装備されるようになりました。シーケンス(動画を編集するための土台の設定)が60fpsであるところに30fpsの動画を加えたような場合、「補完」メニューから選択できるようになりました。なお、実際の画像生成処理が行われるのはAdobe Media Encoderにキューを出して動画の保存処理が行われる際のようです。

オプティカル・フローの弱点

 とても気の利いていると思われる「オプティカル・フロー」ですが、弱点はあります。被写体の等倍平行移動(Lucas–Kanade)や直線的ズーム移動(Horn–Schunck)などには頑張って対応しているのですが、前後の画像の特徴点の移動を鑑みるというアルゴリズム特性上、「フレームイン」に弱いです。つまり新たに画像に入って来た特徴点の適切な描画がアルゴリズム上で難があるのです。例えば、新幹線が右から左に通り過ぎる動画にオプティカル・フローを適用した場合、右端の新幹線が画面に入ってくる箇所の映像が上手に補完でききれない可能性が残ります。しかし、逆の視点で言えば、映像のポイントとなる部位は通常は画面の中心部分にあることが多いので、実用的には問題がないとも言えます。

 また、これはどのアルゴリズムにでも言えることですが、15fpsの動画を60fpsの動画にするような場合は1枚の元画像に対して補完画像を3枚生成しなくてはならないので、その適切度合いは下がります。ですので、これを言ってはおしまいよかもですが、動画を撮るときにはできるだけ高いフレームレートで撮影することが後々重要になります。感覚的には60fpsあればスムーズな映像に見えますが、先に挙げた新幹線や飛行機のような高速移動物体を撮影する場合はさらに高いフレームレートでも良いでしょう。

 加えて、カメラのイメージセンサーや編集アプリケーションによっては、動く物体の残像部分をピクセルの濃淡ではなく「ギザギザ」にしてしまうものがあります。10年以上前のビデオカメラの一般家庭レベルのCCDセンサーにはそのようなものがあるように個人的には認識しています。このような「ギザギザ」にされてしまうとフレームレートを上げてもギザギザ感が残ってしまいます。

もっと良い方法はないのか?

 私はしつこいのでここで話が終わりません。もっと革新的な動画のフレームレート向上アルゴリズムはないものでしょうか?私はここで再びDeep Learningの出番だと思っています。この数ヶ月、静止画像から3Dモデルを生成するというDeep Learningの適用が活発なのですが、その延長線上で「3Dモデルを生成し、それを使ってCGをレンダリングし、画像の不鮮明な箇所を補う」という補完方法が来るべき着地点だと考えています。この方法論を用いると、映像の中の欠損エリア(電柱で隠れてしまっている被写体部分など)を補うことも可能なので、多岐にわたる有効適用領域があるでしょう。


 ということで、再びDeep Learning領域に戻ってきました。個人的には思い出のある映像が心に染みるような状態に再生できるツールとしてDeep Learningが利用されたらいいなと思っています。でわでわ。

0
Would love your thoughts, please comment.x
()
x