傅里叶变换的Matlab代码

来源:互联网 发布:itouch4怎么下载软件 编辑:程序博客网 时间:2024/06/06 06:44

原文:http://blog.csdn.net/xiaofengsheng/article/details/5991680

傅里叶变换的Matlab代码:

[cpp]viewplaincopy

  1. img=imread('e:/4.jpg');  

  2. subplot(2,2,1),imshow(img);  

  3. f=rgb2gray(img);  

  4. subplot(2,2,2),imshow(f);  

  5. %二维傅里叶变换  

  6. F=fft2(f);  

  7. FS=fftshift(F);  

  8.    

  9. %频谱  

  10. S=log(1+abs(FS));  

  11. subplot(2,2,3);imshow(S,[]);  

  12. %% 二维傅里叶逆变换  

  13. fr=real(ifft2(ifftshift(FS)));  

  14. ret=im2uint8(mat2gray(fr));  

  15. subplot(2,2,4),imshow(ret);  

 

 

所参考的程序:

[cpp]viewplaincopy

  1. [i,lcmp]=imread('f:/tank.bmp');%=======读取图像 显示图像  

  2. imshow(i,lcmp);              

  3. ii=im2double(i);                   %=====将图像矩阵类型转换为double(图像计算很多是不能用整型的)  

  4. i1 = fft2(ii);                         %======傅里叶变换  

  5. i2 =fftshift(i1);                      %======将变换的频率图像四角移动到中心(原来良的部分在四角 现在移动中心,便于后面的处理)  

  6. i3=log(abs(i2));                  %=====显示中心低频部分,加对数是为了更好的显示  

  7. 程序一  

  8. figure,imshow(i3,[]);               

  9. colormap(lcmp);  

  10. imwrite(i3,lcmp,'f:/ffttank.bmp');  %===将上面i3输入到ffttank文件中  

  11. i5 = real(ifft2(ifftshift(i2)));            %===频域的图反变换到空域 并取实部  

  12. i6 = im2uint8(mat2gray(i5));         %===取其灰度图  

  13. imwrite(i6,lcmp,'f:/tank2.bmp','bmp');  %===利用灰度图和原来取得颜色模板 还原图像  

  14. figure,imshow(i6);  

  15. title('反变换后的图像');  

  16. 程序二  

  17. RGB = imread('autumn.tif');      %===读取图像  

  18. I = rgb2gray(RGB);                  %==将其转为灰度  

  19. imshow(I);  

  20. J = dct2(I);                          %==二维dct变换,即离散余弦变换,  

  21. figure,imshow(log(abs(J)),[])  %==显示出变换后的图像,此时能量集中在左上角  

  22. colormap(jet(64)), colorbar    %====建立颜色模板  

  23. figure;  

  24. J(abs(J) < 10) = 0;               %==我理解为:因为dct变换只要保存左上角的低频小块就可以保持原图像信息,故其他部分(高频,其能量较小故值也小)就可以舍去  

  25. K = idct2(J)/255;                        %===这不加255,将下句改成imshow(K,[]);也一样,只是显示的需要  

  26. imshow(K);  

  27. title('反变换后的图像');  

  28. M=imread('dl011.jpg')         %读取MATLAB中的名为cameraman的图像     

  29. subplot(3,3,1)   

  30. imshow(M)                         %显示原始图像  

  31. title('original')  

  32. P1=imnoise(M,'gaussian',0.02)     %加入高斯躁声   

  33. subplot(3,3,2)   

  34. imshow(P1)                        %加入高斯躁声后显示图像   

  35. title('gaussian noise');  

  36. P2=imnoise(M,'salt & pepper',0.02) %加入椒盐躁声  

  37. subplot(3,3,3)  

  38. imshow(P2)                        %%加入椒盐躁声后显示图像    

  39. title('salt & pepper noise');  

  40. g=medfilt2(P1)                       %对高斯躁声中值滤波  

  41. subplot(3,3,5)  

  42. imshow(g)  

  43. title('medfilter gaussian')  

  44. h=medfilt2(P2)                       %对椒盐躁声中值滤波  

  45. subplot(3,3,6)  

  46. imshow(h)  

  47. title('medfilter salt & pepper noise')  

  48. l=[1 1 1                               %对高斯躁声算术均值滤波  

  49.    1 1 1   

  50.    1 1 1];   

  51. l=l/9;                             

  52. k=conv2(P1,l)                          

  53. subplot(3,3,8)  

  54. imshow(k,[])  

  55. title('arithmeticfilter gaussian')  

  56.                                            %对椒盐躁声算术均值滤波  

  57. d=conv2(P2,l)                          

  58. subplot(3,3,9)  

  59. imshow(d,[])  

  60. title('arithmeticfilter salt & pepper noise')  


0 0
原创粉丝点击