小言_互联网的博客

图像处理学习笔记08:频域滤波

350人阅读  评论(0)

计算与观察二维DET

在MATLAB中傅里叶变换可以是使用快速傅里叶变换(FFT)实现。使用函数fft2就可以实现,语法形式F=fft2(f),这个函数返回的傅里叶变换大小仍为MxN。傅里叶谱可以使用abs函数计算每个元素实部与虚部平方和的平方根获得。

f= imread("Fig0303(a).tif");
figure;
subplot(2,3,1);
imshow(f);
%计算f的傅里叶变换并绘制频谱
F=fft2(f);
S=abs(F);
subplot(2,3,2);
imshow(S,[]);
%中心变换,把变换的原点移到频率矩阵中心,fftshift是通过变换f的象限进行操作的。操作结果与将输入图像乘负一的x+y次效果相同
Fc=fftshift(F);
subplot(2,3,3);
imshow(abs(Fc),[]);
%使用灰度变换中的对数变换,将图像中暗的区域扩展
S2=log(1+abs(Fc));
subplot(2,3,4);
imshow(S2,[]);
%计算相角,使用imag和real分别取出矩阵的实部和虚部,使用atan2函数就可以算出相角。也可以直接使用angle函数得到矩阵的相角。
phi=atan2(imag(F),real(F));%phi=angle(F);
subplot(2,3,5);
imshow(phi);
f1=S.*exp(1i*phi);
subplot(2,3,6);
imshow(f1);

DFT滤波的基本步骤

  1. 用函数tofloat把输入图像变换为浮点图像。[f,revertclass]=tofloat(f);
  2. 用函数paddedsize获得填充参数:PQ=paddedsize(size(f));
  3. 得到有填充的傅里叶变换:F=fft2(f,PQ(1),PQ(2));
  4. 生成大小为PQ(1)xPQ(2)的滤波函数H,滤波器函数必须是四角凸起的,如果突起居中,令H=fftshift(H)
  5. 用滤波器乘以FFT变换G=H.*F;
  6. 获得G的逆FFT变换g=ifft2(G);
  7. 修剪左上部矩形为原始大小g=g(1:size(f,1),1:size(f,2));
  8. 把滤波过的图像变换为输入图像的类g=revertclass(g);

转载:https://blog.csdn.net/effort_study/article/details/102570311
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场