オプティカルフローを使ったモーショングラフィックス生成

2014年oFセミナー セッション6「映像解析によるインタラクション」用資料

 実例として、ofxCv::FlowPyrLKを用いた映像表現をご紹介します。以前「チャネル」というイベントでVJとして参加させていただいた際に用いたプログラムで、記録映像がYouTubeに上がっておりますので、まずはこちらを。

 ダンサーさんの踊っている映像を使用して、それをリアルタイムにカットアップしながらオプティカルフローを使ったグラフィックを載せているというプログラムです。

作り方はすごくシンプルで、殆どライブラリ頼りなプログラムになっています。ます以下のインスタンスを用意します。ofxCvはこちら、ofxDelaunayはこちらからダウンロードできます。

ofxCv::FlowPyLK flow; //オプティカルフロー発生器
ofVideoPlayer video; //ビデオプレイヤー
ofxDelaunay delaunay; //ドロネー分割器

vector<ofVec3f> pts; //頂点を保持するための配列必要
flow.calcOpticalFlow(video.getPixelsRef());//特徴点を計算

pts.clear();
pts = flow.getFeatures();//座標データをコピー

そしてこれらのデータをofxDelaunayに投げてあげれば、特徴量を元にドロネー分割された多角形が一発で生成されます。

delaunay.reset();
if (pts->size() > 15){
  for (int i = 0;i < 0;i < pts->size();i+=5){
    delaunay.addPoint(pts[i]);
  }
  delaunay.triangulate();
}

ちなみに、pts->size() > 15というのは頂点が3つ以上取得できないとtriangulateでエラーが発生してしまうためです。

仕込みはおっけーなので、あとは重ねて描画します。


ofSetColor(255);
video.draw(0,0);
ofNoFill();
delaunay.draw();
ofFill();

さらに、ptsには頂点が格納されているので、これの使い方で色々なシーンが作れます。一部をご紹介。

 システム側の調整でも色々と遊べるわけですが、やはり素材も大事だな、、と痛感致しました。特徴量を抽出しているので、背景に何かが写ってしまうとそちらにも線が行ったりして、思うような結果が得られない場合もありました。

 なので本番では背景が床や壁しか写っていないシンプルな構図のカットを選んだり、撮影段階で絞りを限界まで開放して上げることで、特徴点をフォーカスが来ている人物の方へ集中させるなど、素材側もある程度気を使ってあげる必要があります。

 パンフォーカス気味に撮ってしまうと、画面全体にところどころフォーカスが来てしまい特徴点が散り散りになって構図としてのメリハリが少し弱くなったりするようです。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

4

ひつじ

oFセミナー資料

2014年 デジタルアートセミナー#3 (oFセミナー)にて、ひつじが担当したプレゼンについての資料まとめです。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。