数字全息图的记录、显示以及重构过程。下面是详细的功能分析:
1. 初始化:
使用clear all, close all, clc清除所有变量、关闭所有图形窗口和清空命令窗口,为后续操作提供一个干净的环境。
2. 加载并处理物体图像:
使用imread加载名为’guang.bmp’的图像,并将其转换为双精度数据。
将图像中值为1的像素替换为122。
使用imresize将图像大小调整为1024x1024像素。
3. 设置物体相位:
通过与由peaks函数生成的相位分布相乘,模拟相位型物体。这里,peaks函数生成一个具有多个峰值的曲面,用于模拟物体的相位分布。
4. 设置物理参数:
定义光波波长(lamda)为6328e-10米(即632.8纳米,红光波长)。
根据波长计算波数(k)。
设置物体到全息记录面的距离(zo)为0.3086米。
设置衍射面(物体)的尺寸(Lo)为0.005米。
5. 全息图记录:
使用Scalar_Bluestein函数(这可能是一个自定义函数,用于模拟光的衍射过程)计算物体在全息记录面上的光场分布。这个函数可能实现了某种形式的菲涅尔或夫琅禾费衍射算法。
6. 计算并显示衍射图:
计算全息记录面上的物光强分布,并使用imagesc显示。
7. 加入平面参考光:
创建一个与物体图像相同大小的网格。
设置参考光与x轴和y轴之间的夹角(alpha和beita)。
根据这些角度和波数计算参考光的复振幅分布。
8. 计算并显示全息图:
将物体光和参考光相加,得到干涉图案。
计算干涉图案的光强分布,并使用imagesc显示全息图。
9. 全息重建:
使用与记录过程类似的Scalar_Bluestein函数来重建物体图像。这里,通过将全息图与参考光的共轭相乘来消除参考光的影响。
计算重建图像的光强分布,并使用imagesc显示-1级重构像。
另外,还显示了重建图像的包裹相位图,这可能有助于分析物体的相位信息。
% 清除所有变量,关闭图形窗口,清空命令窗口
clear all;
close all;
clc;
% 调入作为物的图像,并转为双精度
Uo = imread('guang.bmp');
Uo = double(Uo(:,:,1));
Uo(Uo==1)=122;
Uo=imresize(Uo,[1024,1024]);
% 获取图像尺寸
[r, c] = size(Uo);
% 在物体上叠加相位,模拟相位型物体
Uo = Uo .* exp(1i .* peaks(r) .* 2);
% 赋值波长、波数
lamda = 6328e-10;
k = 2*pi/lamda;
% 物到全息记录面的距离(单位:米)
zo = 0.3086;
% 赋值衍射面(物)的尺寸(单位:米)
Lo = 5e-3;
% 全息图记录过程,使用Scalar_Bluestein算法完成的衍射仿真
[O, ooo] = Scalar_Bluestein(Uo, r, c, Lo/r, zo, -Lo/2, Lo/2, -Lo/2, Lo/2, r, c, lamda, k);
% 计算全息记录面上的物光强分布
I = O .* conj(O);
% 显示衍射图
figure;
imagesc(I);
title('衍射图');
% 加入平面参考光
xo = linspace(-Lo/2, Lo/2.2, r);
yo = linspace(-Lo/2, Lo/2.2, c);
[xo, yo] = meshgrid(xo, yo); % 创建网格
% 设置参考光与x轴和y轴间的夹角
alpha = pi/2.12;
beita = pi/2.00;
% 计算参考光
R = exp(1i*k*(xo*cos(alpha) + yo*cos(beita)));
% 计算参、物光在全息记录面上的干涉,得到全息图
inter = O ./ max(max(sqrt(I))) + R;
IH = inter .* conj(inter);
% 显示全息图
figure;
imagesc(IH);
title('全息图');
% 全息重建
Ui1 = Scalar_Bluestein(IH .* conj(R), r, c, Lo/r, zo, -Lo/2, Lo/2, -Lo/2, Lo/2, r, c, lamda, k);
Ii1 = Ui1 .* conj(Ui1);
% 显示-1级重构像
figure;
imagesc(Ii1);
title('-1级重构像');
figure;
imagesc(angle(Ui1));
title('包裹相位');