4

マスクと離散フーリエ変換を使用して画像をフィルタリングしていますが、今までこれを持っています

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;

マスクにゼロパディングを行う必要があることは知っていますが、その方法がわかりません。助けが必要ですありがとう!

4

1 に答える 1

2

DFT_A を定義した直後に、必要なものは 'padarray' と呼ばれます。

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 が 2D 行列であるため、必要に応じて rgb2gray を指定します):

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

これらすべてのゼロを乗算する必要がなく、同じ結果が得られるため、高速です。

于 2012-10-18T05:32:47.643 に答える