最初に 1D について回答し、残りは続きます。些細なことかもしれませんが、しばらくお付き合いください。次のコードを想定します。
t=linspace(0,20,2^10); %time vector in seconds
w=0.2; %in Hz
signal=cos(2*pi*w*t)+rand(1,length(t))-0.5; % signal in seconds
dt=t(2)-t(1) ;
N=length(signal);
df=1/(N*dt); % the frequency resolution (df=1/max_T)
if mod(N,2)==0
f_vec= df*((1:N)-1-N/2); % for EVEN length vectors
else
f_vec= df*((1:N)-0.5-N/2);
end
そのため、特定の周波数のノイズの多い信号を作成しました。f_vec は、f =[-f_max,-f_max+df,...,0,...,f_max] (f_max=1/(2*dt)) から広がる周波数ベクトルです。次のように (フーリエ空間で) 1D ガウス フィルターを設計するとします。
f_vec0=0;
sigma=1;
filter=exp( -(f_vec-f_vec0).^2./(2*sigma^2));
次に、フーリエ ドメインでフィルタリングします。
f_signal=fftshift(fft(signal));
filt_signal=fftshift(ifft(f_signal.*filter));
したがって、適用したフィルターから、sigma=1 はカットオフ周波数 (フィルターの最大値 (1) の 1% であると判断した) が約 3 Hz であることを意味します。
cutoff_freq=f_vec(find(filter>=0.01,1,'last'))
これを 2D に変換するのは簡単ですが、単位には注意してください。画像の場合、位置の単位としてピクセル、空間周波数として 1/ピクセルがあります。fspecial 関数は、定義済みフィルターの 2D 行列を生成します。fspecial の使用法は通常、次のようになります。
PSF = fspecial('gaussian',hsize,sigma);
Blurred = imfilter(Image,PSF,'symmetric','conv');
畳み込みの使用は、フーリエ領域での乗算に似ています。フーリエ ドメインのシグマは、位置ドメインの 1/シグマに比例します。