【发布时间】:2014-05-26 01:44:37
【问题描述】:
我目前正在学习如何在 Matlab 中使用傅里叶变换过滤图像。我设法在图像上应用了低通滤波器,问题是,我不能对高通滤波器做同样的事情。这是我得到的代码和图像。你能帮帮我吗?
clc
clear
A=imread('3.tif'); % image size is 200 x 200
B=fftshift(fft2(A));
mask=zeros(200);
mask(80:120,80:120)=1;
C=mask.*B;
D=ifft2(C);
D=uint8(D);
imshow(D);
结果如下:
http://i.stack.imgur.com/Y2UaI.png
当我尝试应用反向掩码时会出现问题,如下所示:
clc
clear
A=imread('3.tif'); % image size is 200 x 200
B=fftshift(fft2(A));
mask=zeros(200);
mask=mask+255;
mask(80:120,80:120)=0;
C=mask.*B;
D=ifft2(C);
D=uint8(D);
imshow(D);
结果:
http://i.stack.imgur.com/NzYNG.png
怎么了?
【问题讨论】:
-
在上面的代码中,你的 D 矩阵实际上是 16 位的,所以当你把它转换成 uint8 时,你并没有得到有意义的信息。这就是下面第一个答案有效的原因,也是您的第一个代码有效的原因。
-
有关 FFT 过滤示例,请参阅此答案:stackoverflow.com/a/22637290/2777181,将此行
MaskedFFT=fftshift(fft2(f));.*Mask;替换为MaskedFFT=fftshift(fft2(f));.*(1-Mask);以变成高通。