移相干涉技术1-多种干涉条纹仿真模拟生成(原理转载+代码实现 包括模拟生成干涉条纹图)

过去的干涉测量技术是通过人的肉眼或者相机拍摄,来直观判断干涉图中条纹特征进而完成测量,该方法的不稳定因素(比如人的主观意志)很多,其精度误差在/10左右38];现代干涉测量技术通过将电子技术、计算机技术、光电图像处理技术、算法模型和高精度光学元件结合,大大推动了干涉测量领域的发展,使其进入高精度时代。移相干涉技术(P$)作为现代干涉测量技术的代表,已经成为干涉测量领域学者的研究重点。移相干涉技术测量的原理:移相式激光干涉仪通过控制压电陶瓷驱动器(PZT)移动参考镜位置或者改变激光器波长的方式,令参考光和测试光的光程差改变,从干涉图像中可看出干涉条纹进行了相应的位移。在移相过程中,通过光电探测器(CCD或者CMOS)采集不同移相量下的干涉图,图2-1所示为一组移相间隔为90°的移相干涉图组。计算机根据特定的数学算法和模型对干涉图组的像素数据进行系列运算,进而可以求得被测元件的面形信息,并根据计算好的相关参数进行质量评价[39(本文移相干涉系统通过驱动PZT模块完成移相,因此不对基于改变激光器波长以完成移相原理的波长调谐移相技术作介绍)

基于PZT实现移相的过程为:当PZT控制模块发出指定命令时,PZT伸长量进行相应改变,即参考镜和被测镜的相对距离改变,进而完成相位调制以达到移相目的。在上述移相干涉测量过程中,干涉图像中的条纹分布是由参考光束和测试光束叠加形成的干涉场导致,干涉场的光强信息与干涉图中像素点的灰度信息相关,其分布函数可表示为:

其中:A(X,y)是干涉图的背景光强,B(x,y)是调制度,p(X,y)是待测物的波面初始相位信息,6:是移相量,(x,y)是干涉图中像素点的坐标信息。参考镜和被测镜间的面形差P(X,y)与位相分布的关系可表示为: 

 λ为激光器波长(本文系统为He-Ne激光器一一632.8nm),在移相干涉测量技术中,测量单位为入。当通过解相算法处理干涉图组的像素数据I:(X,y),可计算出p(x,y),并进一步得到面形信息P(x,y)以完成检测工作。下面简单介绍三种本文所设计系统应用到的解相算法(两种传统解相算法+一种新颖的平均算法):

下面是模拟生成干涉条纹图的代码

%zernike
clear;clc;close all;[x,y]=meshgrid(-1:0.01:1);k=36;%多项式项数Z=cell(1,36);Z{1,1}=x;Z{1,2}=y;Z{1,3}=-1+2*(x.^2+y.^2);Z{1,4}=x.^2-y.^2;Z{1,5}=2*x.*y;Z{1,6}=-2*y+3*x.*(x.^2+y.^2);Z{1,7}=-2*y+3*y.*(x.^2+y.^2);Z{1,8}=1-6*(x.^2+y.^2)+6*(x.^2+y.^2).^2;Z{1,9}=x.^3-3*x.*y.^2;Z{1,10}=3*x.^2.*y-y.^3;Z{1,11}=-3*x.^2+3*y.^2+4*x.^4-4*y.^4;Z{1,12}=-6*x.*y+8*x.*y*(x.^2+y.^2);Z{1,13}=(10*(x.^2+y.^2).^2-12*(x.^2+y.^2)+3).*x;Z{1,14}=(10*(x.^2+y.^2).^2-12*(x.^2+y.^2)+3).*y;Z{1,15}=20*(x.^2+y.^2).^3-30*(x.^2+y.^2).^2+12*(x.^2+y.^2)-1;Z{1,16}=x.^4-6*x.^2.*y.^2+y.^4;Z{1,17}=4*x.^3.*y-4*x.*y.^3;Z{1,18}=15*(x.^2+y.^2).^2.*x+20*(x.^2+y.^2).*x.^3+12*(x.^2+y.^2).*x-16*x.^3;Z{1,19}=(5*(x.^2+y.^2)-4).*(3*x.^2.*y-y.^3);Z{1,20}=(15*(x.^2+y.^2).^2-20*(x.^2+y.^2)+6).*(x.^2-y.^2);Z{1,21}=(15*(x.^2+y.^2).^2-20*(x.^2+y.^2)+6).*(2*x.*y);Z{1,22}=(35*(x.^2+y.^2).^3-60*(x.^2+y.^2).^2+30*(x.^2+y.^2)-4).*x;Z{1,23}=(35*(x.^2+y.^2).^3-60*(x.^2+y.^2).^2+30*(x.^2+y.^2)-4).*y;Z{1,24}=70*(x.^2+y.^2).^4-140*(x.^2+y.^2).^3+90*(x.^2+y.^2).^2-20*(x.^2+y.^2)+1;Z{1,25}=5*x*(x.^2+y.^2).^2-20*x.^3.*(x.^2+y.^2)+16*x.^5;Z{1,26}=-6*(x.^2+y.^2).*x.^2.*y+14*x.^4.*y-3*x.^2.*y.*(x.^2+y.^2)-2*x.^2.*y.^3+(x.^2+y.^2).*y.^3;Z{1,27}=(6*(x.^2+y.^2)-5).*((x.^2+y.^2).^2-8*(x.^2+y.^2).*x.^2+8*x.^4);Z{1,28}=(6*(x.^2+y.^2)-5).*(4*x.^3.*y-4*x.*y.^3);Z{1,29}=(21*(x.^2+y.^2).^2-30.*(x.^2+y.^2)+10).*(-3*x*(x.^2+y.^2)+4*x.^3);Z{1,30}=(21*(x.^2+y.^2).^2-30.*(x.^2+y.^2)+10).*(3*x.^2.*y-y.^3);Z{1,31}=(56*(x.^2+y.^2).^3-105*(x.^2+y.^2).^2+60*(x.^2+y.^2)-10).*(x.^2-y.^2);Z{1,32}=(56*(x.^2+y.^2).^3-105*(x.^2+y.^2).^2+60*(x.^2+y.^2)-10).*(2*x.*y);Z{1,33}=(126*(x.^2+y.^2).^4-280*(x.^2+y.^2).^3+210*(x.^2+y.^2).^2-60*(x.^2+y.^2)+5).*x;Z{1,34}=(126*(x.^2+y.^2).^4-280*(x.^2+y.^2).^3+210*(x.^2+y.^2).^2-60*(x.^2+y.^2)+5).*y;Z{1,35}=252*(x.^2+y.^2).^5-630*(x.^2+y.^2).^4+560*(x.^2+y.^2).^3-210*(x.^2+y.^2).^2+30*(x.^2+y.^2)-1;Z{1,36}=924*(x.^2+y.^2).^6-2772*(x.^2+y.^2).^5+3150*(x.^2+y.^2).^4-1680*(x.^2+y.^2).^3+420*(x.^2+y.^2).^2-42*(x.^2+y.^2)+1;%单位圆内mask=double((x.^2+y.^2)<=1);for i=1:kZ{1,i}=Z{1,i}.*mask;end%显示泽尔尼克系数for i=1:ksubplot(6,6,i),imshow(Z{1,i},[]);end%a+(b-a)rand(m,n) ,[a,b]区间m,n维随机数生成%计算相位P(x,y),ai根据论文取随机数% 输出num=100;%输出数量for n=1:numfor i=1:k %ai是泽尔尼克基函数的系数,根据论文给出的范围来定if i==1 %a1=0,P0=0 P=0;endif i==2||i==3 %ai 0,5P=5*rand(1)*Z{1,i}+P;endif i==4 %ai -5,5P=-5+10*rand(1)*Z{1,i}+P;endif i>=5&&i<=9 %ai -0.3,0.3P=-0.2+0.6*rand(1)*Z{1,i}+P;endif i>=10&&i<=36 %ai -0.03,0.03P=-0.03+0.006*rand(1)*Z{1,i}+P;endendP=pi*P.*mask;w=0.2+0.8*rand(1);%w是0.2,1上的随机数A0min=0.5/(1+w+2*sqrt(w));%A0范围下限A0max=0.95/(1+w+2*sqrt(w));%A0范围上限A0=A0min+(A0max-A0min)*rand(1);%生成振幅强度A0x0=-0.2+0.4*rand(201,201);y0=-0.2+0.4*rand(201,201);%x0,y0表示光点在x和y方向上的偏移,这两个方向都是在[0.2,0.2]范围内随机生成的derta=0.9+0.2*rand(1);%光束宽度0.9,1.1%激光源参考光强度Ir=A0*exp(-(((x-x0).^2+(y-y0).^2)/derta^2));%越靠中间(x-x0).^2+(y-y0).^2)越小,越亮% c=cos(P);%cos相位A=(w+1)*Ir;%背景光强B=2*sqrt(w)*Ir;%调制光强I=A+B.*cos(P);%条纹图I=I.*mask;name=num2str(n);I=imresize(I,[256,256]);imwrite(I,['E:\my_self_progect\matlab\fringes\',name,'.jpg']);endfigure(5),imshow(A,[]);figure(6),imshow(B,[]);figure(7),imshow(A+B.*cos(P),[]);

这段Matlab代码是一个生成干涉图像的脚本,其中使用了泽尼克多项式(Zernike polynomials)来模拟光波的相位分布。泽尼克多项式是一组定义在单位圆盘上的正交多项式,它们在光学领域被用于表示波前的相位误差。这段代码包含以下几个主要部分:

  1. 泽尼克多项式的定义

    • 脚本首先创建了一个坐标网格(x, y),这个网格覆盖了[-1, 1]的范围,步长为0.01
    • 接下来,定义了36个泽尼克多项式,每个多项式都是xy的函数,表示不同的波前误差模式。
  2. 单位圆内的应用

    • 使用逻辑索引创建了一个掩膜mask,它定义了单位圆内的区域。这意味着多项式只在这个圆内部被考虑。
    • 所有的泽尼克多项式都与这个掩膜相乘,从而确保它们只在单位圆内非零。
  3. 相位计算

    • 代码计算了一个相位图P,这是通过为每个泽尼克多项式随机分配系数并将它们相加来实现的。
    • 这些系数ai从不同的范围内随机选取,这些范围在注释中有说明,例如a1=0ai对于第2和第3项是0到5之间的随机数,等等。
  4. 干涉图像生成

    • 生成了一个强度分布Ir,模拟了一个高斯分布的激光光束。
    • 振幅A模拟了背景光强度,而B模拟了调制光强度。
    • 最后,生成的干涉图像I由背景光强度和调制光强度的余弦调制组成,余弦项包含了上面计算的相位图P
  5. 图像保存

    • 脚本将生成的干涉图像保存到指定的文件夹中。保存的图像数量由num变量确定。
  6. 显示图像

    • 最后,脚本显示了背景光强度A,调制光强度B,以及最终的干涉图像I

% 清除环境并关闭所有图像
clear;
clc;
close all;% 定义x和y的网格
[x, y] = meshgrid(linspace(-1, 1, 256), linspace(-1, 1, 256));
mask = double(x.^2 + y.^2 <= 1); % 单位圆的掩膜% 定义泽尼克多项式的系数
% 这里为了简化,我们只使用前9个泽尼克多项式
coeffs = rand(1, 9) - 0.5; % 随机生成系数,范围在[-0.5, 0.5]% 计算泽尼克多项式的线性组合
P = zeros(size(x));
for i = 1:length(coeffs)Z = zernike_polynomial(i, x, y); % 计算第i个泽尼克多项式P = P + coeffs(i) * Z; % 将泽尼克多项式加权后累加
end
P = P .* mask; % 应用掩膜% 设置保存图像的文件夹
outputFolder = 'E:\gansheyi\matlab\output\folder'; % 更改为您的输出文件夹路径
if ~exist(outputFolder, 'dir')mkdir(outputFolder); % 如果输出文件夹不存在,则创建它
end% 生成和保存9张相移干涉图像
for n = 1:9phase_shift = (n - 1) * pi / 2; % 相位移动I = 0.5 + 0.5 * cos(P + phase_shift); % 生成干涉图像I = I .* mask; % 再次应用掩膜% 保存图像filename = fullfile(outputFolder, sprintf('interference_%d.bmp', n));imwrite(I, filename);% 显示图像subplot(3, 3, n);imshow(I, []);title(sprintf('Interference Pattern %d', n));
endfunction Z = zernike_polynomial(n, x, y)% 这个函数根据索引n返回对应的泽尼克多项式r = sqrt(x.^2 + y.^2);theta = atan2(y, x);% 添加更多的泽尼克多项式,如果需要的话switch ncase 1Z = 1;case 2Z = 2 * r .* cos(theta);case 3Z = 2 * r .* sin(theta);% 添加更多的泽尼克多项式,如果需要的话% ...otherwiseZ = 0;end
endUser

 

 增加条纹数

% 初始化环境
clear;
clc;
close all;% 定义x和y的网格
[x, y] = meshgrid(-1:0.01:1);% 定义泽尼克多项式k=36;%多项式项数Z=cell(1,36);Z{1,1}=x;Z{1,2}=y;Z{1,3}=-1+2*(x.^2+y.^2);Z{1,4}=x.^2-y.^2;Z{1,5}=2*x.*y;Z{1,6}=-2*y+3*x.*(x.^2+y.^2);Z{1,7}=-2*y+3*y.*(x.^2+y.^2);Z{1,8}=1-6*(x.^2+y.^2)+6*(x.^2+y.^2).^2;Z{1,9}=x.^3-3*x.*y.^2;Z{1,10}=3*x.^2.*y-y.^3;Z{1,11}=-3*x.^2+3*y.^2+4*x.^4-4*y.^4;Z{1,12}=-6*x.*y+8*x.*y*(x.^2+y.^2);Z{1,13}=(10*(x.^2+y.^2).^2-12*(x.^2+y.^2)+3).*x;Z{1,14}=(10*(x.^2+y.^2).^2-12*(x.^2+y.^2)+3).*y;Z{1,15}=20*(x.^2+y.^2).^3-30*(x.^2+y.^2).^2+12*(x.^2+y.^2)-1;Z{1,16}=x.^4-6*x.^2.*y.^2+y.^4;Z{1,17}=4*x.^3.*y-4*x.*y.^3;Z{1,18}=15*(x.^2+y.^2).^2.*x+20*(x.^2+y.^2).*x.^3+12*(x.^2+y.^2).*x-16*x.^3;Z{1,19}=(5*(x.^2+y.^2)-4).*(3*x.^2.*y-y.^3);Z{1,20}=(15*(x.^2+y.^2).^2-20*(x.^2+y.^2)+6).*(x.^2-y.^2);Z{1,21}=(15*(x.^2+y.^2).^2-20*(x.^2+y.^2)+6).*(2*x.*y);Z{1,22}=(35*(x.^2+y.^2).^3-60*(x.^2+y.^2).^2+30*(x.^2+y.^2)-4).*x;Z{1,23}=(35*(x.^2+y.^2).^3-60*(x.^2+y.^2).^2+30*(x.^2+y.^2)-4).*y;Z{1,24}=70*(x.^2+y.^2).^4-140*(x.^2+y.^2).^3+90*(x.^2+y.^2).^2-20*(x.^2+y.^2)+1;Z{1,25}=5*x*(x.^2+y.^2).^2-20*x.^3.*(x.^2+y.^2)+16*x.^5;Z{1,26}=-6*(x.^2+y.^2).*x.^2.*y+14*x.^4.*y-3*x.^2.*y.*(x.^2+y.^2)-2*x.^2.*y.^3+(x.^2+y.^2).*y.^3;Z{1,27}=(6*(x.^2+y.^2)-5).*((x.^2+y.^2).^2-8*(x.^2+y.^2).*x.^2+8*x.^4);Z{1,28}=(6*(x.^2+y.^2)-5).*(4*x.^3.*y-4*x.*y.^3);Z{1,29}=(21*(x.^2+y.^2).^2-30.*(x.^2+y.^2)+10).*(-3*x*(x.^2+y.^2)+4*x.^3);Z{1,30}=(21*(x.^2+y.^2).^2-30.*(x.^2+y.^2)+10).*(3*x.^2.*y-y.^3);Z{1,31}=(56*(x.^2+y.^2).^3-105*(x.^2+y.^2).^2+60*(x.^2+y.^2)-10).*(x.^2-y.^2);Z{1,32}=(56*(x.^2+y.^2).^3-105*(x.^2+y.^2).^2+60*(x.^2+y.^2)-10).*(2*x.*y);Z{1,33}=(126*(x.^2+y.^2).^4-280*(x.^2+y.^2).^3+210*(x.^2+y.^2).^2-60*(x.^2+y.^2)+5).*x;Z{1,34}=(126*(x.^2+y.^2).^4-280*(x.^2+y.^2).^3+210*(x.^2+y.^2).^2-60*(x.^2+y.^2)+5).*y;Z{1,35}=252*(x.^2+y.^2).^5-630*(x.^2+y.^2).^4+560*(x.^2+y.^2).^3-210*(x.^2+y.^2).^2+30*(x.^2+y.^2)-1;Z{1,36}=924*(x.^2+y.^2).^6-2772*(x.^2+y.^2).^5+3150*(x.^2+y.^2).^4-1680*(x.^2+y.^2).^3+420*(x.^2+y.^2).^2-42*(x.^2+y.^2)+1;
% 应用单位圆掩膜
mask = double((x.^2 + y.^2) <= 1);% 选择使用一个径向对称的泽尼克多项式生成干涉图
% 这里我们使用Z{1,4} = x^2 - y^2,并增加其系数以增加条纹数
coeff_Z4 = 50; % 调整这个系数可以增加条纹数
P = coeff_Z4 * Z{1,2}; % 使用增大系数的泽尼克多项式
P = P .* mask; % 应用掩膜% 设置保存图像的文件夹
outputFolder = 'E:\gansheyi_daima\matlab\path_to_your_output_folder2'; % 更改为您的输出文件夹路径
if ~exist(outputFolder, 'dir')mkdir(outputFolder); % 如果输出文件夹不存在,则创建它
end% 生成和保存9张相移干涉图像
A = 0.5;  % 设置振幅,增加对比度
for n = 1:9% 相位移动phase_shift = (n - 1) * pi / 2;% 生成干涉图像,增加对比度I = 0.5 + A * cos(P + phase_shift) / 2;I = I .* mask; % 再次应用掩膜% 保存图像filename = fullfile(outputFolder, sprintf('interference_%d.bmp', n));imwrite(I, filename);
end

 

 生成斜的条纹

直接生成均匀斜向条纹,这通常不需要复杂的泽尼克多项式,因为它们用于模拟更复杂的波前畸变。然而,如果想要使用泽尼克多项式来调整或添加特定的波前畸变,您可以选择合适的泽尼克多项式并将其加入到相位P中。

% 初始化环境
clear;
clc;
close all;% 定义x和y的网格
[x, y] = meshgrid(-1:0.01:1);% 应用单位圆掩膜
mask = double((x.^2 + y.^2) <= 1);% 创建斜着的条纹相位变化
P = x + y;
P = P .* mask; % 应用掩膜% 设置保存图像的文件夹
outputFolder = 'E:\gansheyi_daima\matlab\path_to_your_output_folder2'; % 更改为您的输出文件夹路径
if ~exist(outputFolder, 'dir')mkdir(outputFolder); % 如果输出文件夹不存在,则创建它
end% 生成和保存9张相移干涉图像
A = 0.5;  % 设置振幅,增加对比度
B = 30;   % 系数,用于调整条纹的间距和数量
for n = 1:9% 相位移动phase_shift = (n - 1) * pi / 2;% 生成干涉图像,增加对比度I = 0.5 + A * cos(B * P + phase_shift) / 2;I = I .* mask; % 再次应用掩膜% 保存图像filename = fullfile(outputFolder, sprintf('interference_%d.bmp', n));imwrite(I, filename);
end

 

上面舍去了泽妮克多项式的方法,我们下面加上泽妮克系数多项式来

% 初始化环境
clear;
clc;
close all;% 定义x和y的网格
[x, y] = meshgrid(-1:0.01:1);% 定义泽尼克多项式k=36;%多项式项数Z=cell(1,36);Z{1,1}=x;Z{1,2}=y;Z{1,3}=-1+2*(x.^2+y.^2);Z{1,4}=x.^2-y.^2;Z{1,5}=2*x.*y;Z{1,6}=-2*y+3*x.*(x.^2+y.^2);Z{1,7}=-2*y+3*y.*(x.^2+y.^2);Z{1,8}=1-6*(x.^2+y.^2)+6*(x.^2+y.^2).^2;Z{1,9}=x.^3-3*x.*y.^2;Z{1,10}=3*x.^2.*y-y.^3;Z{1,11}=-3*x.^2+3*y.^2+4*x.^4-4*y.^4;Z{1,12}=-6*x.*y+8*x.*y*(x.^2+y.^2);Z{1,13}=(10*(x.^2+y.^2).^2-12*(x.^2+y.^2)+3).*x;Z{1,14}=(10*(x.^2+y.^2).^2-12*(x.^2+y.^2)+3).*y;Z{1,15}=20*(x.^2+y.^2).^3-30*(x.^2+y.^2).^2+12*(x.^2+y.^2)-1;Z{1,16}=x.^4-6*x.^2.*y.^2+y.^4;Z{1,17}=4*x.^3.*y-4*x.*y.^3;Z{1,18}=15*(x.^2+y.^2).^2.*x+20*(x.^2+y.^2).*x.^3+12*(x.^2+y.^2).*x-16*x.^3;Z{1,19}=(5*(x.^2+y.^2)-4).*(3*x.^2.*y-y.^3);Z{1,20}=(15*(x.^2+y.^2).^2-20*(x.^2+y.^2)+6).*(x.^2-y.^2);Z{1,21}=(15*(x.^2+y.^2).^2-20*(x.^2+y.^2)+6).*(2*x.*y);Z{1,22}=(35*(x.^2+y.^2).^3-60*(x.^2+y.^2).^2+30*(x.^2+y.^2)-4).*x;Z{1,23}=(35*(x.^2+y.^2).^3-60*(x.^2+y.^2).^2+30*(x.^2+y.^2)-4).*y;Z{1,24}=70*(x.^2+y.^2).^4-140*(x.^2+y.^2).^3+90*(x.^2+y.^2).^2-20*(x.^2+y.^2)+1;Z{1,25}=5*x*(x.^2+y.^2).^2-20*x.^3.*(x.^2+y.^2)+16*x.^5;Z{1,26}=-6*(x.^2+y.^2).*x.^2.*y+14*x.^4.*y-3*x.^2.*y.*(x.^2+y.^2)-2*x.^2.*y.^3+(x.^2+y.^2).*y.^3;Z{1,27}=(6*(x.^2+y.^2)-5).*((x.^2+y.^2).^2-8*(x.^2+y.^2).*x.^2+8*x.^4);Z{1,28}=(6*(x.^2+y.^2)-5).*(4*x.^3.*y-4*x.*y.^3);Z{1,29}=(21*(x.^2+y.^2).^2-30.*(x.^2+y.^2)+10).*(-3*x*(x.^2+y.^2)+4*x.^3);Z{1,30}=(21*(x.^2+y.^2).^2-30.*(x.^2+y.^2)+10).*(3*x.^2.*y-y.^3);Z{1,31}=(56*(x.^2+y.^2).^3-105*(x.^2+y.^2).^2+60*(x.^2+y.^2)-10).*(x.^2-y.^2);Z{1,32}=(56*(x.^2+y.^2).^3-105*(x.^2+y.^2).^2+60*(x.^2+y.^2)-10).*(2*x.*y);Z{1,33}=(126*(x.^2+y.^2).^4-280*(x.^2+y.^2).^3+210*(x.^2+y.^2).^2-60*(x.^2+y.^2)+5).*x;Z{1,34}=(126*(x.^2+y.^2).^4-280*(x.^2+y.^2).^3+210*(x.^2+y.^2).^2-60*(x.^2+y.^2)+5).*y;Z{1,35}=252*(x.^2+y.^2).^5-630*(x.^2+y.^2).^4+560*(x.^2+y.^2).^3-210*(x.^2+y.^2).^2+30*(x.^2+y.^2)-1;Z{1,36}=924*(x.^2+y.^2).^6-2772*(x.^2+y.^2).^5+3150*(x.^2+y.^2).^4-1680*(x.^2+y.^2).^3+420*(x.^2+y.^2).^2-42*(x.^2+y.^2)+1;
% 应用单位圆掩膜
mask = double((x.^2 + y.^2) <= 1);% 选择使用一些泽尼克多项式来调整条纹
Zernike_indices = [2, 3]; % 选择要使用的泽尼克多项式的索引
Zernike_coefficients = [0.5, 0.1]; % 设置选定泽尼克多项式的系数% 创建斜着的条纹相位变化并添加泽尼克畸变
B = 50; % 系数,用于调整条纹的间距和数量
P = B * (x + y); % 基础斜向条纹
for i = 1:length(Zernike_indices)P = P + Zernike_coefficients(i) * Z{Zernike_indices(i)};
end
P = P .* mask; % 应用掩膜% 设置保存图像的文件夹
outputFolder = 'E:\gansheyi_daima\matlab\path_to_your_output_folder2'; % 确保这是正确的路径
if ~exist(outputFolder, 'dir')mkdir(outputFolder); % 如果输出文件夹不存在,则创建它
end% 生成和保存9张相移干涉图像
A = 0.5; % 设置振幅,增加对比度
for n = 1:9% 相位移动phase_shift = (n - 1) * pi / 2;% 生成干涉图像,增加对比度I = 0.5 + A * cos(P + phase_shift);I = I .* mask; % 再次应用掩膜% 保存图像filename = fullfile(outputFolder, sprintf('interference_%d.bmp', n));imwrite(I, filename);
end

 

整体来说,这段代码通过模拟光波的相位分布并将其应用于高斯光束,来生成具有波前误差的干涉图像。这种方法可以用于模拟实际的光学系统中的波前,并为光学测试和分析提供理论模型。

下面 是读取9帧移相干涉条纹图

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import matplotlib.patches as mpatches# 设置中文兼容字体
plt.rcParams['font.sans-serif'] = ['SimHei']# 创建一个3x3网格的子图
fig, axs = plt.subplots(3, 3, figsize=(10, 8))# 图像文件路径
image_files = [f'C:/Users/Administrator/Desktop/Untitled Folder/matlab/simulation/{i}.bmp' for i in range(9)]# 为每张图像添加标题和图例
for ax, image_file, i in zip(axs.ravel(), image_files, range(1, 10)):img = mpimg.imread(image_file)ax.imshow(img, cmap='gray')ax.axis('off')# 设置标题ax.set_title(f'图{i}')# 创建代理艺术家用于图例proxy = mpatches.Rectangle((0, 0), 1, 1, fc="w", transform=ax.transAxes, alpha=0)ax.legend([proxy], [f'图例{i}'], loc='upper right')plt.tight_layout()
plt.show()

matlab 的代码:

% 设置图像文件夹和文件名
folder = 'C:/Users/Administrator/Desktop/Untitled Folder/matlab/simulation/'; % 更改为您的图像文件夹路径
filePattern = fullfile(folder, '*.bmp');
bmpFiles = dir(filePattern);% 创建一个新图形窗口
figure;% 遍历所有图像文件
for k = 1:9baseFileName = bmpFiles(k).name;fullFileName = fullfile(folder, baseFileName);fprintf(1, 'Now reading %s\n', fullFileName);% 读取图像imageArray = imread(fullFileName);imageSize = size(imageArray);% 创建掩膜(圆形)[columnsInImage, rowsInImage] = meshgrid(1:imageSize(2), 1:imageSize(1));% 中心点centerX = imageSize(2) / 2;centerY = imageSize(1) / 2;% 半径radius = min([centerX centerY]) - 5; % 减5像素以保持圆形在图像内部% 创建二维逻辑索引circlePixels = (rowsInImage - centerY).^2 ...+ (columnsInImage - centerX).^2 <= radius.^2;% 初始化一个全黑的图像maskedImage = uint8(zeros(size(imageArray)));% 使用圆形掩膜来定义ROI区域内的像素maskedImage(circlePixels) = imageArray(circlePixels);% 显示图像subplot(3,3,k);imshow(maskedImage); % 显示应用掩膜后的图像title(sprintf('Image #%d', k));
end

四步移相法:

作为经典的解相算法,四步移相法4]可以有效计算出理想移相图组的相位分布。先获取无移相的干涉图像,再进行三次移相间隔为π/2的移相,每次移相完成采集1帧图像,共得到4帧相位相差π/2的干涉图像,其图像光强信息分别为:

 (2.3)~(2.6)进行公式变换消去A和B可得到p(x,y)和四帧图像像素信息的关系式:

 该算法求解速度快,适合对理想干涉图组进行求解。当有外部干扰时,相位变化呈无规则态,此时四步移相法的解相效果非常糟糕,无任何抗振能力。与四步移相法类似的单周期定步长算法还有三步算法等。

其中原理部分转载与下方硕士论文:

参考文献:翟天保 硕士论文 基于干涉图像质量分析的激光干涉仪抗振技术研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于厨师算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于厨师算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于厨师算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.厨师算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

一加 12 Pop-up快闪活动来袭,十城联动火爆开启

12 月 9 日&#xff0c;一加 12 Pop-up 快闪活动在北京、深圳、上海、广州等十城联动开启&#xff0c;各地加油欢聚快闪现场&#xff0c;抢先体验与购买一加 12。作为一加十年超越之作&#xff0c;一加 12 全球首发拥有医疗级护眼方案和行业第一 4500nit 峰值亮度的 2K 东方屏、…

C++新经典模板与泛型编程:策略类模板

策略类模板 在前面的博文中&#xff0c;策略类SumPolicy和MinPolicy都是普通的类&#xff0c;其中包含的是一个静态成员函数模板algorithm()&#xff0c;该函数模板包含两个类型模板参数。其实&#xff0c;也可以把SumPolicy和MinPolicy类写成类模板—直接把algorithm()中的两…

【Linux】无法使用 ifconfig 查看系统网络接口信息,报错 command not found: ifconfig

问题描述 ifconfig是一个用于配置和显示系统网络接口信息的命令行工具。它通常用于Unix、Linux和其他类Unix系统中。 通过ifconfig命令&#xff0c;你可以查看和修改系统中网络接口的配置信息&#xff0c;包括IP地址、子网掩码、MAC地址、MTU&#xff08;最大传输单元&#x…

javacv踩坑记录

前一阵学习opencv&#xff0c;发现在做人脸识别的时候遇到一些类库不存在的情况&#xff0c;查找后发现是由于拓展包没有安装完全&#xff08;仅安装了基础版&#xff09;。由于网络的问题&#xff08;初步猜测&#xff09;&#xff0c;始终无法安装好拓展包。 于是另辟蹊径&am…

[文档级关系抽取|ACL论文]文档级关系抽取中语言理解的基础模型

Did the Models Understand Documents? Benchmarking Models for Language Understanding in Document-Level Relation Extraction School of Computer Science, Fudan University | ACL 2023.06 | 原文链接 Background 过去的工作大多数都是从单个句子中收获更多的关系&am…

MongoDB中的$type操作符和limit与skip方法

本文主要介绍MongoDB中的$type操作符和limit与skip方法。 目录 MongoDB的$type操作符MongoDB的limit方法MongoDB的skip方法 MongoDB的$type操作符 MongoDB中的$type操作符用于检查一个字段的类型是否与指定的类型相匹配。它可以用于查询和投影操作。 $type操作符可以与以下数…

JVS低代码表单引擎:数据校验与处理的先锋

随着信息技术的迅速发展&#xff0c;数据校验与处理已经成为了各类应用中不可或缺的一环。尤其是在涉及敏感信息&#xff0c;如密码处理时&#xff0c;其安全性和准确性显得尤为重要。JVS低代码表单引擎提供了强大的文本组件触发逻辑校验功能&#xff0c;它能够在用户填写数据的…

模电·放大电路的分析方法——等效电路法

放大电路的分析方法——等效电路法 晶体管的直流模型及静态工作点的估算法晶体管共射h参数等效模型 h h h参数等效模型的由来参数的物理意义简化的h参数等效模型 r b e {r\tiny be} rbe的近似表达式 共射放大电路动态参数的分析电压放大倍数 A ˙ u \.{A}\tiny u A˙u输入电阻 …

【小米电脑管家】安装使用教程--非小米电脑

安装说明功能体验下载资源 Xiaomi HyperOS发布后&#xff0c;小米妙享电脑端独立版本也走向终点&#xff0c;最新的【小米电脑管家】将会内置妙享实现万物互联。那么本篇文章将分享非小米电脑用户如何绕过设备识别验证安装使用【小米电脑管家】实现万物互联 安装说明 1.解压文…

如何用Python编写俄罗斯方块Tetris游戏?

在本文中&#xff0c;我们将用Python代码构建一个令人惊叹的项目&#xff1a;俄罗斯方块游戏。在这个项目中&#xff0c;我们将使用pygame库来构建游戏。要创建此项目&#xff0c;请确保您的系统中安装了最新版本的Python。让我们开始吧&#xff01; Pygame是一组跨平台的Pyth…

wireshark过滤包小技巧

1、过滤包含某个字符串的数据包&#xff1a; 或者&#xff1a; 2、过滤包含某一连续十六进制的数据包&#xff1a; 或者&#xff1a; 3、过滤精确到位数位置 或者&#xff1a;

关于使用EB tresos出现无法激活的情况解决

EB安装完成时需要激活才能使用的&#xff0c;不然都无法建立工程。 我在安装eb studio时就是在激活方面有问题导致无法使用&#xff0c;下面讲解出现了什么问题以及我如何去解除的。 1.出现的错误提示&#xff1f; ERROR&#xff1a;flexActAPPActivationSend按照在官网中&…

低代码:轻松构建应用程序的新时代

在当今数字化时代&#xff0c;应用程序对于日常企业业务的开展&#xff0c;已经成为一种刚需。然而&#xff0c;应用程序开发的过程往往耗时耗力&#xff0c;对于企业来讲&#xff0c;是一笔不小的成本开支。低代码问世以来&#xff0c;一直在尝试为业务人员赋能&#xff0c;让…

扁平按钮样式

上图 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>扁平按钮</title><style>body {margin: 0;padding: 0;height: 100vh;display: flex;justify-content: center;ali…

Web漏洞-XSS绕过和pikachu靶场4个场景(三)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将其信息做其他用途&#xff0c;由用户承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、XSS漏洞挖掘与绕过 1.1、XSS漏洞挖掘 数据…

排序算法---冒泡排序

1. 原理 对数组进行遍历&#xff0c;每次对相邻的两个元素进行比较&#xff0c;如果大的在前面&#xff0c;则交换两个元素的位置&#xff0c;完成一趟遍历后&#xff0c;数组中最大的数值到了数组的末尾。再对前面n-1个数值进行相同的遍历。一共完成n-1趟遍历就实现了排序。 1…

104. 二叉树的最大深度(Java)

目录 解法&#xff1a; 官方解答&#xff1a; 方法一&#xff1a;深度优先搜索 方法二&#xff1a;广度优先搜索 思路与算法 复杂度分析 时间复杂度&#xff1a; 空间复杂度&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根…

【密码学引论】数字签名

第八章 数字签名 1、数字签名体制包括两个方面&#xff1a;施加签名、验证签名 SIG(M,Kd)S VER(S,Ke)bool&#xff08;真、假&#xff09; 2、数字签名和信息加密的区别&#xff08;从密码学五个组成部分来回答 3、安全性要求&#xff1a;先签名后加密&#xff1b;针对哈希函…

如何入门网络安全_网络安全自学

由于我之前写了不少网络安全技术相关的故事文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人在微信里问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f;要学哪些东西&#xff1f;有哪些方向&#xff1f;怎么选&#xff…