目录
1.算法理论概述
波前检测技术是现代光学中的重要技术之一,可以用于衡量光学系统的成像质量和研究光学系统的异常现象。随着现代光学技术的不断发展,波前检测技术也在不断地发展和完善。其中,基于位相光栅的四波横向剪切干涉法波前检测算法是一种常用的波前检测算法,本文将从专业角度详细介绍该算法的实现步骤和数学公式。
1.1、算法原理
位相光栅是一种用于测量光波相位的装置,它由许多等间距的透明条纹组成,每个条纹的透过率都不相同。当光波通过位相光栅时,由于光波在不同透明度的条纹上产生的相移量不同,因此可以通过测量光波透过位相光栅后的光强分布来计算光波的相位分布。
四波横向剪切干涉法是一种基于位相光栅的波前检测方法,将待测光波分别经过两个正交的位相光栅,可以得到四个干涉光束,分别为$I_1$、$I_2$、$I_3$、$I_4$。这四个干涉光束的光程差分别为$\Delta_1$、$\Delta_2$、$\Delta_3$、$\Delta_4$,其中$\Delta_1$和$\Delta_2$是由第一个位相光栅引起的,$\Delta_3$和$\Delta_4$是由第二个位相光栅引起的。当两个位相光栅的周期相等时,即$\Delta_1=\Delta_2$,$\Delta_3=\Delta_4$,则可以得到:
$$I_1I_2-I_3I_4\propto\cos(\phi(x,y))$$
其中,$\phi(x,y)$表示光波在$(x,y)$处的相位。因此,通过测量$I_1$、$I_2$、$I_3$、$I_4$的光强分布,可以计算出光波的相位分布。
1.2、实现步骤
基于位相光栅的四波横向剪切干涉法波前检测算法的实现步骤如下:
1.制备位相光栅
首先需要制备两个正交的位相光栅,可以使用光刻、电子束曝光或激光直写等技术进行制备。制备时需要控制光栅的周期、透过率和相位差等参数。
2.调节光路
将待测光波分别经过两个正交的位相光栅,得到四个干涉光束,通过调节光路,使得四个干涉光束的光程差相等。
3.测量光强分布
在测量光强分布时,可以使用像面传感器或干涉仪等设备进行测量。将待测光波分别透过两个正交的位相光栅,得到四个干涉光束的光强分布,分别为$I_1(x,y)$、$I_2(x,y)$、$I_3(x,y)$和$I_4(x,y)$。
4.计算相位分布
通过测量光强分布,可以计算出光波的相位分布。根据上述原理,可以得到:
$$I_1I_2-I_3I_4\propto\cos(\phi(x,y))$$
因此,可以通过计算$I_1(x,y)$、$I_2(x,y)$、$I_3(x,y)$和$I_4(x,y)$的光强分布,得到相位分布$\phi(x,y)$。具体计算方法如下:
$$\phi(x,y)=\arctan\left[\frac{I_1(x,y)I_4(x,y)-I_2(x,y)I_3(x,y)}{I_1(x,y)I_3(x,y)+I_2(x,y)I_4(x,y)}\right]$$
1.3、数学公式
计算$I_1I_2-I_3I_4$的比例系数
根据原理,可以得到:
$$I_1I_2-I_3I_4\propto\cos(\phi(x,y))$$
因此,需要计算$I_1I_2-I_3I_4$的比例系数,表示$I_1I_2-I_3I_4$与$\cos(\phi(x,y))$之间的关系。计算公式如下:
$$k=\frac{1}{\sqrt{I_1^2+I_2^2+I_3^2+I_4^2}}$$
其中,$k$表示比例系数。
计算相位分布
根据上述原理,可以得到:
$$\phi(x,y)=\arctan\left[\frac{I_1(x,y)I_4(x,y)-I_2(x,y)I_3(x,y)}{I_1(x,y)I_3(x,y)+I_2(x,y)I_4(x,y)}\right]$$
其中,$I_1(x,y)$、$I_2(x,y)$、$I_3(x,y)$和$I_4(x,y)$表示测量得到的光强分布。
基于位相光栅的四波横向剪切干涉法波前检测算法是一种常用的波前检测算法,其原理是通过位相光栅的作用,将光波的相位分布转化为光强分布进行测量,从而得到光波的相位分布。该算法的实现步骤包括制备位相光栅、调节光路、测量光强分布和计算相位分布等步骤。其中,计算相位分布的公式为$\phi(x,y)=\arctan\left[\frac{I_1(x,y)I_4(x,y)-I_2(x,y)I_3(x,y)}{I_1(x,y)I_3(x,y)+I_2(x,y)I_4(x,y)}\right]$。该算法在光学系统的成像质量检测和异常现象研究方面具有广泛的应用前景。
2.部分核心程序
........................................................
%初始图像的读取和频谱显示
I0 = imread('test.jpg');
[R,C,K] = size(I0);
if K == 1
I = I0;
else
I = rgb2gray(I0);
end
I = imresize(I,[256,256]);
% 显示图像及其频谱
figure;
subplot(121);
imshow(I);
title('四波横向剪切干涉图');
I_fft = fftshift(fft2(I));
RR = real(I_fft); %取傅立叶变换的实部
II = imag(I_fft); %取傅立叶变换的虚部
A = sqrt(RR.^2+II.^2); %计算频谱幅值
[m,n] = size(A);
[x,y] = meshgrid(1:n,1:m);
subplot(122);
imshow(A,[]);
title('频谱图');
% 显示频谱的三维图形
figure;
subplot(121);
mesh(x,y,A);
title('FFT频谱');
camlight right;
lighting phong;
shading interp
axis square;
%%
% 计算滤波冲击响应函数并进行滤波
[H,H1,H2,H3] = func_filter(A,20);
I_fft_filter = I_fft.*H;
RR_filter = real(I_fft_filter); %取傅立叶变换的实部
II_filter = imag(I_fft_filter); %取傅立叶变换的虚部
A_filter = sqrt(RR_filter.^2+II_filter.^2); %计算频谱幅值
[m,n] = size(A_filter);
[x_f,y_f] = meshgrid(1:n,1:m);
% 显示滤波后的频谱的三维图形
subplot(122);
surf(x_f,y_f,A_filter);
title('FFT频谱(滤波之后)');
camlight right;
lighting phong;
shading interp
axis square;
% 计算强度并显示
I_fft_A = I_fft.*H1;
I_ifft_A = ifft2(I_fft_A);
figure;
imshow(I_ifft_A,[]);
title('强度');
% 计算x方向和y方向的差分波前,并显示
[Xpphase,X_phase] = func_Dx_phase(I_fft,H2);
[Ypphase,Y_phase] = func_Dy_phase(I_fft,H3);
figure;
surf(Xpphase);
camlight right;
lighting phong;
shading interp
title('Dx');
xlabel('x/像素');
ylabel('y/像素');
zlabel('差分波前');
view([-50,26]);
figure;
surf(Ypphase);
camlight right;
lighting phong;
shading interp
title('Dy');
xlabel('x/像素');
ylabel('y/像素');
zlabel('差分波前');
view([135,14]);
%%
% 使用差分Zernike方法进行波前重构,并显示结果
[Z,xn,yn] = func_zernike_poly(Xpphase,Ypphase);
figure;
imagesc(xn,yn,Z);
axis xy
axis square
figure;
mesh(xn,yn,Z)
axis xy
axis square
19_010m
3.算法运行软件版本
matlab2022a
4.算法运行效果图预览
5.算法完整程序工程
OOOOO
OOO
O