Теорема свертки в 2D

#matlab #image-processing #fft #convolution

#matlab #обработка изображений #БПФ #свертка

Вопрос:

Я пытаюсь проверить теорему свертки для 2D-задачи с помощью MATLAB: свертка с фильтром в пространственной области эквивалентна умножению на фильтр в частотной области. Я написал следующий код. После шага 2 я получаю ожидаемое размытое изображение. Но после шага 3 я не получаю такого же размытого изображения, как ожидалось, выходной рисунок кода is показан ниже. Что не так в моих предположениях?

 % 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);
 

введите описание изображения здесь

Комментарии:

1. Вам нужно дополнить, иначе вы выполняете круговую свертку.

2. @PaulR Спасибо, но какой сигнал я должен дополнить?

3. Вам нужно обнулить оба изображения как минимум до (w1 w2 — 1), (h1 h2 — 1).

Ответ №1:

Линия :

 window = ifft2(ifftshift(window_fft_shifted));
 

должен включать ifftshift для компенсации антисимметричного представления сигнала MATLAB:

 window = ifftshift(ifft2(ifftshift(window_fft_shifted)));