Image matlab中DFT域的图像滤波

Image matlab中DFT域的图像滤波,image,matlab,image-processing,filter,dft,Image,Matlab,Image Processing,Filter,Dft,我想对图像应用以下过滤器: h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;] 我遵循下面的步骤,但没有得到正确的结果。有人能帮我吗?我找不到我的脚步有什么毛病。代码如下: I = imread('cameraman512.jpg'); h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;] %padding image Ip = padarray(I,[512 512],'pos

我想对图像应用以下过滤器:

h = [1/4 1/16 1/4; 
     1/16 1/8 1/16; 
     1/4 1/16 1/4;]
我遵循下面的步骤,但没有得到正确的结果。有人能帮我吗?我找不到我的脚步有什么毛病。代码如下:

I = imread('cameraman512.jpg');
h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;]

%padding image
Ip = padarray(I,[512 512],'post');
figure();
imshow(Ip);

%padding filter
Hp = padarray(h,[512 512],'post');
figure();
imshow(Hp);

%image fourier
dftI = fft2(I);
figure();
imshow(dftI);

% filter fourier
dftH = fft2(H);
figure();
imshow(dftH);

%shifting image and filter
I = fftshift(Ip);
figure();
imshow(I,[]);

 H = fftshift(Hp);
 figure();
 imshow(H,[]);

G = dftI.*dftH;
figure();
imshow(G);

g=real(ifft2(G));
figure();
imshow(G);

在我看来,你似乎有一点工作要做,以了解你在这项任务中被要求做什么。下面是一个让您开始学习的代码示例

计算图像和滤波器的DFT:

dftI = fft2(I);
dftH = fft2(h, 512, 512);
请注意,
fft2
有一个内置的填充特性,这就是512个参数的作用


根据@OliverCharlesworth注释编辑备选填充

dftI = fft2(I, size(I,1)+size(h,1)-1, size(I,2)+size(h,2)-1);
dftH = fft2(h, size(I,1)+size(h,1)-1, size(I,2)+size(h,2)-1);
最终图像必须进行相应的裁剪


如果要显示DFT的大小,在中间使用第0个频率,则可以使用<代码> fftSHIFT/<代码>(我以清晰的对数刻度显示它们):

由于空间域中的卷积相当于频域中的乘法(具有通常的限制、线性等),因此可以对DFT进行乘法:

G = dftH .* dftI;
imfilt = ifft2(G);
图像上的结果:

        Original                          Filtered

我必须在我的图像中应用h过滤器,并逐步显示所有图像,但我认为我犯了一个错误,最终图像不是wright oneCheck@macduff OP想要在频域中应用过滤,可能是为了分配。是的,但我必须在频域中过滤我的图像。我必须做零填充、移动图像、计算傅里叶变换等。在您的示例中,有许多步骤没有完成。请注意,这将产生循环卷积(对于干净的滤波,两者都应先填充到N+M-1)。
        Original                          Filtered