2014-04-26 57 views
-1

我有幾個代碼在matlab中使用空間模式和頻率模式的過濾器。 MATLAB代碼:如何將濾波器在空間到頻域的轉換爲matlab函數?

%% filtering in frequency domain 
%% initial command 
clc;clear all;close all; 
%% filtering in spatial mode 

    h1=[0 1 0 
     1 -4 1 
     0 1 0 ] 
f=imread('images/Fig4.11(a).jpg'); 
if isrgb(f) 
    f=rgb2gray(f); 
else 
    f=f; 
end 
gs=imfilter(f,h1); 

%% filtering in frequency mode 
F=fft2(f); 
[R,C]=size(f); 
H1=fftshift(freqz2(h1,C,R)); %filter in frequency domain 
gf=real(ifft2(H1.*F)); % filtering on image 
gfb=gf/256; % normalized 
%% print tag 
figure;imshow(f);title('Original Image'); 
figure;imshow(gs);title('Filtering in Spatial Domain '); 
figure;imshow(gfb);title('Filtering in Frequency Domain '); 

如何能夠在頻率模式,而不是使用MATLAB函數(freqz2(H1,C,R)) 我想轉換我的過濾器在空間到頻域使用濾波器(傅立葉變換)

回答

0

您應該刪除freqz2呼叫。只需使用H1=fft2(h1);

順便問一下,你也可以從這個

if isrgb(f) 
    f=rgb2gray(f); 
else 
    f=f; 
end 

改變你的if語句成爲

if isrgb(f) 
    f=rgb2gray(f); 
end 

行不需要f=f

+0

tnx很多,但我想寫的,沒有matlab函數。它如何工作(fft2或reqz2)。我想要編程這些功能。 – elena

+0

我寫了H1 = fft2(h1,C,R); H1 = fft2(h1);劑量工作(顯示完全黑色的圖像)。爲什麼? – elena

+0

您必須將h1填充到與f相同的尺寸。絕對不要使用freqz2。這完全不是你想要的。 – Aaron