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/


関連記事

CNN Explainer:畳み込みニューラルネットワーク可...

書籍『OpenCV 3 プログラミングブック』を購入

MPFB2:Blenderの人体モデリングアドオン

MLDemos:機械学習について理解するための可視化ツール

ZBrushのZScript入門

Maya API Reference

Adobeの手振れ補正機能『ワープスタビライザー』の秘密

顔検出・認識のAPI・ライブラリ・ソフトウェアのリスト

Photogrammetry (写真測量法)

Managing Software Requirements...

FCN (Fully Convolutional Netwo...

Raspberry PiのGPIOを操作するPythonライ...

ZScript

GAN (Generative Adversarial Ne...

iPadをハンディ3Dスキャナにするガジェット『iSense...

Leap MotionでMaya上のオブジェクトを操作できる...

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

uvでWindows11のPython環境を管理する

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

iPhone・iPod touchで動作する知育ロボット『R...

DUSt3R:3Dコンピュータービジョンの基盤モデル

OpenGVの用語

ブログのデザイン変えました

bpy-renderer:レンダリング用Pythonパッケー...

OANDAのfxTrade API

続・ディープラーニングの資料

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

ブラウザ操作自動化ツール『Selenium』を試す

DCGAN (Deep Convolutional GAN)...

Mayaのシェーディングノードの区分

Active Appearance Models(AAM)

UnrealCV:コンピュータビジョン研究のためのUnrea...

Human Generator:Blenderの人体生成アド...

TeleSculptor:空撮動画からPhotogramme...

OpenCVの三角測量関数『cv::triangulatep...

機械学習で遊ぶ

MeshroomでPhotogrammetry

LuxCoreRender:オープンソースの物理ベースレンダ...

Mean Stack開発の最初の一歩

UnityでOpenCVを使うには?

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

機械学習について最近知った情報

コメント