情報デザイン専攻 画像情報処理論及び演習 II 周波数分解 FFT Gaussian フィルタと周波数分解 今日の授業内容 www.riken.jp/brict/yoshizawa/lectures/index.html www.riken.jp/brict/yoshizawa/lectures/lec5.pdf. 前回 前々回の復習 レポートの説明. 第 3, 回講義水曜日 限教室 68 吉澤信 shin@riken.jp, 非常勤講師 大妻女子大学社会情報学部. Gaussian フィルタと周波数分解. 3. 演習 : 前回 前々回の続き 高速離散コサイン変換による Gaussian フィルタと周波数分解. 復習 : 周波数 (Frequenc 周波数 振動数 : 波動 振動周期の逆数 (/ 周期. 周期 (Period: 循環するまでの時間. 振幅 (Amplitude: 振動の大きさ. : ゆるやか 大きな特徴 入力画像 変換 復習 : 周波数操作 周波数 処理 処理後の周波数 逆変換 出力画像 CGARTS 協会 : こまやか シャープな特徴 wikipedia 振幅 振動 周期 時間 復習 : 離散コサイン変換 (DCT 非常に処理が重いので FFT を使わない簡単な実装は画像を部分画像 ( ブロック に分割してブロック毎に変換する : 前回の演習 : 周波数フィルタ testdct.cxx を編集して円状にをゼロにするローパスフィルタを作ってみましょう! 6x6 のブロックで半径,,3,,8 で実行してみてください. ヒント :testdct.cxx は四角にを残しているので 円状にするだけ. ブロック DCT 3x3 のブロック毎の DCT 例 :
高速フーリエ変換 (FFT 再帰的に A*Bサイズの変換を より小さいAとBの変換を行う事で高速化 ( バタフラ イ演算 : 計算量は log 高速離散コサイン変換 (FDCT 高速 DCT http://www.wisdom.weizmann.ac.il/~naor/ COURSE/fftlecture.pdf FFT( 高速 DCT/DST を含む の C ライブラリ : FFTW(n 次元対応 : www.fftw.org wikipedia fftsg(3 次元 : 京大 大浦さん : 演習 Ex09.zipのfftsg.hとfftsgd.h www.kurims.kyotou.ac.jp/~ooura/fftj.html FDCT: Fast Discrete Cosine Transform 成分のみで逆変換成分も使って逆変換 輝度値の ( 線形補間による 正規化 DCT による周波数は実数 ( 負の値も含む浮動小数. パワースペクトルの可視化はlog( を使う F( u, log( F( u, どちらにしろ8bit 画像 (055 で表示するには正規化が必要 : I( u, min I( u, 55 max min FDCT によるバンドパスフィルタ 例えば ここで max,min はそれぞれ輝度値の最大 最小値. 注意点 : 周波数を用いた処理は正規化しない 可視化のときだけ正規化や log( を使う. のバンド 36 のバンド 568 のバンド FDCT による周波数分解 全ての周波数バンドを足し合わせると入力になる. ベースの 周波数領域 差分によるバンドパス F 56 [ F 8 [ ( H 56 8 H 568 のバンド
差分によるバンドパス F 3 [ F 6 [ ( H 3 6 H 36 のバンド FDCT による周波数分解 全ての周波数バンドを足し合わせると入力になる. ベースの f F [( F[... ( F[ F [ F[ f ]] 0 F[ F[ 5 ( F[ F[ ( F[ 0 F[ f ]*( H F[ ]. の余りベースの F[ F [ F[ f ]*( H H] F [ F[ f ]*( H ] F [ F[ ]. f : 入力信号 H : スケール F []: 変換 F []: 逆変換 * : 掛け算のロウパスフィルタ. バンド幅は任意でよいが 実用上は 倍のスケール幅をよく使う (Wavelet 多重解像度解析との関係. 8 ガウス関数 次元 : 次元 : 画像ガウス関数 : g g ( x G ( x G (, x y 正規化された x G ガウス関数 : G ( x exp( x y exp( 復習 : ローパスフィルタ (Box 関数 u0 から u0 までの数成分だけ残す. フィルタのカーネル (Kernel 関数. 周波数の高い横方向の波 ( 縦縞 を消す. が小さい 尖った形状 : 標準偏差パラメータ CGARTS 協会 復習 : ローパスフィルタ ( ガウス関数 Gaussian フィルタとも呼ぶ. CGARTS 協会 画像の平均的な明るさが保持される. フィルタのカーネル (Kernel 関数. FDCT による Gaussian フィルタ 高速 DCT 3
Gaussian と Box 関数によるロウパスフィルタ Box 関数 DoG とバンドフィルタ DoG: Difference of Gaussian. DoG g g. メキシカンハット Wavelet の近似. g G x y G exp( Gauss 関数 wikipedia 6 3 8 http://www.partypants.co.uk/hats/sombrerostrawmexicanhat.htm DoG とバンドフィルタ 今回バンドパスフィルタには正規化されたガウス関数により負の DoG を用いる. G DoG とバンドフィルタ 3 ガウス関数を用いた場合の周波数分解は ( 理論的には 全ての周波数を使った帯域 ( バンド 強調なのでギプス現象がない. G G G x y G exp( ( G 6 3 G ( H 3 6 H 36 のバンド ( G 8 56 G 56 8 ( H H 568のバンド DoGFDCT による周波数分解 全ての周波数バンドを足し合わせると入力になる. ベースの 周波数領域 余り : G DoGFDCT による周波数分解 全ての周波数バンドを足し合わせると入力になる. ベースの f F [( F[ f ]* G F[ f ]* G ( F[ f ]* G F[ f ]* G ( F[ f ]* G F[ f ]* G... ( F[ f ]* G F [ F[ f ]] F [ 5 F[ f ]*( G F[ f ]* G 56 G ] F F[ f ]*( G 5 の余り : が ならゼロ [ F[ f ]*( G F []: 変換 F []: 逆変換 * : 掛け算 F[ f ]* G ]. ] F ベースの [ F[ f ]* G ]. 8 f : 入力信号 G : スケール の正規化ガウス関数.
差分による DoG 差分による DoG F[ f ]* G 56 F[ f ]* G 8 F[ f ]* G 3 F[ f ]* G 6 ( G 8 56 G 568 のバンド ( G 6 3 G 36 のバンド 平滑化と差分による周波数分解 つまりGaussianフィルタと差分を繰り返し適用する事で周波数分解を近似出来る. 平滑化 Pyramid 表現 平滑化 (Gaussian, Wavelet 等 を down sampling ( Reduce 操作 しながら行う多重解像度表現の一種. 逆操作は upsampling( Expand 操作. 復習 : 前期画像合成 Reduce ベースの Expand IIPImage f F [ F[ f ]*( G G ] F [ F[ f ]*( G ] F f : 入力信号 [ F[ f ]* G]. G : スケール F []: 変換 F [] : 逆変換 * : 掛け算 の正規化ガウス関数. Burt and Adelson 983. Gaussian Pyramid Gaussian 平滑化を down sampling (Reduce 操作 しながら行う多重解像度表現の一種 : upsampling は Expand 操作 ( 補間. Laplacian Pyramid Difference of Gaussian (DoG を Gaussian Pyramid の各階層で一つ下の階層を Expand した画像と行う. g k [ gk * G( k ], g0 f : 入力信号 f * 畳み込み : ここではGaussianフィルタと同義.. Laplacian: 各周波レベルのエッジ特徴 L k g ] k [ gk ベースの f g Li i0 5
Gaussian & Laplacian Pyramid Gaussian Pyramid 演習 : FDCT www.riken.jp/brict/yoshizawa/lectures/index.html www.riken.jp/brict/yoshizawa/lectures/lec5.pdf 高速離散コサイン変換 www.riken.jp/brict/yoshizawa/lectures/ex09.zip Reduce & Expand 操作の中身となぜ DoG を Laplacian というかは次回以降のフィルタの講義でやります. Laplacian Pyramid 前々回の演習 (BMP と PPM の相互変換 と前回の演習 ( 四角 円 が分からなかった or 出来ていない or 欠席した人は 前回 前々回の演習から始める事! 演習 :Ex09.zip の説明 fftsg.h,fftsgd.h,alloc.h:fft 用ヘッダーファイル. FDCT.h: 高速離散コサイン変換用ヘッダーファイル testfdct.cxx: Box 関数のローパスフィルタを実行. testfrequency.cxx: 周波数分解を Box 関数で実行. testgauss_fdct.cxx:gaussian フィルタを実行. testgauss_frequency.cxx: 周波数分解をガウス関数で実行. まずは make でコンパイルして上記 つのプログラムを実行してみよう! 演習 5: ローパスフィルタと周波数分解 testfdct.cxx: の実行 : 引数 3./testFDCT 入力 bmp 出力名 (.bmp なし 周波数の閾値 (int 閾値, 6, 6, 8 で実行してみましょう. testfrequency.cxx の実行 : 引数 3./testFrequency 入力 bmp 出力名 (.bmp なし バンドの最大閾値 (int 閾値 0 で実行してみましょう. testgauss_fdct.cxx の実行 : 引数 3./testGauss_FDCT 入力 bmp 出力名 (.bmp なし ガウス関数の標準偏差 (double 閾値.0, 6.0 6.0 8.0 で実行して testfdct の結果と比べてみよう. testgauss_frequency.cxx: の実行 : 引数 3./testGauss_Frequency 入力 bmp 出力名 (.bmp なし バンドの最大値 (int 閾値 0.0 で実行して testfrequency の結果と比べてみよう. 演習 5: 差分により周波数分解を作成! つの異なるパラメータでGaussianフィルタ適用した結果を差分する事でバンドパスフィルタの結果を出力するプログラムを作成してみよう! ヒント : testgauss_fdct.cxxを改造する. 異なるパラメータ用に 種類のFDCTクラスとその出力画像クラスを作る 平滑化 ( 変換 ガウス関数との積 逆変換 差分画像を計算 正規化しBMP 画像として出力. 演習 :FDCT クラスの説明 fftsg.h,fftsgd.h,alloc.h:fft 用ヘッダーファイル. FDCT.h: 高速離散コサイン変換用ヘッダーファイル fftsg.h,fftsgd.h,alloc.h を中で使って FDCT クラスを定義 : 内部で Image *in; として周波数 <> 画像変換のためのデータを持つ. 宣言の時点でコンストラクタの Image クラス original の中身が FDCT クラス内の Image *in にコピーされる. 注意点 : クラス内部の画像サイズ in>sx,in>sy は の乗数で元の画像サイズが の乗数でない場合は original>sx,original>sy に 最も近いの乗数になり 余りはoriginalの端のデータが入る. 入力画像 FDCT クラス内の Image *in M 6
演習 :FDCT クラスの説明 FDCT クラスのメソッドは void DCT(: 高速離散コサイン変換を実行 :Image *in の中身がコサイン変換後の周波数成分. void InverseDCT(Image *out: 高速離散コサイン逆変換を実行 : Image *in の中身が逆変換後の画像で out に original と同じ画像サイズを入れる事で in の中身を出力としてコピー. 注意点 :InverseDCT( を実行するには DCT( を先に実行する事. void ormalize(image *out: out の輝度値を 055 に正規化. void tospectrum(image *out: パワースペクトル画像 log(f*f を out へ保存. void CopyTo(Image *din: in の中身を din にコピー. void CopyFrom(Image *din: din の中身を in にコピー. 演習 :FDCT クラスの説明 3 FDCT クラスの使い方は testfdct.cxx を参照.. 宣言 メモリ確保 :FDCT *fft_r new Image(R; ただしR はImageクラスで中身が入っている事 ( 宣言 メモリ確保 readbmp(.. 変換 :fft_r>dct(; 3. 周波数の操作 :fft_r>in>img[i][j]. 逆変換 :fft_r>inversedct(out; ただし outはrと同じ大 きさでメモリが確保されたImageクラス. 5. メモリ開放 :delete fft_r; 復習 : ハイパスフィルタ u0 から u0 までの数成分だけ残す. H high H からロウパスを引く : 復習 : 高域強調フィルタ ハイパスフィルタから作る事が出来る. H hemph kh high エッジ強調! CGARTS 協会 CGARTS 協会 バンドパスフィルタ : 特定周波数成分の抽出. 演習 53: 高域強調フィルタ 高域強調フィルタを作ってみよう! ヒント :. Gaussianフィルタ (testgauss_fdct.cxx を改造する.. フィルタのカーネルは周波数領域で H hemph kh k( H high 3. ここでロウパスフィルタのカーネル H はプログラム内 ではgauss>img[i][j] というガウス関数の画像を用いる.. フィルタ後は正規化なし ( 輝度値が0 以下は0 55 以上は55. 5. ロウパスフィルタのガウス関数のパラメータ ( 標準偏差 と上の強 調フィルタのパラメータk 二つのパラメータをプログラムの引数で 与える. 6. testgauss_fdct.cxxは H だけのフィルタ. レポート第 5 回 www.riken.jp/brict/yoshizawa/lectures/index.html www.riken.jp/brict/yoshizawa/lectures/report05.doc 提出〆切 0 年 月 日 ( 水 :3 週間レポート作成の注意点 をよく読む事! www.riken.jp/brict/yoshizawa/lectures/report_ex.pdf 7
来週の予定 フィルタ処理 リクエストがあれば これまでの演習 & 第 5 回レポートの質問. 8