Ich versuche, das Faltungstheorem für ein 2D-Problem über MATLAB zu überprüfen: Faltung mit einem Filter in der räumlichen Domäne entspricht der Multiplikation mit dem Filter im Frequenzbereich. Ich habe den folgenden Code geschrieben. Nach Schritt 2 bekomme ich ein unscharfes Bild erwartet. Aber nach Schritt 3 bekomme ich nicht das gleiche unscharfe Bild wie erwartet, die Ausgabezahl des is-Codes ist unten gezeigt. Was ist falsch an meinen Annahmen?Convolution Theorem in 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);
Sie auf Pad benötigen, sonst bist du kreisförmige Faltung machen. –
@PaulR Danke, aber welches Signal sollte ich puffern? –
Sie müssen beide Bilder auf mindestens Null auffüllen (w1 + w2 - 1), (h1 + h2 - 1). –