基于点源的三维物体计算全息显示

基于点源的全息3D显示(一)

13D物体的三维数据获取
1.1 3dsmax三维数据获取
打开3dsmax,新建一个3d模型,如茶壶,在脚本文件中粘贴如下代码,可输出相应模型的3D数据

exFile=openFile"C:\exportData1.txt"mode:"w"
for obj in geometry 
	do(
   format "对象名称(\"%\");对象的顶点总数:%\n"   obj.name obj.mesh.numverts to:exFile  
		for i in 1 to obj.mesh.numverts
			do(
				 vertPos=getVert obj.mesh i
				 format" % % %\n"  vertPos.x vertPos.y vertPos.z to:exFile
			)
    )

1.2 二维图像点源采样全息显示
一张图像一般由 m × n m×n m×n个数据构成,只需将二维图像的平面对应相应的坐标系即可,假设一张图片的尺寸为 L x × L y Lx×Ly Lx×Ly,对其离散为相应的坐标系,此时,在相应的坐标系采用的数目需等于 m × n m×n m×n,以图片的二维采样为例,二维图像上的点以球面波的方式进行传播,进行说明。

A=imread('e:\TP\DH.BMP');  %输入图片
B=double(A(:,:,1));        %取一层的值,如r、g、b之一   
[r,c]=size(B);             %图像数据大小,相当于m,n
B=B.*exp(j*rand(size(r,c))*2*pi);
lambda=0.000532;        %绿光波长,单位mm
k=2*pi/lambda;
L=8;                   %空降光调制器尺寸,单位mm
d=1200;                %衍射距离
本例中设物平面和衍射面尺寸大小一致
x0=linspace(-L/2,L/2,r);
y0=linspace(-L/2,L/2,c);
[x0,y0]=meshgrid(y0,x0);
%这样就生成了物平面的坐标系空,
xx=linspace(-L/2,L/2,r);
yy=linspace(-L/2,L/2,c);
[xx,yy]=meshgrid(yy,xx);
UF=0;
%以下循环利用菲涅尔衍射积分的卷积表达式,去掉前面的系数(exp(j*k*d)/j*lambda*d)%对采样图像的每一个点源进行菲涅尔衍射计算,并累加得到复振幅。
for i=1:r
    for n=1:c
        U=B(i,n).*exp(j*k*((xx-x0(i,n)).^2+(yy-y0(i,n)).^2)/2/d);
        %球面波表达式,即求取物平面上每一点在衍射面上的复振幅分布,将物平面上每一点在衍射面上进行叠加
        %即得到物平面在衍射面上复诊的值
        UF=U+UF;
    end
end
% figure,imshow(conj(UF).*conj(UF),[])
I=UF.*conj(UF);
alpha=pi/2.00;                  %参考光与x轴间的夹角
beita=pi/2.01;                  %参考光与y轴间的夹角
R=exp(j*k*(x0*cos(alpha)+y0*cos(beita))); %参考光
%下面计算参、物光在全息记录面上的干涉,得到全息图
inter=UF./max(max(sqrt(I)))+R;   %调节光束比,并使参、物光干涉
II= inter.*conj(inter);         %干涉得到全息图
figure,imshow(II,[]),title('全息图')
%= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
%下面计算再现
%先用S-FFT算法再现全息像II
II=double(II);
zi=1200;                      %全息图到观察面的距离,单位:米
Lix=r*lambda*zi/L;                %给出像面的尺寸,单位:米
Liy=c*lambda*zi/L;
x=linspace(-Lix/2,Lix/2,r);y=linspace(-Liy/2,Liy/2,c);
[x,y]=meshgrid(y,x);
F0=exp(j*k*zi)/(j*lambda*zi)*exp(j*k/2/zi*(x.^2+y.^2));
F=exp(j*k/2/zi*(x0.^2+y0.^2));  %用T-FFT算法得到的全息图尺寸与物面一致
% 取再现照明光垂直入射C=1
holo=L/r*L/c*fftshift(fft2(II.*F*1)); holo=holo.*F0;
Ii=holo.*conj(holo);
figure,imshow(Ii,[0,max(max(Ii))./1]),title('S-FFT再现像')
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值