OpenCVで動画の手ぶれ補正

こちらのサイトに手振れ補正する理屈とOpenCVで書いたサンプルが載ってる。

Simple video stabilization using OpenCV

  1. オプティカルフローを用いて、前後フレーム間のトランスフォームを求める。
  2. トランスフォームは3つのパラメータ:dx, dy, da(角度)で構成され、基本的に剛体の剛性のユークリッド変換とし、スケーリングや共有は考慮しない。

  3. ブレの軌跡を得るために、各フレームのx, y, 角度のトランスフォームを保存する。
  4. 移動平均窓を使用して軌跡を滑らかにする。
  5. ユーザが平滑化に使用するフレーム数となる半径を指定する。

  6. 以下のように新しいトランスフォームを求める。
  7. 新しいトランスフォーム = 元のトランスフォーム + (平滑化した軌跡 – 元の軌跡)

  8. 動画に新しいトランスフォームを適用する。

サンプルコードもある。



補正結果比較動画。



2020年10月 追記:このC++実装をもとに有志がPythonで実装したPython Video StabilizationがGitHubで公開されている↓
https://github.com/AdamSpannbauer/python_video_stab

2019年1月 追記:Learn OpenCVでも手振れ補正のチュートリアルが公開されたぞ↓
https://www.learnopencv.com/video-stabilization-using-point-feature-matching-in-opencv/


関連記事

iOSデバイスのためのフィジカル・コンピューティングツールキ...

Multi-View Environment:複数画像から3...

ZBrushのZScript入門

Raspberry Pi

ドットインストールのWordPress入門レッスン

PeopleSansPeople:機械学習用の人物データをU...

PCA (主成分分析)

WordPressのサーバ引っ越し方法を考える

Live CV:インタラクティブにComputer Visi...

手を動かしながら学ぶデータマイニング

Math Inspector:科学計算向けビジュアルプログラ...

スクラッチで既存のキャラクターを立体化したい

UnityでPoint Cloudを表示する方法

python-twitterで自分のお気に入りを取得する

3D Gaussian Splatting:リアルタイム描画...

CGAN (Conditional GAN):条件付き敵対的...

clearcoat Shader

UnityでShaderの入力パラメータとして行列を渡す

konashiのサンプルコードを動かしてみた

Javaで作られたオープンソースの3DCGレンダラ『Sunf...

ディープラーニング

顔追跡による擬似3D表示『Dynamic Perspecti...

UnityからROSを利用できる『ROS#』

Python.NET:Pythonと.NETを連携させるパッ...

Autodesk Mementoでゴジラを3次元復元する

WordPressの表示を高速化する

Verilog HDL

PythonでBlenderのAdd-on開発

OpenCV 3.3.0-RCでsfmモジュールをビルド

OpenGV:画像からカメラの3次元位置・姿勢を推定するライ...

WordPressプラグインの作り方

PSPNet (Pyramid Scene Parsing ...

FCN (Fully Convolutional Netwo...

書籍『イラストで学ぶ ディープラーニング』

UnityでOpenCVを使うには?

プログラミングスキルとは何か?

書籍『3次元コンピュータビジョン計算ハンドブック』を購入

FacebookがDeep learningツールの一部をオ...

Raspberry Pi 2のGPIOピン配置

Blendify:コンピュータービジョン向けBlenderラ...

為替レートの読み方 2WAYプライス表示

書籍『ゼロから作るDeep Learning』で自分なりに学...

コメント