代码解释如下:
- `t=24e-006;`:取样时间间隔,单位为秒。
- `theta=0.5;`:入射角,单位为度。
- `W=532e-009;`:再现光波长,单位为米。
- `z=1.2;`:再现距离,即全息图离物体的距离,单位为米。
- `I_1=double(imread('e:\c1.bmp'));`:读取原始图像,此处假设为`c1.bmp`,并将其转化为`double`类型。注意路径需根据实际情况进行修改。
- `I=I_1-mean(mean(I_1));`:对原始图像进行平均值滤波操作,目的是消除背景噪声。
- `[m,n]=size(I); [X,Y]=meshgrid(1:m,1:n);`:获取图像的大小,并生成网格数据,用于后面的计算。
- `dx=W*z/(t*m);`:计算采样步长,该值越小,精度越高,但计算速度越慢。
- `C=exp((i*2*pi/W)*(sin(theta*pi/180)*t.*X));`:计算参考波的复振幅分布,其中`sin(theta*pi/180)`为入射角的正弦值。
- `A=(exp(i*2*pi*z/W)/(i*W*z))*exp((i*pi/(W*z))*((dx)^2).*((X-m/2).^2+(Y-n/2).^2));`:计算全息图的传输函数,其中`(X-m/2).^2+(Y-n/2).^2`为像素点到图像中心的距离的平方。
- `f=exp((i*pi/(W*z))*t^2.*((X-m/2).^2+(Y-n/2).^2));`:计算全息图中的衍射因子。
- `I_2=I';`:对原始图像进行转置操作
- `B=C.*I_2.*f;`:计算衍射场复振幅分布
- `D=fftshift(fft2(B));`:对衍射场进行快速傅里叶变换,并将变换结果进行移频操作。
- `U=A.*D;`:将传输函数与衍射场卷积得到全息图的复振幅分布。
- `I_3=abs(U); I_4=I_3./max(max(I_3));`:将复振幅分布取模并归一化,目的是将全息图的幅值映射到0~1之间。
- `I_5=flipud(I_4);`:进行上下翻转操作,使图像正立。
- `figure,imshow(I_5,);colormap(gray(256));imwrite(I_5,'F:bmp\c1.bmp');`:显示全息图并保存到指定路径。
--- 光学专家Gpt |