news 2026/11/1 7:00:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
实验室里的干涉仪总在搞事情,拍出来的条纹图总像抽象派画作。今天咱们用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就是我们手里的瑞士军刀。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/31 16:28:52

机器学习入门:用 Python 实现简单分类模型完整流程

第一部分&#xff1a;分类模型的核心概念什么是分类分类是一种监督学习技术&#xff0c;它通过使用已标记的数据训练模型&#xff0c;然后利用该模型对新数据的标签进行预测。这里的“监督”意味着训练数据中已经包含了正确答案——也就是我们想要预测的标签。常见的分类应用场…

作者头像 李华
网站建设 2026/10/31 14:08:19

桌面整理 Desk Tidy

链接&#xff1a;https://pan.quark.cn/s/5fe22388275aWindows 桌面整理神器 — 让你的桌面清爽如新让你的Windows桌面清爽如新&#xff01;核心亮点&#xff1a;超轻量&#xff1a;CPU占用≈0%&#xff0c;内存仅280MB&#xff0c;安装包仅11.8MB 全局热键&#xff1a;CtrlShi…

作者头像 李华
网站建设 2026/10/31 13:15:27

智能指针(二):机制篇 —— 移动语义与所有权转移

关键词&#xff1a;右值引用、移动构造、std::move、Rule of Five、noexcept、unique_ptr 适合人群&#xff1a;已经理解智能指针存在意义&#xff0c;想深入理解“所有权如何被转移”的开发者 一、没有移动语义&#xff0c;就没有 unique_ptr 在上一篇中我们完成了一个认知升…

作者头像 李华
网站建设 2026/10/29 0:16:53

从零搭建JumpServer

简介 堡垒机是网络安全产品&#xff0c;用来管理服务器&#xff0c;完成服务器的认证、授权、账号管理和审计。 JumpServer&#xff0c;是一款开源免费的堡垒机产品&#xff0c;本文介绍如何搭建 JumpServer。 准备 我在本地使用 VMWare&#xff0c;创建三台虚拟机&#xf…

作者头像 李华
网站建设 2026/10/17 18:08:10

AI人工智能领域,Stable Diffusion的应用案例

AI人工智能领域,Stable Diffusion的应用案例 关键词:AI人工智能、Stable Diffusion、应用案例、图像生成、创意设计 摘要:本文聚焦于AI人工智能领域中Stable Diffusion的应用案例。首先介绍了Stable Diffusion的背景和相关概念,接着深入剖析其核心算法原理与操作步骤。通过…

作者头像 李华