Фурье и заполнение нулями

Я фильтрую изображение, используя маску и дискретное преобразование Фурье, до сих пор у меня есть это

A=double(imread('C:\Users\samsung\Documents\Lab Imagenes\CHE.jpg','jpg'));
B=[1 4 6 4 1; 4 16 24 16 4; 6 24 36 24 6; 4 16 24 16 4; 1 4 6 4 1];
F=(1/256).*(B);
DFT_A=fftshift(fft2(A));
imshow(DFT_A);
DFT_A_F=DFT_A.*F;
figure
imshow(DFT_A_F)

но когда я хочу увидеть частичные результаты, я получаю эту ошибку

??? Error using ==> times
Matrix dimensions must agree.

Error in ==> fourier1 at 10 
DFT_A_F=DFT_A.*F;

Я знаю, что мне нужно сделать нулевое дополнение к маске, но я не знаю, как это сделать, пожалуйста, мне нужна помощь. Спасибо!


person user1755076    schedule 18.10.2012    source источник


Ответы (1)


то, что вы хотите, называется 'padarray' сразу после определения DFT_A:

padsize= [round(0.5*size(DFT_A,1)-0.5*size(F,1)) round(0.5*size(DFT_A,2)-0.5*size(F,2))];
F = padarray(F, padsize);
DFT_A_F=DFT_A.*F;
...

Но почему бы вам просто не сделать это (учитывая, что A является двумерной матрицей, поэтому при необходимости закрасьте ее rgb2gray):

DFT_A_F = conv2(A,B,'same');

Это быстрее, потому что вам не нужно умножать все эти нули, и вы должны получить тот же результат.

person bla    schedule 18.10.2012