Darkside(https対応しました)

2022年7月16日(土) 21:06

難題山積

 撮影後のソフトウェア手振れ補正で、9割近くのフレームは収束する。収束してくれないのは1割強である。
 その1割強に対して最終2回の平均を取る方式で、動画全体を作り直してみた。予想された通り、ほぼ変化無し。区別を付けるのは困難だ。なら、もうこれでいいか・・・と思っていたが、重大なことを試し忘れていたことに気付いた。それは、拡大率である。

 回転不変位相限定相関法では、XY平面のズレと回転だけでなく、拡大率も推定できる。しかし動画の手ぶれ補正においては、拡大率は明らかに1固定である。マクロ撮影でカメラが前後に動く場合などは拡大率まで追随させても良いが、余りに特殊用途過ぎる。
 かくして、拡大率という概念が頭から完全に抜け落ちていたのだった。

 だが、収束させる過程においては拡大率も考慮すべきではないか?
 最終的に手ぶれ補正処理を行う際には拡大率1固定でも良いが、クローズドループ中では拡大率も管理するのがベターでは?
 そう考えて、試してみた。どうしても収束してくれないフレームが、しっかり収束した。正解だった!

 こうなると、GPU による高速化はどうしても試したい。1分のクリップを処理するのに1日掛かるようでは、試行錯誤もままならない。実用性も、失われる。
 手ぶれ量推測処理は画像出力がなく、ほぼ画像処理だけである。それだけ GPU の恩恵も大きいはずだ。
 CUDA への移植を進めようとしたが、いきなりフーリエ変換に直面。そうだ、numpy の関数でフーリエ変換しているが、これ CUDA に出来るのか?
 調べると、CuPy を使えばできるらしい。numpy を GPU(CUDA)対応にしたものが、CuPy だ。

 Python + OpenCV による画像処理はお手軽だが、GPU を使って高速化を図ると突然面倒になる。と言うか情報収集に苦労するようになる。そりゃあ GPU 対応の有無で OpenCV インストールの難易度が何次元も違うからなぁ・・・

 すぐに行き詰まった。numpy は良いとして、phaseCorrelate や warpPolar に対応する CUDA 関数が見つからないのだ。

 折角なので、phaseCorrelate を使わず CUDA で(回転不変ではない)位相限定相関法のプログラムを作ることろから研究してみよう。長い時間を要しそうなので、その間に GPU 使わない版(拡大率も利用して収束させる)を動かしておこう。
 動かし始めてすぐに、収束しないフレームが発生。これ最後まで走らせてみないと、拡大を考慮した効果は分からない。

written by higashino [Virtual Reality] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4