基于位相光栅的四波横向剪切干涉法波前检测算法的matlab仿真

举报
简简单单做算法 发表于 2023/08/06 16:51:18 2023/08/06
【摘要】 1.算法理论概述       波前检测技术是现代光学中的重要技术之一,可以用于衡量光学系统的成像质量和研究光学系统的异常现象。随着现代光学技术的不断发展,波前检测技术也在不断地发展和完善。其中,基于位相光栅的四波横向剪切干涉法波前检测算法是一种常用的波前检测算法,本文将从专业角度详细介绍该算法的实现步骤和数学公式。1.2、实现步骤基于位相光栅的四波横向剪切干涉法波前检测算法的实现步骤如下: ...

1.算法理论概述

       波前检测技术是现代光学中的重要技术之一,可以用于衡量光学系统的成像质量和研究光学系统的异常现象。随着现代光学技术的不断发展,波前检测技术也在不断地发展和完善。其中,基于位相光栅的四波横向剪切干涉法波前检测算法是一种常用的波前检测算法,本文将从专业角度详细介绍该算法的实现步骤和数学公式。

1.2、实现步骤

基于位相光栅的四波横向剪切干涉法波前检测算法的实现步骤如下:

 

1.制备位相光栅

 

首先需要制备两个正交的位相光栅,可以使用光刻、电子束曝光或激光直写等技术进行制备。制备时需要控制光栅的周期、透过率和相位差等参数。

 

2.调节光路

 

将待测光波分别经过两个正交的位相光栅,得到四个干涉光束,通过调节光路,使得四个干涉光束的光程差相等。

 

 

        基于位相光栅的四波横向剪切干涉法波前检测算法是一种常用的波前检测算法,其原理是通过位相光栅的作用,将光波的相位分布转化为光强分布进行测量,从而得到光波的相位分布。该算法的实现步骤包括制备位相光栅、调节光路、测量光强分布和计算相位分布等步骤。其中,计算相位分布的公式为$\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.算法运行软件版本

matlab2022a

 

3.算法运行效果图预览

 

4.png

5.png

6.png

7.png

8.png

9.png

10.png

 

4.部分核心程序

%初始图像的读取和频谱显示
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
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。