2018年8月17日金曜日

ODOGカーネルのフーリエ変換

ここではOriented Difference of Gaussians (ODOG)という視覚モデル[1]のフーリエ変換を手計算して確認してみる. ODOGは,明度知覚に関する様々な効果をうまく説明できるモデルとして広く知られている. ODOGモデルは1枚の画像が与えっれたとき,人間が知覚する明度を画素値として持つ画像に変換しフィルタとして機能する数式モデル. このモデルは,初等関数の簡単な組み合わせでできているので,簡単にフーリエ変換できる. フーリエ変換するメリットは,このフィルタを入力画像に畳み込む計算を,フーリエ変換すると単なる掛け算になって,高速化できること. とりあえずそうした背景は一切忘れて,ODOGのカーネルをフーリエ変換してみる.

ODOGのカーネル関数って?

その肝心のODOGのモデルだけど,全ての数式を説明するっだけでそれなりのスペースが必要になるので,ここではODOGのカーネル関数だけをフーリエ変換してみる. ODOGのカーネル関数には,角度とスケールのパラメータがあり,様々な角度とスケールのカーネル関数でフィルタした結果を足し合わせて最終的な画像を出力する仕組みになっている. そのカーネル関数$f(y_1, y_2)$を数式で表すと次のようになる.

f(y1,y2)=12πσ12ey12+y222σ1212πσ1σ2e12(y12σ22+y22σ12)

ただし,画素の位置を表す変数は$(x,y)$や$(u,v)$ではなくて,論文[2]に合わせて$(y_1,y_2)$にした.

この式は,異なる2つのガウス関数の差に見える. 実際に$y_1$-軸方向の断面を見るために$y_2=0$を代入すると次のように2つの異なるガウス関数の差になっている.

f(y1,0)=12πσ12ey122σ12σ2σ112πσ22ey122σ22

一方,$y_2$-軸方向の断面を見るために$y_1=0$を代入すると次のように1つの異なるガウス関数になっている.

f(0,y2)=12πσ12ey222σ1212πσ1σ2ey222σ12=(1σ1σ2)12πσ12ey222σ12

このように,普通のDoG[3]と異なり,方向をもつ構造になっている.

画像に対する二次元フーリエ変換

教科書でよく出てくるのは一次元の信号$f(t)$なんかのフーリエ変換. $f$のフーリエ変換を$\mathcal{F}[f]$と表すと,周波数$\omega$を用いて次のように定義されている.

F[f](ω)=f(t) eiωtdω

画像に対する二次元フーリエ変換を計算するには,$x$方向と$y$方向(正確にはここでは$y_1$方向と$y_2$方向)の一次元のフーリエ変換を二重にかければよい. フーリエ変換は積分なので二重積分になる. 周波数空間($s_1,s_2$)でのカーネル関数を$F(s_1,s_2)$とすると次のようになる.

F(s1,s2)=(f(y1,y2)eiy1s1dy1)eiy2s2dy2

ここでも論文[2]に合わせて周波数の変数は$(s_1,s_2)$とした.

足し算のフーリエ変換は分けることができる

式(???)の()の中の一次元フーリエ変換をまず計算してみる. そのために式(???)を$f(y_1, y_2)$に代入する. 式(???)は,$a-b$の形になっている.フーリエ変換の大事な性質は線形性. つまり$a$と$b$それぞれのフーリエ変換を$A$と$B$だとすると,$a-b$のフーリエ変換は単純に$A-B$になるので, 式(???)のフーリエ変換は次のように各項単独のフーリエ変換の差になる.

f(y1,y2)eiy1s1dy1=12πσ12ey12+y222σ12eiy1s1dy112πσ1σ2e12(y12σ22+y22σ12) eiy1s1dy1=12πσ12ey222σ12ey122σ12 eiy1s1dy112πσ1σ2ey222σ12ey122σ22 eiy1s1dy1

積分変数$y_1$を含まない係数は,積分の外に出して単純にした. そうすると積分しないといけない,ヤバそうな部分は結構シンプルになる. 式(???)と(???)の2つあるけど,よく見ると$\sigma_1$と$\sigma_2$が違うだけで全く同じ形.

積分の部分を計算する

その肝心の積分変数は,「ガウス関数のフーリエ変換はガウス関数になる」という公式が使えて実際には積分計算をする必要がない.

F[12πσet2/2σ2](ω)=12πσet2/2σ2eiωtdt=eσ2ω2/2

この公式の変数を置換するだけで,式(???)と(???)の積分の部分を計算できる.

ey122σ12 eiy1s1dy1=2πσ1 eσ12s122ey122σ22 eiy1s1dy1=2πσ2 eσ22s122

一重目のフーリエ変換を計算

これで, 式(???)に上の結果を代入すると, 式(???)の内側のフーリエ変換はちゃんと計算できる.

f(y1,y2) eiy1s1dy1=12πσ12ey222σ12 2πσ1 eσ12s12212πσ1σ2ey222σ12 2πσ2 eσ22s122=12πσ1ey222σ12 eσ12s12212πσ1ey222σ12 eσ22s122=12πσ1ey222σ12(eσ12s122eσ22s122)

二重目のフーリエ変換を計算

ようやく計算し終えた一重目のフーリ変換(式(eq:15))を元の二次元フーリ変換の式(???)に代入する.

F(s1,s2)=12πσ1ey222σ12(eσ12s122eσ22s122)eiy2s2dy2=12πσ1(eσ12s122eσ22s122)ey222σ12 eiy2s2dy2

また,積分の部分がガウス関数のフーリ変換の形になっているので,一重目と同様にして公式を使うと計算できる.

F(s1,s2)=12πσ1(eσ12s122eσ22s122)2πσ1eσ12s222=eσ12s222(eσ12s122eσ22s122)

論文中のフーリエ変換の式と比較

論文[2]の式は次のようになっていて,上の式と微妙に違うので,正しいの確認してみる.

F(s1,s2)=e2π2σ12t22(e2π2σ12t12e2π2σ22t12)

まず$(t_1, t_2)$というのが出てくるけど,実際の論文では回転を考慮しているので,$(s_1, s_2)$を回転させた$(t_1,t_2)$というのが出てくる. 予め回転させた画像を与えると,ここは関係ないので,これは問題ない. あと,$2\pi^2$というなぞの係数が登場するけど,これはフーリエ変換の定義で周波数を$\omega=2\pi k$のように, 単位画素あたり位相$\omega$ではなてく,波数$k$で定義すると現れる係数.要するに単位の違い. 実際に式(???)に$s_1=2\pi k_1$と$s_2 =2\pi k_2$を代入すると,式(???)と同じ形になる.

参考文献

  1. Barbara Blakeslee and Mark E. McCourt: "A multiscale spatial filtering account of the White effect, simultaneous brightness contrast and grating induction," Vision Research, vol. 39, issue 26, pp. 4361-4377, 1999.
    doi: 10.1016/S0042-6989(99)00119-4
  2. Barbara Blakeslee, Davis Cope, and Mark E. McCourt1: "The Oriented Difference of Gaussians (ODOG) Model of Brightness Perception: Overview and Executable," Behavior Research Methods, pp. 306–312, vol. 48, no. 1, 2016.
    doi: 10.3758/s13428-015-0573-4
  3. "Difference of Gaussians" in Wikipedia
    https://en.wikipedia.org/wiki/Difference_of_Gaussians