当前位置: 首页 > news >正文

实验室里的干涉仪总在搞事情,拍出来的条纹图总像抽象派画作。今天咱们用MATLAB给这些条纹来点硬核处理,手把手整点相位计算、解包裹这些骚操作

MATLAB 干涉条纹分析,用于处理干涉条纹。 如移相处理,接包裹分析,zernik 多项式拟合分析

移相处理:相位计算的入场券

先整四步移相法,这货原理简单到离谱——连续拍四张干涉图,每张参考光相位差π/2。MATLAB处理起来那叫一个丝滑:

% 生成模拟干涉图 phase_true = peaks(512)*2; % 真实相位 I1 = 255*(1 + cos(phase_true)); I2 = 255*(1 + cos(phase_true + pi/2)); I3 = 255*(1 + cos(phase_true + pi)); I4 = 255*(1 + cos(phase_true + 3*pi/2)); % 相位计算 phase_wrapped = atan2((I4-I2), (I1-I3)); % 关键操作在这!

这里atan2函数可比普通反正切稳多了,自动处理分母为零的情况。注意算出来的相位被限制在[-π, π],像被压缩的弹簧需要解包裹释放。

解包裹:相位展开的暴力美学

MATLAB 干涉条纹分析,用于处理干涉条纹。 如移相处理,接包裹分析,zernik 多项式拟合分析

二维相位展开是个坑,这里先用最直接的逐行扫描法:

function unwrapped = simple_unwrap(wrapped_phase) [rows, cols] = size(wrapped_phase); unwrapped = zeros(size(wrapped_phase)); for i = 1:rows current_line = squeeze(wrapped_phase(i,:)); diffs = diff(current_line); jump_indices = find(abs(diffs) > pi); offset = 0; for j = 1:length(current_line) if any(jump_indices == (j-1)) offset = offset + 2*pi*(diffs(jump_indices == (j-1)) > 0) - 2*pi*(diffs(jump_indices == (j-1)) < 0); end unwrapped(i,j) = current_line(j) + offset; end end end

这算法简单粗暴,遇到相位跳变就加减2π。实测对连续条纹效果不错,但碰到噪声容易翻车——这时候得上质量图引导的算法。

Zernike多项式:光学系统的卸妆油

测出来的相位可能带着光学系统的像差,用Zernike多项式给系统误差卸个妆:

% 构建Zernike基函数 [x,y] = meshgrid(linspace(-1,1,512)); [theta,rho] = cart2pol(x,y); mask = rho <= 1; % 有效区域 % 前15项Zernike多项式 Z = zeros(sum(mask(:)),15); terms = [0 0; 1 1; 1 -1; 2 0; 2 -2; 2 2; 3 -1; 3 1;... 3 -3; 3 3; 4 0; 4 2; 4 -2; 4 4; 4 -4]; % 指数排列 for k = 1:15 n = terms(k,1); m = terms(k,2); Z(:,k) = zernfun(n,m,rho(mask),theta(mask),'norm'); end % 拟合与重建 phase_vec = unwrapped_phase(mask); coeffs = Z \ phase_vec; % 最小二乘拟合 reconstructed = Z*coeffs;

zernfun需要自己写或找工具箱,这里用反斜杠运算符实现快速拟合。拟合后的残差能反映被测物真实面形,比直接用原始相位靠谱得多。

实战建议

  1. 移相时加个高斯滤波能压制噪声,但别用median滤波——相位跳变处会糊
  2. 解包裹遇到断裂区域,试试洪水填充算法先分割区域
  3. Zernike拟合别贪多,高阶项容易过拟合,看着RMS误差曲线选合适阶数

最后放个对比图代码收尾:

figure; subplot(131), imshow(phase_wrapped,[]), title('包裹相位') subplot(132), imshow(unwrapped,[]), title('解包裹结果') subplot(133), imshow(reshape(reconstructed,size(x)),[]), title('Zernike拟合')

处理完的相位图终于能看了,光学工程师的强迫症都被治好了。记住,干涉条纹分析就是和噪声、跳变、系统误差斗智斗勇的过程,MATLAB就是我们手里的瑞士军刀。

http://www.jsqmd.com/news/399387/

相关文章:

  • 寒假学习笔记2.14
  • 淘票票9.5+猫眼9.4+票房破5亿,《惊蛰无声》凭什么让观众打出高分? - SFMEDIA
  • 基于java的设计师约稿平台
  • 从 std 到 STL:C++ 标准库到底是什么?(附 Java 类比)
  • 题解:AcWing 861 二分图的最大匹配
  • 解密AI原生应用领域意图识别的工作原理
  • 基于java和Vue的共享单车管理系统 骑行记录 单车监督调度系统
  • 《惊蛰无声》淘票票开分9.5、猫眼9.4,票房破5亿:口碑与市场双向奔赴 - SFMEDIA
  • 基于java的蛋糕烘焙方法经验分享平台
  • 元数据管理如何提升数据科学团队效率?
  • java软件测试项目任务管理系统
  • 数据运营新人必学:从Excel到SQL到BI,大数据工具学习的3个阶段及避坑点
  • 题解:AcWing 860 染色法判定二分图
  • 寒假学习笔记2.13
  • 基于java+Vue的养老院服务预订管理系统的设计与实现
  • 光子晶体仿真在COMSOL里总能把人折腾得又爱又恨。今天聊聊几个实战中容易卡壳的点:拓扑荷对偏振态的操控、三维能带与Q因子计算,顺带提一嘴远场偏振的骚操作
  • java电影评论情感分析系统78j90381
  • java第二课堂教学管理系统 j6l4ub2t
  • java基于数据可视化的大学生创新能力培养平台
  • java校园二手交易平台
  • 股市赚钱学概论:赚钱理之其他
  • SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识) 1.模型...
  • 47款U盘
  • JAVA面试题速记-第1期-java基础
  • 屏幕注释工具DrawPen
  • NanaZip
  • 题解:AcWing 854 Floyd求最短路
  • TVP-FAVAR模型解读
  • 机器学习入门:用 Python 实现简单分类模型完整流程
  • AI元人文:在技术加速时代守护意义生态