基于S-FFT的相息图

基于S-FFT的相息图
光波是一种电磁波,它满足麦克斯韦方程组,将光波表示成球面波的形式,根据推导 [ 1 − 4 ] ^{[1-4]} [14],可以获得标量场下光波的菲涅尔衍射积分的表达式如下
U ( x , y ) = exp ⁡ ( j k d ) j λ d ∬ − ∞ ∞ U 0 ( x 0 , y 0 ) exp ⁡ ( j k 2 d [ ( x − x 0 ) 2 + ( y − y 0 ) 2 ] ) d x d y U(x,y)=\frac{\exp(jkd)}{j \lambda d} \iint_{-\infty}^{\infty}U_0(x_0,y_0)\exp(\frac{jk}{2d}[(x-x_0)^2+(y-y_0)^2])dxdy U(x,y)=jλdexp(jkd)U0(x0,y0)exp(2djk[(xx0)2+(yy0)2])dxdy
上述式子中 x 0 y 0 , x y x_0y_0,xy x0y0,xy分别为衍射面和观察面的平面坐标系, U 0 ( x , y ) U_0(x,y) U0(x,y)为物平面函数, k k k为波数, λ \lambda λ为光波波长。将上式改写为离散的傅里叶变换的形式为
U ( p Δ x , q Δ y ) = exp ⁡ ( j k d ) j λ d exp ⁡ [ j k 2 d ( p Δ x 2 ) + q Δ y 2 ] × ϝ [ U 0 ( m Δ x 0 , n Δ y 0 ) × exp ⁡ ( j k 2 d ( m Δ x 0 ) 2 , ( n Δ y 0 ) 2 ) ] p Δ x λ d , p Δ y λ d U(p\Delta x,q\Delta y) = \frac{\exp(jkd)}{j\lambda d}\exp[\frac{jk}{2d}(p\Delta x^2)+q\Delta y^2]\\\times \digamma[U_0(m\Delta x_0,n\Delta y_0)\times\exp(\frac{jk}{2d}(m\Delta x_0)^2,(n\Delta y_0)^2)]_{\frac{p\Delta x}{\lambda d},\frac{p\Delta y}{\lambda d}} U(pΔx,qΔy)=jλdexp(jkd)exp[2djk(pΔx2)+qΔy2]×ϝ[U0(mΔx0,nΔy0)×exp(2djk(mΔx0)2,(nΔy0)2)]λdpΔx,λdpΔy
其中 ϝ \digamma ϝ表示傅里叶变换,设衍射平面尺寸为 L 0 L_0 L0,观察平面为 L L L,采样数为 N N N,则两者的关系可以由下式表示
L 0 = N λ d L L_0=\frac{N\lambda d}{L} L0=LNλd
根据迭代的相关公式及知识,编写基于S-FFT的反复迭代相息图(MATLAB)程序具体如下:
% 功能: 调入一图像,用菲涅耳衍射的S-FFT计算形成
% 能够由空间光调制器LCOS显示图像的相息图
% 主要变量:
% h ——波长(mm); Ih ——相息图;
% L ——SLM宽度(mm); z0——记录相息
图的距离(mm);
% 取衍射距离1200mm,显示比例1,迭代次数15次
%-------------------------------------------------------------

clear;
close all;
chemin='D:\我的资料库\Pictures\3D\figs\';%图片路径
[nom,chemin]=uigetfile([chemin,'*.*'],['调入模拟物体图像'],100,100);
[XRGB,MAP]=imread([chemin,nom]);%获取图像
figure,imshow(XRGB);
X0=rgb2gray(XRGB);                       %彩色图像转换为灰度图像
figure,imshow(X0,[]);
[M0,N0]=size(X0);                            %获取灰度图像的像素数大小
N1=min(M0,N0);
N=1080;          									%相息图取样数, 可按需要修改
m0=0.5                                          %图像在重建周期中的显示比例, 
m0=input('图像在重建周期中的显示比例(0->1)');
X1=imresize(X0,N/N1*m0);
[M1,N1]=size(X1);
X=zeros(N,N);
X(N/2-M1/2+1:N/2+M1/2,N/2-N1/2+1:N/2+N1/2)=X1(1:M1,1:N1);

h=0.532e-3;      %波长(mm), 可按需要修改
k=2*pi/h;
pix=0.0064;      %SLM像素宽度(mm), 可按需要修改
L=N*pix;         %SLM宽度(mm)
z0=1200          %----衍射距离(mm),
z0=input('衍射距离(mm)');
L0=h*z0/pix      %重建像平面宽度(mm)

Y=double(X);
a=ones(N,N);
b=rand(N,N)*2*pi;
U0=Y.*exp(i.*b);  %叠加随机相位噪声,形成振幅正比于图像的初始场复振幅
X0=abs(U0);       %初始场振幅,后面叠代运算用
figstr=strcat('SLM平面宽度=',num2str(L),'mm');
figstr0=strcat('初始物平面宽度=',num2str(L0),'mm');
figure(1),imshow(X,[]),colormap(gray); xlabel(figstr);title('物平面图像');
np=input('叠代次数');
for p=1:np+1    %叠代次数
%---------------菲涅耳衍射的S-FFT计算开始
n=1:N;
x=-L0/2+L0/N*(n-1);	 					
y=x;
[yy,xx] = meshgrid(y,x); 
Fresnel=exp(i*k/2/z0*(xx.^2+yy.^2));
f2=U0.*Fresnel;
Uf=fft2(f2,N,N);
Uf=fftshift(Uf);
x=-L/2+L/N*(n-1);%SLM宽度取样(mm) 					
y=x;
[yy,xx] = meshgrid(y,x); 
phase=exp(i*k*z0)/(i*h*z0)*exp(i*k/2/z0*(xx.^2+yy.^2));
Uf=Uf.*phase;
%---------------菲涅耳衍射的S-FFT计算结束
figstr=strcat('SLM宽度=',num2str(L),'mm');
figure(2),imshow(abs(Uf),[]),colormap(gray); xlabel(figstr);title('到达SLM平面的物光振幅分布');
Phase=angle(Uf)+pi;
Ih=uint8(Phase/2/pi*255);%形成0-255灰度级的相息图
figure(3),imshow(Phase,[]),colormap(gray); xlabel(figstr);title('相息图');
%---------------菲涅耳衍射的S-IFFT计算开始
U0=cos(Phase-pi)+i*sin(Phase-pi);
n=1:N;
x=-L/2+L/N*(n-1);	 					
y=x;
[yy,xx] = meshgrid(y,x); 
Fresnel=exp(-i*k/2/z0*(xx.^2+yy.^2));
f2=U0.*Fresnel;
Uf=ifft2(f2,N,N);
x=-L0/2+L0/N*(n-1);%SLM宽度取样(mm) 					
y=x;
[yy,xx] = meshgrid(y,x); 
phase=exp(-i*k*z0)/(-i*h*z0)*exp(-i*k/2/z0*(xx.^2+yy.^2));
Uf=Uf.*phase;
figure(4),imshow(abs(Uf),[]),colormap(gray); xlabel(figstr0);title('逆运算重建的物平面振幅分布');
%---------------保持相位不变,引用原图振幅,重新开始新一轮计算
Phase=angle(Uf);
U0=X0.*(cos(Phase)+i*sin(Phase));
end;

figure(5),imshow(Ih,[]),colormap(gray); xlabel(figstr);title('相息图');

在这里插入图片描述在这里插入图片描述
参考书目
[1] 古德曼 ,傅里叶光学导论[M],北京:电子工业出版社,2006,第3版
[2]李俊昌,衍射计算及数字全息[M],北京:科学出版社,2014
[3] 钱晓凡,信息光学数字实验室[M],北京:科学出版社,2014
[4]陈家壁,苏显渝.光学信息技术原理及应用[M].北京:高等教育出版社,2001

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值