2022年7月22日(金) 21:01
どうも、やらかしたらしい。
1日中インターネット固定回線がやたら遅くて使い物にならなかったのだが、たぶんモデムの熱暴走。
ネット接続用モデムってやたら熱くなる。埋もれてしまうと熱暴走し易い。ただでさえ暑い季節は要注意だ。モデムの周囲は整理しておかないとマズい。
だけどモデムの発熱が多過ぎる。消費電力が多いという意味でもある。ムーアの法則が死んだ近年は、各種電子機器の消費電力が低下しなくなって困ったものだ。
さて、位相限定相関法を GPU により高速化する試みは、ひとまず断念することにした。労力が膨大過ぎてペイできそうにない。
収束の繰り返しを最大3回に限定することで処理時間を短くし、妥協することにした。繰り返しを更に増やしても、効果が怪しい。phaseCorrelate() がサブピクセルの計算をどうやって行っているのか不明だが、本来1ピクセル単位でしか分からないものを最小二乗法などで推測しているのだとすれば、0.1ピクセル未満まで煮詰める意味がどこまであるのか分からない。実際の動画に適用しても、見分けが付かない。
試行錯誤した結果として、速度は大雑把に
CUDA > OpenCV > cupy > numpy
だと判明している。
OpenCV の関数に対応する関数が CUDA に存在する場合は、CUDA で高速化できる。
numpy は cupy で高速化できるが、それでも OpenCV より遅いので意味がない。OpenCV で記述できず numpy で書くしかない場合のみ、cupy の意味がある。
将来の CUDA に phaseCorrelate() が登場するまでは、OpenCV を使うのが最速。
回転不変位相限定相関法の場合は、更に warpPolar() も CUDA 対応になるまで GPU はお預けだ。
GPU に関しては結論が出たので、手ぶれ補正の検証を進める。
収束3回限定の3軸手ぶれ補正は、念のためスカイツリー動画で効果を確認する。見た目で変わらないなら、計算時間を節約できるということで本採用。
それとは別に、本来なら三脚を使いたい固定位置での手持ち撮影映像に対する3軸手ぶれ補正プログラムの修正だ。これは、基準フレームを先頭フレームに固定するもので、最大3回までの収束を行う方式の効果を確認してみる。動きの少ない部分を切り出しての2軸手ぶれ補正は効果大だと判明している。計算時間を余分に使用しての3軸手ぶれ補正にすると効果がどうまるか?だ。
基準フレームを毎回更新すると、誤差が積み重なるので移動平均を取らねばならない。基準フレームを固定すると誤差は積み重ならないが、変化量が大きくなって推測精度が落ちる。そこに、収束3回繰り返しで精度を補ってやる。
3軸補正は回転を加わるため、画面の広い範囲を対象にしないと判定が怪しい。2軸補正なら動きが小さく判定し易い一部だけを対象に判定することができる。だから、必ずしも3軸が常に有利というものではない。いろいろな状況の動画が蓄積されて来て、実験には不自由しない。
計算時間が長いことだけが、障害だ。
基準フレーム固定だと、判定ミスによる微振動が発生した。やはり3軸判定は基準フレームを毎回更新して移動平均を取るしかない。完全に画面を固定したい場合は、そうやって得た回転角補正だけを使い、残る2軸は慎重に選んだ画面の一部を対象にした2軸補正を使うのが良さそうだ。
written by higashino [Virtual Reality] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4