1

私はハイブリッド画像で遊んでいて、ガウスフィルターを使用して画像をローパスフィルター処理したいと考えていました。ただし、ハイブリッド画像を作成するには、異なるカットオフ周波数で結合される 2 つの画像に 2 つのフィルターを使用する必要があります。

fspecial()ガウス フィルターを作成するために使用する場合、カットオフ周波数を指定できますか? (フィルタのサイズとシグマを指定できること、シグマとカットオフ周波数の間に何らかの関係があることはわかっています)。シグマを使用してカットオフ周波数のみを指定できる場合、たとえば 0.2 Hz のカットオフ周波数を取得するには、どのシグマを設定する必要がありますか。

4

1 に答える 1

5

最初に 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/シグマに比例します。

于 2012-09-09T21:33:11.743 に答える