ガボールフィルターは、以下の式で表される。
gaussian(σ, z) * exp ( i * z )
ここで、gaussian項はガウス分布(正規分布)の関数、exp項のiは虚数を意味し、zは(x, y):位置情報 を表している。
上記のガウス分布は、2次元の場合
gaussian (σ, x, y ) = ( 1 / 4 * π * σ ) * exp ( -1 * (x2 + y2) / (4 * σ2) )
として表される。
上記ガウシアンの式をgnuplotで描画した例は以下の通り
σ = 1(標準偏差) として、gauss(x) = 1 / (2 * sqrt(pi)) * exp(- x * x / 4 ) をプロット(シグマを1としたため、式が簡略化)
ガボール gaussian(σ, z) * exp ( i * z )の分解
式には、exp(i * z)の虚数が入っている。このパートを、実部と虚部に分ける。(exp(ix) は cosx + i sinxと分解できる)
画像処理でガボールフィルターを用いて処理を施す場合は、この二つのパートに分離して作業をすることが多い。
ガボールフィルターには、ガウシアン項とExp項があり、Exp項には虚数があり、Cos項 と Sin項に分離できる。(exp(iθ) = cosθ + isinθ)(下記で説明する回転のsin, cosとは違うので混同しないように。)
それぞれの項目と、ガウス関数を掛け合わせたのは以下の通り。
ところで、本やWebでは、ガボールカーネルの関数は、上記で示した gaussian(σ, z) * exp ( i * z ) ではなく、
gaussian(σ, z) * (exp ( i * z ) – exp ( σ2 ) )
と表される。このexp ( σ2 )を引いている理由は、
gaussian(σ, z) * exp ( i * z ) を積分した結果が0にならない(直流成分が0とならない)ためである。(これはCos項:実数部が原因している。)
exp ( σ2 )を引いた画像は以下の通り。
gauss(x,y) = (1 / (4 * pi)) * exp(-1 * (x ** 2 + y ** 2) / (4)) splot cos(x) * gauss(x,y) splot sin(x) * gauss(x,y)
として描画。(ガウス関数はσを1とおいた。そのため式が簡略化されている。)注意:実際に、直流をゼロにするためには、Cos項は、
gauss(x,y) * ( cos(x) – exp(-1) )
とすべき。
尚、カーネルにスケーリング(a倍)を施したい場合は、
1 / sqrt(a) * gaussian( σ, z / a ) * (exp ( i * z / a ) – exp ( σ2 ) )
一般的に書くと、aj 倍したい場合、
1 / pow(a, 1 / j) * gaussian( σ, z / aj ) * (exp ( i * z / aj ) – exp ( σ2 ) )
となる。
なお、回転を施したい場合は、zに回転行列をzにかければよい。
z = (x, y)t とすると、
[x’] [ cosθ sinθ ] [x]
[y’] [ -sinθ cosθ ] [y]
z’ = (x’, y’)