欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

python二维傅里叶变换 二维傅里叶变换的性质

最编程 2024-08-14 13:33:33
...

实验原理及知识点

1.应用傅里叶变换进行图像处理

傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。

2.傅立叶(Fourier)变换的定义

对于二维信号,二维Fourier变换定义为:

$F\left ( u,v \right )= \int_{-\infty }^{\infty }\int_{-\infty }^{\infty }f\left ( x,y \right )e^{-j2\pi \left ( ux+uy \right )}dxdy$

逆变换:

$f\left ( x,y \right )= \int_{-\infty }^{\infty }\int_{-\infty }^{\infty }F\left ( u,v \right )e^{j2\pi \left ( ux+uy \right )}dudv$

二维离散傅立叶变换为:

$F\left ( m,n \right )\frac{1}{N}\sum_{i=0}^{N-1}\sum_{k=0}^{N-1}f\left ( i,k \right )e^{-j2\pi \left ( m\frac{i}{N}+n\frac{k}{N} \right )}$

逆变换:

$f\left ( i,k \right )\frac{1}{N}\sum_{m=0}^{N-1}\sum_{n=0}^{N-1}F\left ( m,n \right )e^{j2\pi \left ( m\frac{i}{N}+n\frac{k}{N} \right )}$

图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。

实验内容

1.读入一副图像,对其进行傅里叶变换,分别显示,原图,傅里叶变换图,中心化后图。

clear;
clc;
Img=imread('LongyuanCai.jpg');%读入原图
I=rgb2gray(Img);%将RGB图像变换
IF=fft2(I);%进行傅里叶变换
I1=log(abs(IF)+1);%取模后缩放  
IC=fftshift(I1);%将频谱图中零频率成分移动至频谱图中心(中心化)
I2=log(abs(IC)+1);%取模后缩放显示中心化后图
figure;subplot(131);imshow(Img);title('原图');
subplot(132);imshow(I1,[]);title('傅里叶变换图');
subplot(133);imshow(I2,[]);title('中心化后图');

python二维傅里叶变换 二维傅里叶变换的性质_python二维傅里叶变换

实验问题及解决:

%1.取模后图像矩阵的数值一般会很大,直接用imshow函数是无法显示的,此时可以用log函数取其对数,如log(abs(F)+1),这样就可以对频谱进行缩放。
%2.fftshift将频谱图中零频率成分移动至频谱图中心
%3.傅里叶变换和频移图imshow函数需要加上[]才能显示
%4.abs作用是将所得变量绝对值和复数求模

2.生成一副图像(简单的黑底白块),对其进行旋转变换,分别对原图和旋转后的图像进行离散傅里叶变换,显示2副傅里叶变换图。

 

clear;
clc;
I=zeros(256,256);I(59:237,120:136)=1;
J=imrotate(I,45,'bilinear','crop');
I1=fft2(I);F=abs(I1);I2=fftshift(F);
J1=fft2(J);F=abs(J1);J2=fftshift(F);
subplot(221);imshow(I);
subplot(222);imshow(J);
subplot(223);imshow(I2,[]);
subplot(224);imshow(J2,[]);

 

python二维傅里叶变换 二维傅里叶变换的性质_python二维傅里叶变换_02

 

实验问题及解决:

%显示傅里叶频谱需要进行:1.傅里叶变换(fft2) 

%2.变换后的变量求模(abs) 

%3.转换成频谱图并将频谱图中零频率成分移动至频谱图中心(fftshift)

 

3.读入一副图像,将其变为灰度图。加入高斯噪声,并分别对加入噪声前后的图像进行傅里叶变换,并显示。

 

clear;
clc;
Img=imread('GirlFriend.jpg');%读入图像
I=rgb2gray(Img);%图像由RGB变成灰度图
I1=fft(I);F=abs(I1);I2=fftshift(F);%噪声前傅里叶变换
J=imnoise(I,'gaussian',0,0.01);%加入高斯噪声
J1=fft(J);F=abs(J1);J2=fftshift(F);%噪声后傅里叶变换
figure;subplot(131);imshow(I);title('灰度图');
subplot(132);imshow(I2,[]);title('傅里叶变换图');
subplot(133);imshow(J2,[]);title('噪声后图');

 

python二维傅里叶变换 二维傅里叶变换的性质_傅立叶变换_03

 

 

4.生成一副图像(简单的黑底白块,参考下面生成程序,但是需自己重新设定数值),进行离散傅里叶变换,再对其分别进行X轴与Y轴上的平移,并分别对其进行离散傅里叶变换,观察3副傅里叶变换图。需显示6幅图,原图,行平移图,列平移图,行平移傅里叶变换图(频谱中心化),列平移傅里叶变换图(频谱中心化)。

 

 

clear;
clc;
I=zeros(256,256);I(59:230,120:136)=1;%产生原图(行坐标修改)
[M,N]=size(I);g=zeros(M,N);h=zeros(M,N);
a=20;b=20;
for i=1:M                        %行平移
    for j=1:N
        if ((i-a>0)&&(i-a<M))
            g(i,j)=I(i-a,j);
        else
            g(i,j)=0;
        end
    end
end
for j=1:N                        %列平移
    for i=1:M
        if ((j-b>0)&&(j-b<N))
            h(i,j)=I(i,j-b);
        else
            h(i,j)=0;
        end
        
    end
end

I1=fftshift(abs(fft2(I)));
g1=fftshift(abs(fft2(g)));
h1=fftshift(abs(fft2(h)));

figure;subplot(231);imshow(I);title('原图');
subplot(232);imshow(g);title('行平移图');
subplot(233);imshow(h);title('列平移图');
subplot(234);imshow(I1,[]);title('原图傅里叶变换图');
subplot(235);imshow(g1,[]);title('行平移傅里叶变换图');
subplot(236);imshow(h1,[]);title('列平移傅里叶变换图');

 

python二维傅里叶变换 二维傅里叶变换的性质_python二维傅里叶变换_04