Fourier Transform of Gaussian Kernel in Matlab

3 ビュー (過去 30 日間)
Gobert
Gobert 2022 年 4 月 12 日
編集済み: Gobert 2022 年 4 月 13 日
Hi everyone,
I need your help!
I was reading a document on Discrete Fourier Transform and found the following example:
Here's the mentioned gaussian kernel:
g_k = (1/256)*[1 4 6 4 1;...
4 16 24 16 4;...
6 24 36 24 6;...
4 16 24 16 4;...
1 4 6 4 1];
As can be seen, the size of g_k or g(x,y) is 5 x 5 - while the size of G(u,v) is around 380 x 450
Can you please show me the Matlab code that can generate the above G(u,v) image or result?

採用された回答

Matt J
Matt J 2022 年 4 月 12 日
編集済み: Matt J 2022 年 4 月 12 日
If you download gaussfitn from
then you can do,
g0=[1 4 6 4 1]';
params=gaussfitn((-2:2)',g0,[],{0,[],0},{0,[],0});
Local minimum possible. lsqcurvefit stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
[A,mu,sig2]=deal(params{2:4});
sig=1/2/pi/sqrt(sig2);
fun=@(x) exp(-(x/sig).^2/2);
Gu=fun(linspace(-6*sig,+6*sig,450));
Guv=imresize(Gu'*Gu,[380,450]);
imshow(Guv);

その他の回答 (1 件)

Matt J
Matt J 2022 年 4 月 12 日
One could also do as below. This gives only an approximately Gaussian spectrum, however,
g_k = (1/256)*[1 4 6 4 1;...
4 16 24 16 4;...
6 24 36 24 6;...
4 16 24 16 4;...
1 4 6 4 1];
Guv=fftshift( abs(fft2(g_k,380,450)) );
imshow(Guv)
  7 件のコメント
Matt J
Matt J 2022 年 4 月 12 日
編集済み: Matt J 2022 年 4 月 12 日
@Paul Yes, that is why. If you don't do it, you will see a 2-pixel shift in the output.
Gobert
Gobert 2022 年 4 月 13 日
編集済み: Gobert 2022 年 4 月 13 日
@Paul - These simple examples can give an idea of what "circshift" does to that "zero-padded matrix": See "ans"
% When m~=n
A = [16 2 3 13; 5 11 10 8; 9 7 6 12]
[n,m]=size(A)
A(2*n,2*m)=0
circshift(A,[-2,-2])
A =
16 2 3 13
5 11 10 8
9 7 6 12
n =
3
m =
4
A =
16 2 3 13 0 0 0 0
5 11 10 8 0 0 0 0
9 7 6 12 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
ans =
6 12 0 0 0 0 9 7
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
3 13 0 0 0 0 16 2
10 8 0 0 0 0 5 11
% When m=n
B = [16 2 3 13; 5 11 10 8; 9 7 6 12;4 14 15 1]
[n,m]=size(B)
B(2*n,2*m)=0
circshift(B,[-2,-2])
B =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
n =
4
m =
4
B =
16 2 3 13 0 0 0 0
5 11 10 8 0 0 0 0
9 7 6 12 0 0 0 0
4 14 15 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
ans =
6 12 0 0 0 0 9 7
15 1 0 0 0 0 4 14
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
3 13 0 0 0 0 16 2
10 8 0 0 0 0 5 11

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeImages についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by