matlab 傅里叶变换 高斯高通滤波

close all;
clear all;
%加上两个close,clear  最后显示图像时候可以正常显示,否则图像会因为过大而被拉伸  
img=imread('c.jpg');
img=rgb2gray(img);
figure,imshow(img);
g=fft2(double(img));
%进行傅里叶变换,fft2是二维的傅立叶变换。
g=fftshift(g);
%中心化
imshow(abs(g),[])
[N1,N2]=size(g);
n=2;
d0=30; 
%d0是终止频率
n1=fix(N1/2);
n2=fix(N2/2);
%n1,n2指中心点的坐标,fix()函数是往 0  取整
for i=1:N1
  for j=1:N2
      d=sqrt((i-n1)^2+(j-n2)^2);
      h=1-exp(-d*d/(2*d0*d0));
      result(i,j)=h*g(i,j);
  end
end
result=ifftshift(result);
X2=ifft2(result);
%傅里叶去中心化以及反变换
final=uint8(real(X2));
%最终的结果归一化到0-7之间
figure,imshow(final);

matlab 傅里叶变换 高斯高通滤波_第1张图片
matlab 傅里叶变换 高斯高通滤波_第2张图片

你可能感兴趣的:(图像处理)