您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 傅立叶变换与GS算法初步
傅立叶变换与GS算法初步在图像处理相关运算中,傅立叶变换很重要。于是:1.fft2作用:计算二维快速傅立叶变换。B=fft(I)%返回图像I的二维fft变换矩阵。输入图像I与输出B大小相同fft所得的频域数据2.fftshift与ifftshiftfftshift作用:将变换后的图象频谱中心从矩阵的原点移到矩阵的中心。B1=fftshift(B)%将B的一、三象限和二、四象限进行互换。如:x=[12345]x=12345y=fftshift(x)y=45123y1=ifftshift(y)y1=123453.ifft2作用:计算图像的二维傅里叶反变换B2=ifft(B1)%4.例1%初识fft,fftshiftclearall;closeallclc%%初始参数fs=100;%采样频率N=256;%数据点数n=0:N-1;t=n/fs;%时间序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);y1=fft(x,N);y2=fftshift(y1);mag1=abs(y1);%傅氏变换后的振幅mag2=abs(y2);f1=n*fs/N;%频率序列f2=f1-fs/2;%%绘图subplot(3,1,1),plot(f1,mag1,'r')%频率-振幅变化图xlabel('频率/Hz');ylabel('振幅');title('图1:usual','color','r');gridonsubplot(3,1,2),plot(f2,mag1,'b')%频率-振幅变化图xlabel('频率/Hz');ylabel('振幅');title('图1:withoutfftshift','color','b');gridonsubplot(3,1,3),plot(f2,mag2,'c')%频率-振幅变化图xlabel('频率/Hz');ylabel('振幅');title('图1:hit','color','c');gridon5.例2TheGerchberg-Saxton(GS)algorithm%初识GS算法%DigitalHolographyM.IsabelRuizLópezclearall;closeallclc%Step1:选择图像J=imread('C:\Users\bwzong\Desktop\Prettybeauty051.jpg');J1=rgb2gray(J);J2=double(J1);[M,N]=size(J2)J3=J(50:M/2,50:N/2);%imshow(J3,[])%Step2:Randomphaseph=2*pi*(rand(M,N));JJ=J2.*(i*ph);%Step3:Addrandomphaseandamplitudft=fftshift(fft(JJ));JJJ=exp(i*(angle(ft)));imshow(JJJ,[])6.例3(1)imresizeB=imresize(A,m);返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。m大于1,则放大图像;m小于1,缩小图像。B=imresize(A,[numrowsnumcols]);numrows和numcols分别指定目标图像的高度和宽度。显而易见,由于这种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能发生畸变。(2)double;im2double;mat2gray****************假设某图像数据A(uint8格式)**********************A=2352008920double(A)%返回与原矩阵数值相同但类型为double的矩阵ans=2352008920im2double(A)%返回矩阵类型:double;数值范围[01],0对应uint8中的0;1对应uint8中的255;ans=0.92160.78430.34900.0784mat2gray(A)%对原矩阵归一化ans=1.00000.83720.32090*****假设矩阵A为一般二维数组,非图像数据(double格式)*****************A=2352008920double(A)ans=2352008920im2double(A)ans=2352008920mat2gray(A)ans=1.00000.83720.32090**********************小结***************************im2double:如果输入类型是uint8、unit16、logical,则按照0--0,255--1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;double:返回数值与输入相同的double类型矩阵;mat2gray:对输入进行归一化处理,最小值--0;最大值--1,输出类型为double。在实际的对图像处理过程中,由于我们读入图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据(3)GS算法%GS算法%图像经过多次傅里叶变换,最后提取图像的相位信息,加载SLM,观察图像clearall;clc%closeallA=imread('图1.jpg');B=imresize(A,[7681024]);C=im2double(rgb2gray(B));C1=abs(C);forp=1:100;C=fftshift(C);D=ifft2(C);D=fftshift(D);D2=angle(D);D=exp(i.*D2);%给D振幅赋值1,相位不变D=fftshift(D);C=fft2(D);%D傅里叶变换回到CC=fftshift(C);C2=angle(C);C=C1.*exp(i.*C2);%C振幅不变,仍然赋值初始振幅C1p=p+1;endC=fftshift(C);D=ifft2(C);D=fftshift(D);D=angle(D);imwrite(D,'zzy.jpg','jpg');figure,imshow(D,[])
本文标题:傅立叶变换与GS算法初步
链接地址:https://www.777doc.com/doc-4133682 .html