4. 相位提取算法:四步相移法、五步相移法、载波条纹法、相位解包裹算法

相位提取,说白了就是把干涉条纹里藏着的相位信息给“揪”出来。你拍到的条纹图,光强是明暗变化的,但相位信息是编码在里面的。怎么解码?这就是本章要讲的核心。

我个人习惯把相位提取分成两大块:一是从多张相移图里算相位(四步、五步),二是从单张载波条纹里解相位。最后不管哪种方法,算出来的相位都是包裹在(-π, π]之间的,必须解包裹才能得到连续的真实相位。好,咱们一个一个来过。

4.1 四步相移法

四步相移法是最基础、最常用的方法。它的原理很简单:控制参考镜移动四个等间距的步长,每次移动产生π/2的相位变化,拍四张图。

四张图的光强表达式是这样的:

I1(x,y) = I0(x,y) + I'(x,y) * cos[φ(x,y) + 0]
I2(x,y) = I0(x,y) + I'(x,y) * cos[φ(x,y) + π/2]
I3(x,y) = I0(x,y) + I'(x,y) * cos[φ(x,y) + π]
I4(x,y) = I0(x,y) + I'(x,y) * cos[φ(x,y) + 3π/2]

然后通过下面这个公式,就能把包裹相位φ(x,y)算出来:

φ(x,y) = arctan[(I4 - I2) / (I1 - I3)]

嗯,这里要注意:arctan算出来的值范围是(-π/2, π/2),但实际相位可能是四个象限的。所以一般用atan2函数,它能根据分子分母的正负判断象限,输出(-π, π]的相位值。

我的经验:四步相移法对相移器的线性度要求不高,计算量也小。我在做玻璃应力检测时,只要环境振动控制得好,四步法基本够用。但如果PZT存在非线性误差,建议用五步法。

4.2 五步相移法

五步相移法,说白了就是多拍一张图,用来抵消相移误差。它的步长也是π/2,但拍了五张:0、π/2、π、3π/2、2π。

相位计算公式稍微复杂一点:

φ(x,y) = arctan[2*(I2 - I4) / (2*I3 - I5 - I1)]

为什么五步法更准?因为它在分子分母里做了对称处理,能抵消掉PZT的非线性相移误差。我遇到过好几次,用四步法算出来的相位图有“波纹”状误差,换成五步法就干净多了。

对比项 四步相移法 五步相移法
图像数量 4张 5张
相移步长 π/2 π/2
抗相移误差 一般 较好
计算复杂度 低 中
适用场景 环境稳定、PZT线性好 PZT非线性、要求高精度
避坑指南:我曾经在高温环境下做检测,PZT因为热漂移导致相移不准,四步法算出来的相位图全是条纹扭曲。后来换成五步法,虽然多拍一张图,但结果稳定多了。所以,如果你的环境温度变化大,或者PZT质量一般,直接上五步法。

4.3 载波条纹法

载波条纹法,也叫空间载波法。它不需要移动参考镜,而是通过倾斜参考镜,在干涉场里引入一个已知的空间载波频率。这样,单张条纹图里就包含了完整的相位信息。

它的核心是傅里叶变换:

  1. 对单张载波条纹图做二维傅里叶变换,得到频谱图。
  2. 在频谱里,基频分量在中心,正负一级分量对称分布。我们只提取正一级分量。
  3. 对正一级分量做逆傅里叶变换,取虚部与实部的比值,得到包裹相位。

你想想看,单张图就能解相位,这对动态测量来说太有用了。我做过一个在线检测项目,玻璃在传送带上移动,没法拍多张相移图,只能用载波条纹法。

关键点:载波条纹法要求载波频率足够高,能把正一级和基频、负一级在频谱上分开。如果载波频率太低,频谱混叠,相位就解不出来了。一般要求载波条纹密度至少是待测相位最大频率的3倍。

4.4 相位解包裹算法

不管用哪种方法算出来的相位,都是包裹在(-π, π]之间的。说白了,就是相位值被“折叠”了。解包裹,就是把这个折叠打开,恢复成连续的相位。

解包裹的核心思想很简单:逐像素比较相邻点的相位差,如果差值大于π,就加上或减去2π的整数倍。但实际做起来,噪声、阴影、断点都会让这个过程出错。

常用的解包裹算法有两类:枝切法和最小二乘法。

4.4.1 枝切法

枝切法,也叫路径跟踪法。它的思路是:先找出所有相位不连续的点(称为“残差点”),然后用“枝切线”把相邻的残差点连接起来,最后沿着避开枝切线的路径做积分。

具体步骤:

  1. 计算每个2×2像素块的相位梯度,判断是否存在残差点。
  2. 用最短路径或最近邻原则,把正负残差点配对,用枝切线连接。
  3. 从任意点开始,沿着不穿过枝切线的路径做积分,得到连续相位。

枝切法的优点是速度快,而且能很好地保持相位细节。但缺点也很明显:如果残差点太多,枝切线会连成一片,导致大片区域无法解包。

我的经验:在玻璃应力检测中,如果样品边缘有灰尘或划痕,会产生大量残差点。我一般先用中值滤波预处理条纹图,减少噪声引起的残差点,再用枝切法解包。效果不错。

4.4.2 最小二乘法

最小二乘法,也叫全局优化法。它不关心残差点,而是把解包裹问题转化为一个全局优化问题:找一个连续相位场,使得它的梯度与包裹相位的梯度差异最小。

数学上,就是求解一个泊松方程:

∇²φ = ρ

其中ρ是包裹相位梯度的散度。这个方程可以用离散余弦变换(DCT)或快速傅里叶变换(FFT)快速求解。

最小二乘法的优点是鲁棒性好,即使有噪声和残差点,也能得到一个平滑的解。但缺点是会平滑掉真实的相位突变,而且计算量大。

对比项 枝切法 最小二乘法
原理 路径跟踪,避开残差点 全局优化,求解泊松方程
速度 快 较慢
抗噪声能力 弱(残差点多时失效) 强
相位细节保持 好 一般(会平滑突变)
适用场景 噪声少、残差点少的条纹图 噪声大、残差点多的条纹图
避坑指南:我曾经在一个项目中,样品表面有很深的划痕,导致相位突变。用枝切法解包,划痕附近全是解包错误。后来换成最小二乘法,虽然划痕处的相位被平滑了,但整体相位分布是连续的,后续应力计算反而更准确。所以,选哪种算法,要看你的具体需求。

4.5 本章知识体系

下面这张图,把本章的核心内容串起来了。你可以看到,相位提取和解包裹是前后衔接的,选哪种方法取决于你的硬件条件和样品情况。

相位提取与解包裹算法体系 干涉条纹图输入 多张相移图? 是 否 相移法 四步相移法 五步相移法 载波条纹法 傅里叶变换解相位 包裹相位 (-π, π] 相位解包裹 枝切法 最小二乘法 输出:连续相位场 → 用于应力双折射计算

好了,相位提取和解包裹的核心内容就这些。四步和五步法适合静态测量,载波条纹法适合动态测量。解包裹时,枝切法快但怕噪声,最小二乘法稳但会平滑细节。你根据实际情况选就行。