2016-10-15 6 views
1

私は、MATLABを使って2D問題の畳み込み定理を検証しようとしています。空間領域のフィルタを使った畳み込みは、周波数領域のフィルタを乗算するのと同じです。私は次のコードを書いた。ステップ2の後、私はぼやけた画像が期待される。しかし、ステップ3の後、私は期待どおりに同じぼやけた画像を取得しません、コードの出力図は下に示しています。私の前提に間違いはありますか?2Dの畳み込み定理

% 1- Read image and create a domain frequqncy window 
im = imread('High_Detail.jpg'); 
im = imresize(im,[100,100]); 
im = rgb2gray(im); 
im = im2double(im); 
window_fft_shifted = zeros([100,100]); 
window_fft_shifted(50-11:50+11,50-11:50+11) = 1; 

% 2- FFT then Multiplying it by window then get IFFT, a blurred image expected 
im_fft = fft2(im); 
im_fft_shifted = fftshift(im_fft); 
im_fft_shifted_W = im_fft_shifted .* window_fft_shifted; 
im_result_1 = ifft2(ifftshift(im_fft_shifted_W)); 

% 3- Get IFFT of window, convolve im with it, the same blurred image is expected 
window = ifft2(ifftshift(window_fft_shifted)); 
im_result_2 = conv2(im, window); 

% 4- Plot 
figure; 
subplot(2,2,1); imshow(im); 
subplot(2,2,3); imshow(im_result_1); 
subplot(2,2,4); imshow(im_result_2); 

enter image description here

+0

あなたがパッドに必要な、そうでない場合は、あなたがしています循環畳み込みを行う。 –

+0

@PaulRありがとうございますが、どの信号をパッドする必要がありますか? –

+0

両方の画像を少なくとも(w1 + w2 - 1)、(h1 + h2 - 1)にゼロにする必要があります。 –

答えて

0

ライン:

window = ifft2(ifftshift(window_fft_shifted)); 

は、MATLAB反対称信号表現を補償するifftshiftを含める必要があります。

window = ifftshift(ifft2(ifftshift(window_fft_shifted))); 
関連する問題