Microsoft PowerPoint - Lec23 [互換モード]

Similar documents
Microsoft PowerPoint - Lec24 [互換モード]

Microsoft PowerPoint - Lec23 [互換モード]

Microsoft PowerPoint - adi05.ppt [互換モード]

Microsoft PowerPoint - Lec04 [互換モード]

Microsoft PowerPoint - Lec15 [互換モード]

Microsoft PowerPoint - Lec15 [互換モード]

Microsoft PowerPoint - Lec22 [互換モード]

Microsoft PowerPoint - Lec22 [互換モード]

memo

JavaプログラミングⅠ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C言語講座 ~ファイル入出力編~

PowerPoint プレゼンテーション

PowerPoint Presentation

Microsoft PowerPoint - Lec21 [互換モード]

演算増幅器

02: 変数と標準入出力

2006年10月5日(木)実施

Microsoft PowerPoint - Lec11 [互換モード]

Microsoft PowerPoint - comprog11.pptx

02: 変数と標準入出力

Prog1_12th

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - Lec11 [互換モード]

Prog1_6th

デジタル表現論・第6回

Microsoft PowerPoint - 第3回目.ppt [互換モード]

Microsoft PowerPoint - Lec07

PowerPoint Presentation

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

計算機プログラミング

スライド 1

memo

プログラミング基礎

memo

Microsoft PowerPoint - prog04.ppt

Microsoft Word - Cプログラミング演習(9)

Microsoft PowerPoint - prog06.ppt

一方, 物体色 ( 色や光を反射して色刺激を起こすもの, つまり印刷物 ) の表現には, 減法混色 (CMY) が用いられる CMY の C はシアン (Cyn),M はマゼンタ (Mgent),Y はイエロー (Yellow) であり, これらは色の 3 原色と呼ばれるものである なお, 同じシア

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

今後の予定 6/29 パターン形成第 11 回 7/6 データ解析第 12 回 7/13 群れ行動 ( 久保先生 ) 第 13 回 7/17 ( 金 ) 休講 7/20 まとめ第 14 回 7/27 休講?

Microsoft Word - Cプログラミング演習(10)

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

ファイル入出力

Microsoft PowerPoint - prog03.ppt

pp2018-pp9base

Microsoft Word - SKY操作マニュアル.doc

ToDo: 今回のタイトル

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Prog1_2nd

メソッドのまとめ

Prog1_10th

HCI プログラミング 5 回目ウィンドウに画像を表示してみよう 今日の講義で学ぶ内容 画像の表示 画像のエフェクト 画像のビューポート指定 画像の表示 1 画像を表示してみましょう 画像の表示はクラス ImageView により管理されます ソースファイル名 :Sample5_1.java //

Microsoft PowerPoint - ip02_01.ppt [互換モード]

ガイダンス

メソッドのまとめ

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

ファイル入出力

Microsoft PowerPoint - handout07.ppt [互換モード]

Microsoft PowerPoint - 計算機言語 第7回.ppt

C#の基本2 ~プログラムの制御構造~

Taro-ファイル処理(公開版).jtd

Prog2_10th

02: 変数と標準入出力

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft PowerPoint pptx

データ構造

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - 10Com2.ppt

Microsoft PowerPoint - 画像工学 print

※ ポイント ※

プログラミング入門1

スライド 1

第9回 配列(array)型の変数

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

プログラミング基礎I(再)

オブジェクト指向プログラミング・同演習 5月21日演習課題

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

02: 変数と標準入出力

Java講座

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

講習No.9

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft PowerPoint - Lec07 [互換モード]

PowerPoint プレゼンテーション

Microsoft PowerPoint - 14th.ppt [互換モード]

Microsoft PowerPoint - lec10.ppt

GEC-Java

Microsoft PowerPoint - chap10_OOP.ppt

DVIOUT

02: 変数と標準入出力

Microsoft Word - no12.doc

02: 変数と標準入出力

Microsoft PowerPoint - 11.pptx

Prog2_9th

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - Lec18 [互換モード]

Transcription:

情報デザイン専攻 画像情報処理論及び演習 II - 動画像処理 - 基礎 Video Stylization 今日の授業内容 www.riken.jp/brict/yoshizawa/lectures/index.html www.riken.jp/brict/yoshizawa/lectures/lec3.pdf 1. 連番画像とビデオ.. Artistic Stylization Video Stylization 3. 演習 :DoG 画像 DoGビデオ Artistic Stylization 第 10 回講義水曜日 1 限教室 618 吉澤信 shin@riken.jp, 非常勤講師 大妻女子大学社会情報学部 レポート 05 は今日〆切です! 重要 : は次回レポートの内容なので頑張って p(^ ^)q + 今日作るプログラム ( クラス ) を次回以降の演習で使うので必ず来週までに作成してください! レポート 04 の結果を取りに来てください! 動画像の基礎 動画像の基礎 動画像フォーマット : - ASF(wmv 等 ), AVI, MPEG (mpg,mp4 等 ), DVD, RealVideo, DviX, Flash(flv), QuickTime, MP4, - Animated Gif, multipage TIFF, 理論 / 数学的には 1 次元増えただけ 3D 画像. D: 横幅 高さ 3D: 横幅 高さ 時間 講義では複数の D 画像の組で 3D 画像を扱う. - 画素 : ピクセル (D) ボクセル (3D). - サイズ :(ss (sss. - 輝度値 : 次元配列 3 次元配列. - ループ : 重 3 重. - フレームレート : 単位時間のフレーム (D 画像 ) 数 30 frame/sec. 等. D 画像 3D 画像 動画像の基礎 3 複数 D 画像ファイル 動画フォーマットの変換 : - 符号化方式 ( ファイルフォーマット ) を用いてデータの encode/decodeを行うコーデックが必要. - フリーのソフトを使うのが簡単で良い. - 例えばWinでは AVIMaker(bmp avi) やAviUtl(bmp avi): http://www.vector.co.jp/soft/dl/win95/art/se1164.html http://spring-fragrance.mints.ne.jp/aviutl - http://www.vector.co.jpに色々な動画 画像ソフトがあるので みんな独自のビデオを連番 bmp 画像にしてみましょう! - Linuxでは機能が多彩で難しい! 画像 動画 動画 : ffmpeg - 簡単! 複数 bmp gifアニメ (Linux): convert - 動画へ convert *.bmp 出力.gif - 画像へ convert 入力.gif 出力.bmp 番号を揃えたい場合はCのprintfの表記と同じに convert 入力.gif 出力 %0 桁数 d.bmp とする. 例えば3 桁なら convert 入力.gif 出力 %03d.bmp (0,0,0) j ( 0, sy 1,0) for( i 0; i st; i ){ 動画像の配列表現 k ( sx 1, sy 1,0) for( j 0; j sy; j ){ for( k 0; k sx; k ){ I[ i][ j][ k]... ( sx 1,0,0) i ( 0,0, st 1) ( 0, sy 1, st 1) int I[ st][ sy][ sx]; double I[ st][ sy][ sx]; 3D 画像の配列表現 ( sx 1,0, st 1) ( sx 1, sy 1, st 1) 1

動画像の数式表現 輝度値の数式表現 : 高次元の高さ関数 z I( 又は z I( x), x ( カラー画像 : z I( ( R(, G(, B( ) 又は z I( x) ( R( x), G( x), B( x)), x ( Image3D クラスの使い方 使い方は今まで使ってきたSimpleImage.hのImage クラスとほぼ同じで 一次元増えただけ. Image3D* 変数名 = new Image3D(); か Image3D* 変数名 = new Image3D( サイズ ); 例えば横 500 縦 56の画像が10 枚あった場合に 3D 画像を Image3D *AAA = new Image3D(500,56,10); とし for(int i=0;i<aaa->st;i++) 使い終わったらdelete AAA; を忘れずに! for(int j=0;j<aaa->sy;j++) for(int k=0;k<aaa->sx;k++)aaa->img[i][j][k] で輝度値を参照する. カラーの場合は三つのImage3D 復習 :Artistic Stylization アーティストの様式を疑似的に再現して実画像を生成 編集する事 : NPR/ 計算 Photography の分野. Artistic Video Stylization D の基本フレームワークを 3D 化してみよう! エッジ保存平滑化 エッジ抽出 ポスター化 ( 多値化 量子化 ) 合成. スタイル化 動画像へ拡張 J.Collomosse1 and J. Kyprianidis, EG 11. D の基本フレームワーク 入力 Bilateral フィルタの繰り返し 平滑化画像 色相 H の多値化 & 明度 V の強調 ポスター化 エッジ抽出 DoG エッジ画像 復習 :DoG DoG: Difference of Gaussian. g 1 x y exp( ( DoG, K ( g ( gk ( wikipedia ) HSV 量子化画像 RGB の多値化 RGB 量子化画像 出力 Stylized 画像

DoG DoG と入力画像の畳み込みが負の領域 = エッジ : 復習 :Bilateral フィルタとは? 0.5, K K 3 K 4 K 5 1.0, K K 3 K 4 K 5 Gaussian Filter Z( g ( x y ) Spatial-Tonal Normalized Convolution: I new ( x) g ( r) e a r a Z( I( dy / Input Bilateral Filter Z( g ( I ( x) I ( ) g ( x y ). Z( d h Intensity (Tonal) Kernel Spatial Kernel エッジ特徴を保存する! Bilateralフィルタの繰り返し適用 エッジ保存平滑フィルタを繰り返し適用するとエッジに沿った領域が断片化される ( 領域抽出効果 ): I new ( x) Z( I( dy / Z( d Z ( g ( I ( x) I ( ) g ( x y ) h a g ( r) e. a r DoG+Bilateral フィルタ Bilateral フィルタを繰り返し適用後に DoG を適用 : 上 : 入力画像に DoG: 下 :Bilateral フィルタ 3 回適用後に DoG: 入力 1 回 回 3 回 5.0, h 0.1 輝度値の標準偏差 0.5, K K 3 K 4 K 5 DoG+Bilateral フィルタ Bilateral フィルタ後の画像と合成すると 上 : 入力画像に DoG: ポスター化 多値化で量子化する事でポスター化 : - RGB 毎に多値化すると色が混ざる. - HSV 空間の色相 (H) で多値化し明度 (V) を強調. 下 :Bilateral フィルタ 3 回適用後に DoG: 0.5, K K 3 K 4 K 5 Bilateral フィルタ 3 回適用後 BGB 毎に 4 段階の値へ量子化 3

ポスター化 HSV 空間の色相 (H) で多値化し明度 (V) を強調. ポスター化 3 HSV 空間の色相 (H) で多値化し明度 (V) を強調. RGB 毎の混色で鏡面的効果を演出. 色相を 16 段階の値へ量子化 + 明度を強調. 色相を 16 段階の値へ量子化 + 明度を強調 +RGB 毎に 4 段階に多値化. 入力 今週は Video への DoG 拡張 Bilateral フィルタの繰り返し 来週 平滑化画像 色相 H の多値化 & 明度 V の強調 ポスター化 エッジ抽出 DoG 今日 エッジ画像 DoG の 3D 拡張 そのままの拡張は時空間エッジになるので Artistic Stylizationでは工夫が必要 : - 注意点 : 時間方向のパラメータhは空間と分けなければダメ 時間方向の畳み込み半径も同様. 1 1 x y g, h exp( h DoG g ( g t ) h ( ) (, K, h(, h K, Kh t HSV 量子化画像 RGB の多値化 RGB 量子化画像 最終的に Ex15.zip の Style.cxx のビデオへの拡張を作成. 出力 Stylized 画像 DoG の 3D 拡張 DoG の 3D 拡張 3 ストーリー展開の描写は OK だが単純に重ねるとあまり良くない. 4

DoG の 3D 拡張 4 DoG の 3D 拡張 5 D 空間 DoG を時間方向に平滑化し 残像効果 : - 注意点 : レポートでは講義で紹介した時間方向の拡張の仕方以外でもデザインして OK. g 1 x y exp( ) ( ( 1 t exp h h DoG, K, h( gh( ( g ( gk ( ) g h DoG の 3D 拡張 6 DoG の 3D 拡張 7 レポートでは時間方向拡張の仕方をデザインして OK. ただし狙ったデザインの目的と使った数式を明記する事. パラメータの調節が必要. 演習 :DoG 画像 DoG ビデオ www.riken.jp/brict/yoshizawa/lectures/index.html www.riken.jp/brict/yoshizawa/lectures/lec3.pdf www.riken.jp/brict/yoshizawa/lectures/ex15.zip 1. Ex15 内のプログラムを動かしてみる.. DoG ビデオプログラムの作成. 演習 :Ex3-1 Ex15.zip 内で make でコンパイルし testvideoio.cxx DoGEdge.cxx DoGEdge.cxx Style.cxx を動かしてみる. 連番画像の入出力 : VideoIO.h void OpenVideo(char * 入力フォルダー名, Image3D *R, Image3D *G, Image3D *B, int *s int *s int *s; void SaveVideo(char * 出力フォルダー名, char * 出力ファイル名, Image3D *R, Image3D *G, Image3D *B); DoGEdge.cxx: DoG によるエッジ画像の作成 : 引数 3../DoGEdge 畳み込み半径 (in DoG 標準偏差 (double) DoG バンド幅 (double)./dogedge lena.bmp ex_1_1.bmp 10 0.5./DoGEdge lena.bmp ex_1_.bmp 10 0.5 3./DoGEdge lena.bmp ex_1_3.bmp 10 0.5 4./DoGEdge lena.bmp ex_1_4.bmp 10 0.5 5 を実行して! 5

演習 :Ex3-1 DoGEdge.cxx: DoG エッジと元画像の合成 ( 引数 3, DoGEdge と同じ ): DoGEdge と同じパラメータで出力ファイル名を変えて実行してみましょう! Style.cxx: Artistic Stylization 画像の作成 ( 引数 11)../Style 畳み込み半径 (in DoG 標準偏差 (double) DoG バンド幅 (double) Bilateral フィルタ空間標準偏差 (double) Bilateral フィルタ輝度標準偏差 (double) Bilateral フィルタ繰り返し回数 (in HSV 量子化数 (in HSV 量子化 V 強調パラメータ (double) RGB 量子化数 (in./style lena.bmp ex_st_1.bmp 0 0.5 3.0 5.0 0.1 3 16 0.7 4 と./Style lena.bmp ex_st_1.bmp 10 0.5 5.0 5.0 0.1 3 16 0.7 4 で実行してみましょう! 自分の画像で DoGEdge.cxx と Style.cxx をパラメータを調節してスタイリッシュな画像にしてみてください. 演習 :Ex3- DoGVideoEdge.cxxとDoGVideoEdge.cxxを編集し 連番画像のDoGエッジ動画を作成するプログラムを完成せよ. ヒント : ファイル内のコメントとDoGEdge.cxxをよく見てみてください. DoG 1 x y g ( exp( ) 1 t ( exp h h, K, h( gh( ( g ( gk ( y と同じでも OK 自分独自の拡張でも OK ただし単純拡張はダメ. は の様に残像だけなので 評価時刻での DoG エッジも出るようにデザインすると高得点! g h )) 来週の予定 動画像処理その (1/19). 参考資料 : Image3D クラス 3D 画像クラスの作成 3D 画像クラス : Image3DクラスをSimpleImage3D.h というヘッダーファイル名で作ってみる. www.riken.jp/brict/yoshizawa/lectures/ex14.zip 必要なクラスのメンバー / メソッド : - 画像サイズ (in で三つssst. - 輝度値を格納するためのdoubleの3 重ポインター. - コンストラクター二つ : - 引数無 : サイズにゼロ 輝度値のポインターに NULLを代入する. - 引数画像サイズ : 輝度値の3 重ポインターのメモリを確保して3 次元配列にする. - デストラクター : クラスがdeleteしたとき輝度値の3 次元配列をdeleteする. C++ クラスの基礎 class クラス名 { /* 設計図の様なものでクラス = 新しい型 */ public: /* パブリックの場合は クラスの外から参照可能 */ メンバー変数 /* クラスが持っている変数 構造体 クラス内クラス */ クラス名 (){ /* コンストラクター :new されたときに呼ばれる. */ クラス名 ( 引数 ){ /* コンストラクターは複数あってよい */ ; ~ クラス名 (){ /* デストラクター :delete されたときに呼ばれる. */ 戻り値メソッド名 ( 引数 ){ /* メソッドを作れる = */ private: /* プライベートの場合は クラスの外から参照不可 */ 6

多重ポインターから多次元配列を作る方法 1 重ポインターから 1 次元配列を作る方法 : double *A = new double[n]; これで A[0], A[1], A[N-1] まで配列として使える. - 使い終わったらメモリの開放が必要 :delete [] AAA; 重ポインターから 次元配列を作る方法 : double **A = new double *[N]; for(int i=0;i<n;i++)a[i] = new double[m]; これで A[0][0], A[0][1], A[0][M-1], A[1][0], A[1][1], A[N-1][M-1] まで配列として使える. - 使い終わったらメモリの開放が必要 : for(int i=0;i<n;i++) delete [] A[i]; delete [] A; 多重ポインターから多次元配列を作る方法 3 重ポインターから 3 次元配列を作る方法 : double ***A = new double **[st]; for(int i=0;i<st;i++){ A[i] = new double *[sy]; for(int j=0;j<sy;j++)a[i][j] = new double[sx]; これで A[0][0][0], A[0][0][1], A[0][0][sx-1], A[0][1][0], A[0][1][1], A[0][sy-1][sx-1], A[1][0][0], A[1][0][1], A[st-1][sy-1][sx-1] まで配列として使える. 同様にメモリの開放は以下 : for(int i=0;i<st;i++){ for(int j=0;j<sy;j++) delete [] A[i][j]; delete [] A[i]; delete [] A; 連番画像の入出力へ向けて (0,0,0) j ( 0, sy 1,0) k ( sx 1, sy 1,0) for( i 0; i st; i ){ 1. BMPIO で一枚づつテンポラリーの D 画像を開く.. 3D 画像の i 番目にコピー. ( sx 1,0,0) i ( 0,0, st 1) ( 0, sy 1, st 1) int I[ st][ sy][ sx]; double I[ st][ sy][ sx]; 3D 画像の配列表現 ( sx 1,0, st 1) ( sx 1, sy 1, st 1) 連番画像名の取得方法 Ex14.zip 内の ImageSetIO.cxx を開いてください. 入力としてフォルダー名を与えて その中の BMP ファイルをファイル名順にソートしたファイル名のリストを得るプログラムです. 今回の演習でやる方法は ステップ 1:Linux/Unix コマンドの ls と grep を C/C++ からシステムコール関数 system() を使って 与えられたフォルダー名内の BMP 画像ファイル名 ( 複数 ) をテンポラリーのファイル (tmp_img_file_names.tx に書き出す. - system() は stdlib.h が必要. - system(char*) で引数に書いた Linux コマンドを実行出来る. 例 :system( ls ); 連番画像名の取得方法 今回は以下のコマンドを用いる : ls 入力フォルダー名 grep.bmp > 出力ファイル名 ここで と > はそれぞれ パイプとリダイレクトと呼ばれてコマンドの結合とファイルへの出力を行える : - ls AAA AAA 内のファイル名 フォルダー名を出力する. - grep AAA BBB BBB の中から AAA がある行を抜き出す. - AAA BBB AAA の結果を BBB に渡す. - AAA > BBB AAA の結果を BBB に書き出す. - sprintf( 格納先,printf の表記, 変数 ) でコマンド内にメインの引数やテンポラリーファイル名をプリント. 与えられたフォルダー名内の ls の結果から.bmp が付いているファイル名だけ抽出して出力ファイルに書き出すコマンド. 連番画像名の取得方法 3 ステップ: テンポラリーのファイル (tmp_img_file_names.tx を開いて 一行づつfscanf() で呼び込み vector<char *> へ格納する : - FILE *fp = fopen( ファイル名, r ); で開いたファイルポインター fpを使ってfscanf(fp, %s, 格納先 ) の戻り値がEOFでない間 繰り返しスキャンする. - vectorを使うには #include<vector> が必要. - vector<char *> へ代入するためにchar * をnewして fscanf() の結果をコピーする. -.push_back() メソッドを使ってvectorへ格納する. 格納後はvectorなので配列の様に使える. 例えば vector <char *> AAA; ならAAA[0] に最初のファイル名がchar * で入っており 以下 AAA[1], AAA[] と使える. サイズ (push_back した回数 =ファイル名の数 ) は AAA.size() で得られる. 7

連番画像名の取得方法 4 ステップ 3:std::sort を使って vector<char *> に格納したファイル名をソートする. 例えば vector <char *> AAA; なら std::sort(aaa.begin(),aaa.end()); でソートされる. - std::sort は #include<algorithm> が必要. ステップ 4: ソート後は vector<char *> を配列の様に使いファイル名の操作を行い 実際の処理をする. - ImageSetIO.cxx は連番名の取得だけなので 実際の処理は無いが 演習では VideoIO.cxx でソート後のファイル名を順番に開いて 3D 画像クラスに格納する. BMPIO.h を使って D 毎に入出力をファイル名の数だけ行う. ステップ 5:new した char * のメモリを解放する. 例えば for(i=0;i<aaa.size();i++)delete [] AAA[i]; 演習 : 連番画像の入出力 www.riken.jp/brict/yoshizawa/lectures/index.html www.riken.jp/brict/yoshizawa/lectures/lec3.pdf www.riken.jp/brict/yoshizawa/lectures/ex14.zip 1. Lec3-1: 3D 画像クラスを SimpleImage3D.h として作成せよ.. Lec3-: 連番画像の入出力を行うプログラム VideoIO.cxx をコメントを読みながら作成せよ. LV3_1.zip と LV3_5.zip を展開して入力フォルダーとして実行してみよ. Lec3-3: の 1, を使って 連番の各画像に Bilateral フィルタ (Lec0-) を計算して結果を保存するプログラムを作成してみましょう. 8