画像処理・実習 第一回: ガイダンス,ディジタル画像の表現

Download Report

Transcript 画像処理・実習 第一回: ガイダンス,ディジタル画像の表現

画像処理・実習
第十三回:フーリエ変換(続き)とパターン認識
東海大学
情報理工学部 情報メディア学科
濱本和彦
今回の内容
フーリエ変換の実習(先週の続き)

フーリエ変換を利用したフィルタ処理
5. パターン認識
5.1 マッチングの原理
 5.2 テンプレートマッチング
 実習


相互相関とテンプレートマッチング
周波数空間におけるX,Y方向微分
N 1 M 1
f (m, n)   F (k , l )W1kmW2 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  km ln
  F (k, l )  j k  W1 W2
2
m
 M 
l 0 k 0
2
同様に
N 1 M 1
2
 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
n2
ラプラシアンフィルタ関数
 2   2 
A(k , l )   j
k  j l
 M   N 
2
2
  Ax (k )  Ay (l )
2
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
2
残差二乗和
  F ( x)dx  G ( x)dx  2 F ( x)G( x)dx
b
a
2
b
2
a
F(x),G(x)に関する定数であり,二
つの関数の違いを表す量ではない
b
a
この項が大きいほど
二つの関数は良く
一致する!
一般的なマッチングの尺度
フーリエ変換を
思い出してみよう
s   F ( x)G( x)dx
b
a
ある座標における関数値の積の総和=関数の内積
それぞれの関数の大きさで正規化すると次のようなります。
 F ( x)G(x)dx
 F ( x)dx  G ( x)dx
b
R
a
b
a
2
b
a
2
一般的なマッチングの尺度
これは-1~+1の値をもち,
cosΘで表現されます。
 F ( x)G(x)dx
 F ( x)dx  G ( x)dx
b
R
a
b
a
2
b
2
 cos
a
相互相関係数
Θは関数間の角度。
二つの関数をベクトル
表現した時のベクトル
が作る角度になます。
演習5.1
f(x),g(x)ともに平均値は0であるため,
f(x),g(x)をそのまま用いて計算する。

b
a
1
f ( x)dx   sin x    cos 2x 1dx


2

1 1
1

   sin 2x  x       
2 2
2
 

2

2

演習5.1
1
a g ( x)dx  sin x   dx    2 cos2x  2  1dx

1 
   cos 2x   dx   dx


2  
1 
 
   cos 2x  cos 2  sin 2x  sin 2dx  x

2  
1
        
2
b
2

2

演習5.1

b
a
1 
f ( x) g ( x)dx  sin x  sin( x   )dx    cos2x     cos  dx

2 
1 
   cos2x     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

f1g1  f 2 g2
f12  f 2 2 g12  g2 2
ディジタルデータの相互相関係数
一般にN次元ベクトルの場合には次のように表される。
N 1
f g
R  cos 
k 0
N 1
2
k
k 0
f
k
k
N 1
2
g
 k
k 0
実際の場合は平均値を引く必要があるため次のようになる。
 f
N 1
R  cos 
k 0
 f
N 1
k 0
k
 f gk  g 
f
2
k
N 1
 g
k 0
 g
2
k
実習:演習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
N 1 N 1
  f [k ][l]  f  t[k ][l ]  t 
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に
平均値処理と正規化を加えたものです。相互相関関数と呼
ばれます。
n1 m1
  m  n 

f
i


k
j


l

f
 
t[k ][l ]  t 




2
 2 
l 0 k 0  

R[i][ j] 
2
n1 m1
  m  n 
 n1 m1
2


f
i


k
j


l

f
t
[
k
][
l
]

t




 2
  2 
l 0 k 0 
 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