www.pudn.com > test_2.rar > fft.m


%频域平滑滤波 %高通滤波器 
clear; 
B=imread('test','jpeg');              %读入原始图像 
info=imfinfo('test','jpeg');          %读入图像的信息数据 
Longth=info.Width; 
Width=info.Height; 
 
%imshow(B),title('原始图像');             %显示原始图像 
B=im2double(B);                         %将图像数据由’uint8’格式转换为’double’格式 
for i=1:Width 
    for j=1:Longth 
       B(i,j)=(-1)^(i+j)*B(i,j);        %并将各点数据乘以(x+y)^-1 以便 FFT 变换后的结果中低频数据处于图像中央 
    end 
end 
 
F=fft2(B);                              %用’fft2’函数对图像数据进行二维 FFT 变换,得到频率域图像数据 
 
F2=6*log(1+(abs(F)));                   %计算频率域图像的幅值并进行对数变换 
%figure,imshow(F2,[0,max(max(F2))]);     %显示频率域图像 
D0=input('请输入滤波半径\n D0='); 
midx = Width/2; 
midy = Longth/2; 
                                        %在频率图像上去除滤波半径以外的数据 
for i=1:Width 
    for j=1:Longth 
      if(sqrt((i-midx)^2+(j-midy)^2) < D0)  
          F(i,j) = 0; 
      end 
    end 
end 
 
F2=6*log(1+(abs(F)));                   %计算处理后的频率域图像的幅值并进行对数变换 
%figure,imshow(F2,[0,max(max(F2))]);     %显示处理后频率域图像 
 
F3=ifft2(F);                            %用’ifft2’函数对图像数据进行二维 FFT 逆变换 
F3=real(F3);                            %用’real’函数取其实部 
 
for i=1:Width 
    for j=1:Longth 
       F3(i,j)=(-1)^(i+j)*F3(i,j);      %将图像数据各点数据乘以(-1)^(x+y) 
    end 
end 
 
figure,imshow(F3)                       %显示处理结果图像数据 
%imwrite(F3,'test2_result230.jpg','jpeg');   %保存图像处理结果数据