【问题标题】:MATLAB fourier image filteringMATLAB傅里叶图像滤波
【发布时间】: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); 以变成高通。

标签: image matlab filtering


【解决方案1】:

在第二个代码上更改:

mask=zeros(200);
mask=mask+255;

...到这个

mask=ones(200);

你也忘了在两个代码上都调用ifftshift

D=ifft2(ifftshift(C));

这是我得到的:

  • 低通:

  • 高通:

【讨论】:

  • 不客气。如果对您有帮助,请考虑接受我的回答。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多