bwzong的个人博客分享 http://blog.sciencenet.cn/u/bwzong

博文

傅立叶变换与GS算法初步

已有 8048 次阅读 2014-12-28 17:11 |个人分类:成长日记.matlab|系统分类:科研笔记

傅立叶变换与GS算法初步

在图像处理相关运算中,傅立叶变换很重要。于是:

1.     fft2

作用:计算二维快速傅立叶变换。

B=fft(I)   %返回图像I的二维fft变换矩阵。输入图像I与输出B大小相同

fft所得的频域数据

2.     fftshiftifftshift

fftshift作用:将变换后的图象频谱中心从矩阵的原点移到矩阵的中心。

B1=fftshift(B)   %B的一、三象限和二、四象限进行互换。

如:>> x=[1 2 3 4 5]

x =

    1    2     3     4    5

>>y=fftshift(x)

y =

    4    5     1     2    3

>>y1=ifftshift(y)

y1 =

    1    2     3     4    5

3.     ifft2

作用:计算图像的二维傅里叶反变换

B2=ifft(B1)    %

4.     1

%初识fft,fftshift

clear all;close all

clc

%%初始参数

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('1usual','color','r');grid on

subplot(3,1,2),plot(f2,mag1,'b')%频率-振幅变化图

xlabel('频率/Hz');ylabel('振幅');title('1without fftshift','color','b');

grid on

subplot(3,1,3),plot(f2,mag2,'c')%频率-振幅变化图

xlabel('频率/Hz');ylabel('振幅');title('1hit','color','c');

grid on

 


5.     2

TheGerchberg-Saxton (GS) algorithm


%初识GS算法

%DigitalHolography  M.Isabel Ruiz López

clear all;closeall

clc

%Step1:选择图像

J=imread('C:UsersbwzongDesktopPrettybeauty051.jpg');

J1=rgb2gray(J);

J2=double(J1);

[M,N]=size(J2)

J3=J(50:M/2,50:N/2);

%imshow(J3,[])

 

%Step2:Randomphase

ph=2*pi*(rand(M,N));

JJ=J2.*(i*ph);

 

%Step3: Addrandom phase and amplitud

ft=fftshift(fft(JJ));

JJJ=exp(i*(angle(ft)));

imshow(JJJ,[])


6.     31imresize

B = imresize(A,m);

返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1则放大图像; m小于1缩小图像。

B = imresize(A,[numrows numcols]);

numrowsnumcols分别指定目标图像的高度和宽度。显而易见,由于这种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能发生畸变。

(2)doubleim2doublemat2gray

****************假设某图像数据Auint8格式)**********************

A =

  235  200    89    20

>>double(A)        %返回与原矩阵数值相同但类型为double的矩阵

ans =

  235  200    89    20    

>>im2double(A)              

%返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的01对应uint8中的255

ans =

   0.9216   0.7843   0.3490    0.0784

>>mat2gray(A)                %对原矩阵归一化

ans =

   1.0000   0.8372   0.3209     0

*****假设矩阵A为一般二维数组,非图像数据(double格式)*****************

A =

  235  200    89    20

>>double(A)

ans =

  235  200   89    20

>>im2double(A)

ans =

  235  200   89    20

>>mat2gray(A)

ans =

   1.0000   0.8372    0.3209      0

**********************小结***************************

im2double:如果输入类型是uint8unit16 logical,则按照0-->>0255-->>1,将其值按比例处理成01之间的double数值;如果输入类型是double,输出没有处理;

double:返回数值与输入相同的double类型矩阵;

mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double

在实际的对图像处理过程中,由于我们读入图像是unit8,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据

(3)GS算法

%GS算法

%图像经过多次傅里叶变换,最后提取图像的相位信息,加载SLM,观察图像

clear all;clc

%close all

 

A=imread('1.jpg');

B=imresize(A,[7681024]);

C=im2double(rgb2gray(B));

C1=abs(C);

for p=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傅里叶变换回到C

   C=fftshift(C);

   C2=angle(C);

   C=C1.*exp(i.*C2);   %C振幅不变,仍然赋值初始振幅C1

   p=p+1;

end

   C=fftshift(C);

   D=ifft2(C);      

   D=fftshift(D);

   D=angle(D);

   imwrite(D,'zzy.jpg','jpg');

figure,imshow(D,[])    

%doc傅立叶变换与GS算法初步.docx




https://blog.sciencenet.cn/blog-1120694-854553.html

上一篇:​基于zemax的反射式系统的结构设计
下一篇:单缝衍射,多缝衍射
收藏 IP: 202.118.244.*| 热度|

1 李颖业

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-10-20 06:21

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部