第 3 回講義水曜日 限教室 68 情報デザイン専攻 画像情報処理論及び演習 II - 周波数分解 - フーリエ変換 DCT と周波数操作 吉澤信 si@rik.jp, 非常勤講師 大妻女子大学社会情報学部. 高校数学の復習. 今日の授業内容 www.rik.jp/brict/yosizw/cturs/id.tml www.rik.jp/brict/yosizw/cturs/c5.pdf. レポート 04 について (0/ 〆切 ) 3. フーリエ変換と周波数操作. 4. 演習 :Discrt Cosi Trsform. (DCT, 離散コサイン変換 ) によるフィルタ処理. 今日の演習はレポート で出すので みなさん頑張ってくださいねー p(^^)q 復習 : 三角関数 復習 : 微積分 直角三角形の角度から辺の長さの比を与える. si, cos si t b b cos cot t csc si sc b cos b wikipdi 微分は関数の微小変化率 : df ( ) f ( ) lim 0 d 積分は微分の逆で 和 の一般化 : d ( f ( ) ) f ( ) b b [ ] ( b 一階微分は速度 接線. 二階微分は加速度 曲率. f ( ) wikipdi ) 面積 体積など. 復習 : 虚数 複素数 復習 : 指数関数 自然対数 虚数は平方根の中が負の数 : - 虚数単位 : i - 例 : i 複素数は虚数と実数の線形和 : R( z) z i - 実数部分 : - 虚数部分 : Im( z) - 例 : z 3 i R( z) 3, Im( z) 指数関数 : 対数関数は指数関数の逆関数 : - は を底とする の対数 (logritm). - 自然対数 : f ( ) g( ) log log - ネイピア数 :.788, lim( ) dt, t wikipdi
復習 : 指数関数 p() 第 回レポート 04 指数関数 : f ( ) ネイピア数が底 ( 自然対数 ) の指数関数を potil fuctio の略で p() と表す : f ( ) p( ) - 様々な数学的に良い性質 : d, i cos i si, tc. オイラー公式 - 関数解析 統計 信号 画像処理. wikipdi フォーマット変換 4 問 雛形 : www.rik.jp/brict/yosizw/cturs/rport04.doc 0 月 日〆切. 提出先 & レポートの注意点 : www.rik.jp/brict/yosizw/cturs 周波数分解 周波数操作 入力画像 フーリエ変換 Wvlt 変換 K 展開等の関数展開 周波数 係数列 入力画像 変換 周波数 処理 処理後の周波数 逆変換 出力画像 周波数 (Frquc) 周波数操作 実はみなさんよく使ってる!? 周波数 振動数 : 波動 振動周期の逆数 (/ 周期 ). 周期 (Priod): 循環するまでの時間. 振幅 (Amplitud): 振動の大きさ. : ゆるやか = 大きな特徴 入力信号 ( 音楽 音声 ) 出力信号 ( エフェクト済み ) 周波数分解 再構成 ( 逆変換 ) 周波数 周波数操作 変更された周波数 : こまやか = シャープな特徴 音楽 音声の再生ソフトウェア ハードウェアでのイコライザー (Equlizr) など. 振動 周期 振幅 wikipdi 時間 wikipdi
- 意味あるの? 役に立つの? デジタル エンターテイメント応用 : 画像のアート処理 NPR(No-Potorlistic Rdrig) 等に有用. J.Collomoss d J. Kpriidis, EG. 形状処理への応用 3 次元メッシュなど形状への応用 : D. Zori t l., SIGGRAPH Cors 000. M. Eck t l, SIGGRAPH 95. R. Fttl t l., SIGGRAPH 007. H. Kg t l. IEEE TVCG 009. B. v d H. Zg, SIGGRAPH Cours 00. 復習 : 三角関数 関数展開 直角三角形の角度から辺の長さの比を与える. si, cos si t b b cos cot t csc si sc b cos b wikipdi 関数を基底と係数の 次 ( 線形 ) 結合で表す事. 例えば三角関数を基底とすると f 0 3 cos cos 3 cos 3 b si b si b3 si 係数 = 周波数成分 :, b 基底 :si, cos 関数 = 係数 基底 wikipdi 関数展開 次元では ( 音声 信号処理等 ) = 関数 f () 係数 基底 次元では ( 画像処理等 ) = 関数係数基底 f ( u, v v v v v v v v v v v v フーリエ級数 フーリエ級数 :[- ] のパターンを繰り返す周期関数を si() とcos() の和で表す. f f 0 3 cos cos 3 cos 3 b si b si b3 si 0 cos b si c i i 周波数成分 : 基底の係数 と b の決め方は f() に cos si をかけて積分. オイラー公式 cos i si b f cos f si f() + + H. Suzuki, U. Toko wikipdi 3
復習 : 微積分 復習 : 虚数 複素数 微分は関数の微小変化率 : df ( ) lim 0 f ( ) d 積分は微分の逆で 和 の一般化 : d ( f ( ) ) f ( ) b b [ ] ( b 一階微分は速度 接線. 二階微分は加速度 曲率. f ( ) wikipdi ) 面積 体積など. 虚数は平方根の中が負の数 : - 虚数単位 : i - 例 : i 複素数は虚数と実数の線形和 : R( z) z i - 実数部分 : - 虚数部分 : Im( z) - 例 : z 3 i R( z) 3, Im( z) 復習 : 指数関数 自然対数 復習 : 指数関数 p() 指数関数 : f ( ) 指数関数 : f ( ) 対数関数は指数関数の逆関数 : - は を底とする の対数 (logritm). - 自然対数 : g( ) log log - ネイピア数 :.788, lim( ) dt, t wikipdi ネイピア数が底 ( 自然対数 ) の指数関数を potil fuctio の略で p() と表す : f ( ) p( ) - 様々な数学的に良い性質 : d, i cos i si, tc. オイラー公式 - 関数解析 統計 信号 画像処理. wikipdi フーリエ変換 もとの関数 f() から 別の関数 F(k) への変換 : 順変換 ik Fk f ik 逆変換 f F k dk i cos i si フーリエ変換の性質 f g Fk Gk, f Fk ある関数 f() を F(k) の積分 (~ 和 ). F(k) は f() から積分によって計算. f() と F(k) の式は対称. f() が実数の関数でも F(k) は一般に複素関数 : f() が偶関数の場合には F(k) は実関数 (cos のみ ) 組の式でフーリエ変換対をなす フーリエ変換 逆変換という用語を使うこともある. フーリエ変換を f F f と 回行えば 元の関数に戻る. H. Suzuki, U. Toko は規格化係数なので あまり気にしなくて良い デジタル画像 : 離散フーリエ変換 フーリエ変換の式は連続関数に対するもの. デジタル画像はサンプリングされて 飛び飛び ( 離散データ ). 離散フーリエ変換 逆変換 : 離散データに対するフーリエ変換 逆変換. 変換の結果の周波数列も離散的に求まる. 0404 の画像 0404 の係数列 : 講義資料での周波数画像は全て二乗して log(+f) を適用. N j ik Fk ( ) f( s)p( ) i0 N ( k 0,,..., N ) 変換実数 (cos) 係数虚数 (si) 係数 + 4
離散フーリエ変換2 フーリエ変換2 画像では2次元なので パワースペクトル: 周波数の強度. F (u, v ) R F (u, v ) Im F (u, v ) N M F (u, v ) f (i, j ) p( ) i 0 j 0 - 高速フーリエ変換(FFT):次週少しやります. サンプリング数がのべき乗 例 5や,04 の時に 高速に計算する方法(Nのべき乗の方法もある). 3 4 4 3 虚数(si)係数 実数(cos)係数 1画素の離散フーリエ変換を計算するのに全ての画素の重み 付和が必要 全ての画素の変換を計算するには入力画素 数の2乗に比例する計算量が必要 画像処理では よく象限を 3, 4, 3, 4 と 入れ替えた画 像を用いる. (周期性を用い た離散変換を 行うため) フーリエ変換3 離散コサイン変換(DCT) 余弦関数列(cos)のみを基底に用いた変換: - - CG-ARTS協会 入力を 軸で折り返して偶関数化して離散フーリエ変換する事 と同義 離散フーリエ変換は実数に対して複素数を返すのに 対して DCTは常に実数を返す. 成分に集中度が上がるため圧縮やフィルタ処理でよく 用いられている. 順変換 逆変換 N M ( j )u (i )v ) cos( ) f (i, j ) F u, v C (u )C ( v ) cos( M N i 0 j 0 N M 4 ( j ) ( i ) f, C (i )C ( j ) cos( M ) cos( N ) F (i, j ) MN i 0 j 0 wikipdi 偶関数の例 奇関数の例 C ( ) ( 0) ( 0) 離散コサイン変換(DCT)2 離散コサイン変換(DCT)3 DCT 非常に処理が重いので FFTを使わない簡単な 実装は画像を部分画像(ブロック)に分割してブロ ック毎に変換する: 成分のみで逆変換 成分も使って逆変換 ブロック DCT 32x32のブロック毎のDCT例: 5
周波数フィルタリング 周波数操作 画像のフーリエ変換 : - 空間領域から周波数領域へ. 入力画像 変換 周波数 処理 処理後の周波数 逆変換 出力画像 - フーリエ逆変換すれば 画像になる. H で周波数特性を操作. G( u, F( u, H ( u, H. Suzuki, U. Toko フーリエ変換して 画像を周波数領域に変換してしまえば フィルタリングは 二つの関数を単純に掛け算するだけ. ローパスフィルタ ローパスフィルタ -u0 から u0 までの数成分だけ残す. 周波数の高い横方向の波 ( 縦縞 ) を消す. (u,=(0,0) のフィルタの値が なので (u,=(0,0) の成分が保存される 画像の平均的な明るさが保持される. ハイパスフィルタ 高域強調フィルタ -u0 から u0 までの数成分だけ残す. H ig ( u, H ( u, low からロウパスを引く : ハイパスフィルタから作る事が出来る. H mp ( u, kh ( u, ig エッジ強調! バンドパスフィルタ : 特定周波数成分の抽出. 6
ギプス現象 Ovrsootig ローパスフィルタ = 成分の切り捨てはデータにエッジがあった場合に不連続なデータを連続関数で近似するためエッジ周辺での誤差が非常に大きくなる事 : 画像ではリングアーティファクトと呼ばれている : 圧縮や補間等でのカーネルの打ち切り誤差. ギプス現象 Ovrsootig MtWorld MtWorld wikipdi www.jroli.org その他の変換 フーリエ変換以外にも 様々な基底を用いた関数展開が幅広く周波数解析に用いられている. - K(Kru-o 展開 : データの共分散行列の固有ベクトルを基底とする. 最小 主成分分析二乗的に最もデータを近似出来る展開. (PCA) の一般化 - 球面調和関数 : 超球面上の関数空間の正規直交基底 ( 円や球への離散化で回転非依存にしやすい ). - Zrik 関数 固有関数展開 tc. PCA: Pricipl Compot Alsis - 主成分分析 : 与えられた点群データに対して最小二乗的に最も相関が強い方向と強度を計算する : - 直線 平面 Hprpl 等のデータへの当てはめ ( 最小二乗近似 ). - Covric mtri( 共分散行列 = 平均からの差 ) の固有値 ベクトルは Bst fit 楕円 llipsoid 等の近似. MtWorld その他の変換 Wvlt: 入力信号を小さな波形の拡大縮小と平行移動の重ね合わせで表現. - フーリエ変換は時間軸上で常に一定のパターンを持ったデータ解析に有用だが 時刻によってパターンが変化するデータ解析には不向きである. ウェーブレット変換では局所的な波を平行移動と拡大縮小で波を表現するため 有限の区間内にあるデータの特性を解析するには三角関数より適している. - 多重解像度解析 (Multirsolutio Alsis): パターンを周波数分解する作業を繰り返し行い特徴を解析. 入力画像 変換 周波数分解と操作 周波数 処理 処理後の周波数 逆変換 出力画像 演習 : DCT www.rik.jp/brict/yosizw/cturs/id.tml www.rik.jp/brict/yosizw/cturs/c5.pdf 離散コサイン変換による周波数フィルタ www.rik.jp/brict/yosizw/cturs/e08.zip 前回の演習 (BMP と PPM の相互変換 ) が分からなかった or 出来ていない or 欠席した人は 前回の演習から始める事! 7
演習 :E08 の説明 演習 :E08 の説明 DCT.: 離散コサイン変換のブロック実装 : 順変換 :Img *DCT(Img *i,it X,it Y): 入力画像 i を X Y ブロックで DCT を実行し周波数画像を戻り値で返す. - 注意点 : 周波数画像は入力画像サイズがブロックサイズで割り切れない場合は入力画像サイズより少し大きなサイズで作成される. 逆変換 : void IvrsDCT(Img *dct,img *out, itx,it Y): DCT() にて変換された画像 dct を X Y ブロックで逆変換し出力画像 out へ保存. tstdct.c: 離散コサイン変換の例. mk でコンパイル. 引数 4 つ :. 入力 BMP ファイル名.. 出力ファイル名 ( ただし拡張子.bmp なし ). 3. ブロックサイズ (it). 4. 周波数の閾値 (it): を四角にカット../tstDCT 入力 BMP 出力ファイル名 (.bmp 抜き ) ブロックサイズ (it) 周波数の閾値 (it) 出力は 3 つの bmp 画像ファイル : 出力ファイル名 _spctrum.bmp 出力ファイル名 _smoot.bmp 出力ファイル名 _smoot_spctrum.bmp 演習 : 周波数フィルタ tstdct.c を編集して円状にをゼロにするローパスフィルタを作ってみましょう! 66 のブロックで半径,,3,4,8 で実行してみてください. ヒント :tstdct.c は四角にを残しているので 円状にするだけ. 演習の正解例 33 のブロックで実行した場合 : 半径 半径 半径 4 半径 8 半径 6 演習の正解例 33 のブロックで実行した場合 : 半径 4 半径 6 半径 半径 8 E08 中の Siki.zip 内に Strsborug.bmp での正解画像が入っています. 半径 演習 : 周波数フィルタ 以下の周波数フィルタのプログラムを作ってみましょう!. ローパスフィルタ : 円状にをゼロにする方法とガウス関数を使う方法両方.. ハイパスフィルタ : 円状にをゼロにする方法. 3. バンドパスフィルタ : 円状にをゼロにする方法. 4. エッジ強調フィルタ : 円状にをゼロにする方法とガウス関数を使う方法両方. - ヒント : ガウス関数の画像を作って正規化 ( 画素の和で割る ) し DCT 後に入力のDCT 画像とかけて逆変換. g(, ) p( ) 第 回レポートは を含むので頑張ってー p(^^)q 8