画像処理・実習 第十三回:フーリエ変換(続き)とパターン認識 東海大学 情報理工学部 情報メディア学科 濱本和彦 今回の内容 フーリエ変換の実習(先週の続き) フーリエ変換を利用したフィルタ処理 5. パターン認識 5.1 マッチングの原理 5.2 テンプレートマッチング 実習 相互相関とテンプレートマッチング 周波数空間におけるX,Y方向微分 N 1 M 1 f (m, n) F (k , l )W1 W2 km ln l 0 k 0 2 2 F (k , l ) exp j km exp j ln M N l 0 k 0 N 1 M 1 f (m, n) N 1 M 1 2 km ln F (k , l ) j k W1 W2 M l 0 k 0 x方向(離散m方向)微分 m これを逆変換すればX方向微分になる f (m, n) N 1 M 1 2 km ln F (k , l ) j l W1 W2 n N l 0 k 0 y方向(離散n方向)微分 同様に 周波数空間におけるX,Y方向微分 X方向フィルタ関数(Y方向も同様) Ax(k) -M/2 M/2 k 2 Ax (k ) j k M 微分処理 実習 x方向微分の関数 void x_diffrentiation(void) y方向微分の関数 void y_diffrentiation(void) を完成させなさい。フィルタ関数が複素数であ る事に注意しなさい。複素数と複素数の乗算に なります。 lena.rawについて,それぞれの微分処理を 行った画像を出力しなさい。 微分処理結果 X方向微分 縦方向のエッジ抽出 Y方向微分 横方向のエッジ抽出 周波数空間におけるラプラシアン f (m, n) N 1 M 1 2 km ln F (k , l ) j k W1 W2 m M l 0 k 0 f (m, n) 2 F (k , l ) j 2 m M l 0 k 0 2 同様に N 1 M 1 2 km ln k W1 W2 f (m, n) 2 km ln F (k , l ) j l W1 W2 2 n N l 0 k 0 2 N 1 M 1 ∴ ラプラシアン= 2 2 f (m, n) 2 f (m, n) 2 m n 2 ラプラシアンフィルタ関数 2 A(k , l ) j M 2 k j N 2 Ax (k ) Ay (l ) 2 2 l 2 ラプラシアンフィルタ 実習 ラプラシアンフィルタ関数 void f_laplacian(void) を完成させなさい。 lena.rawに対する処理結果を求めなさい。 ラプラシアン結果 パターン認識 人が目で見て判断する内容 ・人を見分ける ・文字を読む など コンピュータに代行させる = パターン認識 マッチングの原理 人が目で見て判断するという事は? 目で見た内容が頭の中の記憶と一致する かどうかを考えること。 一致するものを探す=マッチングをとる マッチングを取るには? 各点におけるデータの差を計算し積算する。 結果が0であれば,マッチングしている。 マッチング(類似度)を計算してみよう 関数f(x)と関数g(x)の類似度の計算 差を計算して,それを積算(積分) b a f ( x) g ( x) dx これが小さいほどよく似ている,ということ。 この二つはマッチングしている? 類似度は? 1310720! 見た目では同じ パターンなのに, 類似度は。。。! つまり,こういうこと。 濃 淡 値 レベルを合わせて比較 B 平均値を引いてから類似度 を計算する! A F ( x) f ( x) f G ( x) g ( x) g 座標 パターンAとパターンBは, 形(パターン)は同じだが, レベル(平均値)が異なる b a 平 均 値 F ( x) G( x) dx 他の類似度計算方法 a F ( x) G( x) dx b b 2 b 残差二乗和 b F ( x)dx G ( x)dx 2 F ( x)G( x)dx a 2 2 a F(x),G(x)に関する定数であり,二 つの関数の違いを表す量ではない a この項が大きいほど 二つの関数は良く 一致する! 一般的なマッチングの尺度 フーリエ変換を 思い出してみよう b s F ( x)G( x)dx a ある座標における関数値の積の総和=関数の内積 それぞれの関数の大きさで正規化すると次のようなります。 R b a b a 2 F ( x)G( x)dx F ( x)dx b a G 2 ( x)dx 一般的なマッチングの尺度 R b a b a 2 F ( x)G( x)dx F ( x)dx b G a 2 これは-1~+1の値をもち, cosΘで表現されます。 cos ( x)dx 相互相関係数 Θは関数間の角度。 二つの関数をベクトル 表現した時のベクトル が作る角度になます。 演習5.1 f(x),g(x)ともに平均値は0であるため, f(x),g(x)をそのまま用いて計算する。 b a 1 f ( x)dx sin x cos 2 x 1dx 2 2 2 1 1 1 sin 2 x x 2 2 2 演習5.1 b a 1 g ( x)dx sin x dx cos2 x 2 1dx 2 1 cos 2x dx dx 2 1 cos 2 x cos 2 sin 2 x sin 2dx x 2 1 2 2 2 演習5.1 b a 1 f ( x) g ( x)dx sin x sin(x )dx cos2 x cos dx 2 1 cos2 x cos dx 2 1 cos x 2 1 cos cos cos 2 演習5.1 R cos cos cos 二つの関数が作る角=位相差が相互相関の結果です。 つまり,θだけ関数をずらせばぴったり一致する, Θだけずれているから類似度はcosθ,と言うわけです。 (θ=0の時はcosθは1,つまり一致しているということ) ディジタルデータの相互相関係数 二つのデジタルデータ → ベクトルデータとして考える f1 , f 2 g1, g2 f g 相互相関係数は,ベクトルの内積を用いて次のように表現する。 f , g f g cos であるから, f,g R cos f g f1 g1 f 2 g 2 f1 f 2 2 2 g1 g 2 2 2 ディジタルデータの相互相関係数 一般にN次元ベクトルの場合には次のように表される。 N 1 f R cos k 0 N 1 fk 2 k 0 k gk N 1 gk 2 k 0 実際の場合は平均値を引く必要があるため次のようになる。 f N 1 R cos k 0 f N 1 k 0 k f g k g f 2 k N 1 2 g g k k 0 実習:演習5.2 image_processing13.cとimgpattern.hを 利用します。 imgpattern.hのvoid Ensyu5_2(void)を完 成させなさい。 相関の結果が演習5.1の通りになることを 確認しなさい。 画像の相互相関関数 データが二次元の画像(N×N)の場合も,同様な処理で 相互相関係数が求まります。 f [k ][l ] f t[k ][l ] t N 1 N 1 R l 0 k 0 f [k ][l ] f t[k ][l ] t N 1 N 1 l 0 k 0 2 N 1 N 1 l 0 k 0 2 実習:画像の相互相関係数 void Cross_correlation(void)を完成させなさい。 この関数の実行時は,Input_image()や Output_image()は必要ありません。関数内で2 つの画像をオープンします。 lena.raw同士,lena.rawとlenan20.raw(雑音が ある場合),lena.rawとlenai.raw(白黒反転)の組 合せで相互相関係数を求め,考察しなさい。 実習:画像の相互相関係数 -1.0 1.0 0.835 相互相関でこんなことができます。 簡単な人物認証 濱本研メンバーDB こういう人がやってきました A 0.434 B 0.548 C 0.652 相互相関係数を求めます。 Eさんと判断されました。 D 0.512 E 0.746 F 0.564 研究室への入室が許可されます。 相互相関でこんなことができます。 簡単な人物認証 濱本研メンバーDB こういう人がやってきました A 0.321 B 0.619 C 0.836 相互相関係数を求めます。 Cさんと判断されました。 D 0.650 E 0.698 F 0.537 研究室への入室が許可されます。 相互相関でこんなことができます。 簡単な人物認証 濱本研メンバーDB こういう人がやってきました A 0.186 B -0.089 C -0.046 相互相関係数を求めます。 どのデータとも相関が高くありません。 D -0.190 E -0.134 F -0.080 研究室への入室が許可されません。 テンプレートマッチング 入力画像の中から,テンプレート(標準パターン) に一致する位置を検出します。 パターン位置の検出 動いた物体の追跡 方法 画像にテンプレートを重ね相互相関係数を計算します。 テンプレートの位置をずらして再度相互相関係数を計 算します。 これを繰り返して,相互相関係数が最大になる位置を 探します。 テンプレートマッチング テンプレートを移動しな がら,相互相関を計算 相互相関が最大になっ た位置が,テンプレートの パターンと同じ図形となる 位置である。 テンプレートマッチング テンプレートサイズをm×nとし,画像上の位置(i, j)における 相互相関係数は次の式で求められます。これは,式5.16に 平均値処理と正規化を加えたものです。相互相関関数と呼 ばれます。 l 0 k 0 n 1 m 1 R[i ][ j ] m n f i k j l 2 2 m n f i k j l f 2 2 l 0 k 0 n 1 m 1 2 f t[k ][l ] t n 1 m 1 2 t [ k ][ l ] t l 0 k 0 ・テンプレートの中心が(i, j)と一致するようにしています。 ・平均値は,m×n領域内での平均値です。 ・式5.16では正確な処理を行うことは出来ません(何故?) 実習:テンプレートマッチング void Template_matching(void)を実行し,テンプレート マッチングの処理を確認しましょう。 テンプレートのサイズは,幅40,高さ48です。 テンプレート画像は,この関数内で入力処理を行います。 対象画像の入力は,Input_image()で行ってください。 相互相関が最大になった位置とその時の相関値を出力 します。 相関係数がどのように分布しているかを画像として出力 します。これを相互相関関数と呼びます。 入力画像:characters3.raw テンプレート:characters3a.raw 実習:テンプレートマッチング =‘A’の文字はこの 最大値: x=50, y=69, R=1.00 位置にある! 実習:テンプレートマッチング void Template_matching2(void)は,式 5.16によるものです。正しい結果が得られ ないことを確認してください。 それは一体何故でしょうか? こういうことができます は,どこにいるでしょう? 最大値: x=179, y=25
© Copyright 2024 ExpyDoc