zoukankan      html  css  js  c++  java
  • 数字图像处理之傅里叶变换

    数字图像处理之傅里叶变换

                                                            by方阳

    版权声明:本文为博主原创文章,转载请指明转载地址

    http://www.cnblogs.com/fydeblog/p/7068986.html 

    1. 前言

     

    今天将之前学的数字图像处理的东西放到博客园里,所以下面会有连续几篇的博客都是关于数字图像处理的!

     

    这篇博客将介绍图像的快速傅里叶变换逆变换以及图像的平移变换的实现,理论的知识还请看书和百度,这里不再复述

     

    2. 原理说明

     

    (1) 图像的二维FFT变换可以观察图像的频谱,再进行逆变换即可复原图像;

     

    (2) 图像的平移性:图像在空间域乘以-1^(x+y),再进行傅里叶变换,即可看出图像的频谱图在x和y周平移了半个周期,原因是-1^(x+y)傅里叶变换表现复指数函数,相当于频谱的平移;

    3. 实现内容

    (1) 选择一幅图像,显示傅里叶变换频谱。再对得到傅里叶图像做傅里叶逆变换,显示图像,观察是否与原图像相同。

    (2) 图像做傅里叶变换的平移性证明,将频谱中心移至中央。

    4. 程序实现及实验结果

    (1) 图像的傅里叶变换与反变换

    参考代码:

    I=imread('lena.bmp');
    I_2D=D3_To_D2(I);
    I1=fft2(I_2D);
    I2=uint8(real(ifft2(I1)));
    I1=log(1+abs(fftshift(I1)));
    figure;
    subplot(1,3,1);
    imshow(I);
    title('原图');
    subplot(1,3,2);
    imshow(I1,[]);
    title('fft2后的频谱');
    subplot(1,3,3);
    imshow(I2,[]);
    title('ifft2后的复原图像');
    

    D3_To_D2函数(将三维降二维)参考代码:

    function image_out=D3_To_D2(image_in)
    [m,n]=size(image_in);
     n=n/3;%由于我的灰度图像是185x194x3的,所以除了3,你们如果是PxQ的,就不要加了
     A=zeros(m,n);%构造矩阵
     for i=1:m
         for j=1:n
            A(i,j)= image_in(i,j);%填充图像到A
         end
     end
    image_out=uint8(A);
    

    运行结果:

    (2)平移验证

    参考代码:

    f(1000,1000)=0;
    f=mat2gray(f);
    [Y,X]=meshgrid(1:1000,1:1000);
    f(350:649,475:524)=1;
    f2=f.*(-1).^(X+Y);
    f1=fft2(f);
    f1_1=abs(f1);
    f2=fft2(f2);
    f3=log(1+abs(f2));
    figure;
    subplot(2,2,1);
    imshow(f);
    title('原图');
    subplot(2,2,2);
    imshow(f1_1,[]);
    title('fft2后的频谱');
    subplot(2,2,3);
    imshow(abs(f2),[]);
    title('中心化');
    subplot(2,2,4);
    imshow(f3,[]);
    title('对数化');
    

     运行结果:

    (3)相角复原(新添的)

    参考代码:

    I=imread('boy.jpg');
    I=D3_To_D2(I);
    I=fft2(I);
    I_angle=angle(I);
    I4=exp(1i*I_angle);
    I4=uint8(ifft2(I4)*256);
    I5=ifft2(I);
    figure;
    subplot(2,2,1);
    imshow(I_angle);
    title('相角');
    subplot(2,2,2);
    imshow(I4,[]);
    title('相角复原后的图像');
    subplot(2,2,3);
    imshow(I5,[]);
    title('谱复原后的图像');
    

     运行结果:

    五. 结果分析

    1.由第一个图可以看出,图像经过傅里叶变换再经过傅里叶反变换是可以还原出原图像的。

    2.由第二个图可以看出,图像的平移性对观察图像的傅里叶频谱很有帮助,图像的频谱经过平移,低频聚集在中心,易于观察,对频谱进行对数化可以更加直观看图像的频谱分布。

    3.由第三个图可以看出,相角决定图像的细节。

  • 相关阅读:
    【黑客免杀攻防】读书笔记2
    【逆向工具】IDA使用5-( string、图形化与视图的切换、图形化显示反汇编地址、自动注释、标签使用)
    定位内网中毒主机IP经历小记
    【黑客免杀攻防】读书笔记1
    对HUAWEI-ManagedProvisioning的一次不完整分析
    【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)
    一份通过IPC$和lpk.dll感染方式的病毒分析报告
    浅析
    HTTP协议/RTSP协议/RTMP协议的区别
    iOS
  • 原文地址:https://www.cnblogs.com/fydeblog/p/7068986.html
Copyright © 2011-2022 走看看