これまでのところ、ガウスの分離可能性を利用して、ガウスぼかしフィルターを完全に空間ドメインに実装しました。つまり、画像の行に沿って、次に列に沿って 1D ガウス カーネルを適用しました。それはうまくいきました。
ここで、空間領域の NxN 畳み込み行列のサイズ N のみが与えられたので、周波数領域でまったく同じぼやけた画像を実現したいと考えています。つまり、画像をマトリックスにロードし(numpy、私はpythonを使用しています)、それにFFTを適用し(次に、G(x、y)があります)、フィルターH( u,v) 中心値が 1.0 で、中心から離れるほど値が 0 になる 2d ガウスの形状にも似た周波数領域で。次に、周波数領域で乗算を行い (H の中心シフトを行うことを検討する前に)、iFFT を適用します。
私が抱えている問題は、対応する H(u,v) になる正確な式を見つけることです (つまり、標準偏差であるシグマを見つけること)。空間ドメインから、マスクサイズ N が与えられた場合、std-dev シグマは sigma=(maskSize-1)/2/2.575 として概算できることがわかります。たとえば、マスクサイズ N=15 の場合は、次のようになります。 e^-(x²/2sigma²) の場合は std-dev=2.71845 で、今のところ 1D の場合のみを考慮しています。
しかし、周波数領域のシグマを取得するにはどうすればよいでしょうか?
面白いことに、理論的には Mathematica を使用してシグマを取得する方法を知っていますが、ここで示すことができるように、結果はまったくの偽物です。
gauss1d[x_, sigma_] := Exp[-(x^2)/(2 sigma^2)]
Simplify[FourierTransform[gauss1d[x, sigma], x, omega], sigma > 0]
結果は E^(-(1/2) オメガ^2 シグマ^2) * シグマ
これは、E 関数の指数で 1/sigma² が sigma² に変わるため、偽物です。したがって、これを描くと、H(u,v)-ガウスがかなり「薄い」ため、標準偏差が大幅に小さくなっていることがわかります。ただし、実際には、空間ドメインよりも周波数ドメインの方がはるかに広いはずです!! 意味がありません...