匿名
发表于 2023-5-18 20:46:48
clear all;clc
%% 定义参数
lambda=632.8e-009; %确定了波长 单位:mm
k=2*pi/lambda;
thetax=0.1;%参考光入射角 单位是°吗?
thetay=0.1;%
M=512;N=512; %全息面的像素数
%z=1.2; %记录距离 mm 1.2m
%z=810;
d=18e-006;%全息图上取样间隔 %全息图上的取样间隔 博奇编码?这个怎么确定?与空间光调制器有什么关系呢?
p=[0,0,-1.0]; %设定一个点的空间坐标这里空间坐标用mm单位的话,后面的也用mm 点可以这样规定吧?
x0=0;
y0=0;
z0=-1.0;
%全息平面的位置?这个直接可以通过记录面吗?
%确定全息面的尺寸 这个尺寸该怎么写呢?
%% 抽样?生成网格数据?最后是所抽样的点?
X=(-N/2+1)*d:d:N/2*d;%和linspace函数的作用一致
Y=(-M/2+1)*d:d:M/2*d;
[x,y]=meshgrid(X,Y);%生成网格数据
%% 博奇编码吗?
%--------先是一个点
h=0;
U0=1000; %可以设成1吗?相位随机?%exp(1i*p0);
p0=rand(1)*2*pi; %在0~1间随机产生一个数,2pi,随机得到一个相位
r0=sqrt((x-x0).^2+(y-y0).^2+(0-z0).^2);
% oxy=(U0/(r0)).*exp((i*2*pi/lambda)*r0);
%h_1=0.5*(1+U0.*cos(2*pi.*x.*sin(thetax*pi/180)./lambda+2*pi.*y.*sin(thetay*pi/180)./lambda-p0-((pi/lambda)./z0).*((x.^2+y.^2)+(x0.^2+y0.^2)-2.*(x0.*x+y0.*y))));%U0.是一个double 类型的变量
h_1=0.5*(1+(U0./r0).*cos(2*pi.*x.*sin(thetax*pi/180)./lambda+2*pi.*y.*sin(thetay*pi/180)./lambda-p0-(k*r0)));%U0.是一个double 类型的变量
h=h+h_1;
minh=min(min(h));
maxh=max(max(h));
I=(h-minh)./(maxh-minh);
imshow(abs(I));
imwrite(abs(I), 'hologram1.bmp', 'bmp');
% %% 再现?
t=18e-006;
thetaxx=0.0;%再现入射角 单位是°吗?
thetayy=0;%再现入射角 单位是°吗?
lambda=632.8e-009; %波长
z=z0; %观察距离
I_1=double(imread('C:\Users\HP\Desktop\bs\hologram1.bmp'));%读入全息图
I=I_1-mean(mean(I_1)); %均匀滤波 %一个点的话,不滤波的效果好像好一点
% I=I_1;
[m,n]=size(I); %全息图尺寸
[X,Y]=meshgrid(1:m,1:n); %构建网格
% %% 取样步长,这是个什么东西呢?
%dx=lambda*z/(t*m); %取样步长既然是一样的那么这里的z是什么呢?还需要再要吗
Ur=1;
zr=1.0;
C=Ur.*exp((1i*2*pi/lambda)*(sin(thetaxx*pi/180)*t.*X)); %参考光的振幅?取样间隔乘以X是什么意思呢?
%为什么这里的参考r光可以写成这个样子,没有取共轭呀,好像也不需要取共轭
A=(exp(1i*2*pi*zr/lambda)/(1i*lambda*zr))*exp((1i*pi/(lambda*zr))*t^2.*((X-m/2).^2+(Y-n/2).^2));%积分号前的因子
%f=exp((1i*pi/(lambda*zr))*t^2.*((X-m/2).^2+(Y-n/2).^2)); %复振幅传输函数 f应该是相位调制因子
I_2=I;
B=C.*I_2;
U=ifftshift((fft2(B))*(fft2(A)));
% B=C.*I_2;
%I_2=conv2(A,I_2,'same');
%B=C.*I_2; %参考光*全息图*复振幅传输函数?或者相位调质因子?
%U=I_2.*C;
%B=C.*I_2;
%D=fftshift(fft2(B)); %转到频域里计算
%U=A.*D; %乘以积分号前的衍射因子
I_3=abs(U);
I_4=I_3./max(max(I_3)); %归一化
I_5=flipud(I_4); %将数组从上向下翻转
figure,imshow(I_5,[]);
colormap(gray(256)); %灰度图
figure;
mesh(I_5);
colormap winter;
imwrite(I_5,'image1.bmp','bmp');
这一段代码,再现部分有什么问题吗?
|
|