时间编码之相移法:三步相移、四步相移、多频外差原理
各位同学,今天我们来聊聊结构光编码里一个非常经典的方法——相移法。说实话,我在刚入行那会儿,觉得相移法挺玄乎的,不就是几幅正弦条纹图嘛,怎么就能算出三维坐标了?后来亲手搭了一套系统,踩了不少坑,才真正理解它的精髓。
相移法属于时间编码的一种。你想想看,空间编码是一次拍一张图,时间编码则是拍多张图,利用时间维度来编码信息。好处很明显——精度高,抗干扰能力强。坏处嘛,就是被测物体得保持静止。嗯,这里要注意,如果物体在动,相移法基本就废了。
一、三步相移法
三步相移,顾名思义,就是拍三张条纹图。每张图之间的相位差是120度,也就是2π/3。为什么是三步?因为三个方程解三个未知数——背景光强、调制光强、还有我们最想要的相位。
数学上长这样:
I1(x,y) = A(x,y) + B(x,y) * cos[φ(x,y) - 2π/3]
I2(x,y) = A(x,y) + B(x,y) * cos[φ(x,y)]
I3(x,y) = A(x,y) + B(x,y) * cos[φ(x,y) + 2π/3]
解出来的相位公式是:
φ(x,y) = arctan[ √3 * (I1 - I3) / (2*I2 - I1 - I3) ]
我个人习惯用三步相移做快速标定。为什么?因为少拍一张图,速度快。但代价是什么?噪声敏感度比四步相移高。我在项目中遇到过,环境光稍微有点波动,三步相移解出来的相位就毛毛躁躁的。
二、四步相移法
四步相移,每步相差90度(π/2)。四张图,四个方程,解三个未知数——这是个超定方程组,有冗余。冗余意味着什么?意味着更鲁棒。
四步相移的条纹图:
I1 = A + B * cos(φ - 3π/4)
I2 = A + B * cos(φ - π/4)
I3 = A + B * cos(φ + π/4)
I4 = A + B * cos(φ + 3π/4)
相位解算公式:
φ(x,y) = arctan[ (I4 - I2) / (I1 - I3) ]
你看,这个公式比三步相移的漂亮多了。没有√3,没有系数,计算量也小。而且四步相移对二阶非线性误差有天然的抑制能力。我曾经做过对比实验,同样的投影仪和相机,四步相移的相位均方根误差比三步相移低了差不多30%。
三、多频外差原理
好,现在问题来了。不管是三步还是四步相移,解出来的相位都是包裹相位——范围在[-π, π]之间。说白了,就是相位被折叠了,你不知道它是第几个周期。这就叫相位解包裹问题。
多频外差法,就是用来解决这个问题的。它的核心思想很简单:投影不同频率的条纹,利用频率之间的差频来得到一个等效的低频条纹,从而确定绝对相位。
假设我们投影两种频率的条纹:
- 频率f1,对应的包裹相位为φ1
- 频率f2,对应的包裹相位为φ2
外差后的等效频率:
f_eq = |f1 - f2|
等效相位:
φ_eq = φ1 - φ2
如果f1和f2选得合适,f_eq可以做到全场只有一个周期。这样,φ_eq就是绝对相位,不需要解包裹了。
我常用的频率组合是:
| 频率组合 | 主频率 | 辅助频率 | 等效频率 | 适用场景 |
|---|---|---|---|---|
| 双频外差 | 70 | 64 | 6 | 中等精度,速度快 |
| 三频外差 | 100 | 90, 80 | 10, 20 | 高精度,抗噪强 |
| 四频外差 | 120 | 110, 100, 90 | 10, 20, 30 | 极端环境,鲁棒性优先 |
你想想看,如果只用双频外差,等效频率是6,意味着全场有6个周期,还是需要解包裹。但如果你用三频外差,先做一次外差得到10个周期,再做一次外差得到1个周期——全场唯一,完美解决。
四、相移法整体流程
说了这么多,我们来梳理一下相移法的完整流程。我画了一张图,方便你理解整个知识体系:
从图上你可以看到,相移法的核心就两个阶段:相位解算和相位解包裹。相位解算靠三步或四步相移,相位解包裹靠多频外差或空间展开。我个人更推荐多频外差,因为它逐像素独立处理,不会像空间解包裹那样出现误差传播——一个点错了,后面全错。
好了,相移法的核心内容就这些。说白了,三步相移和四步相移是获取包裹相位的手段,多频外差是解开包裹相位的钥匙。三者结合,才能得到完整的绝对相位,进而重建出三维形貌。下次你看到那些条纹投影的三维扫描仪,心里就有数了——背后就是这套原理。