35  相位偏折术

把抛光的手机盖板玻璃、镜面不锈钢面板或者一块平面镜放到产线上,前几章建立的三维成像手段会集体失灵:结构光(章节 32)投出的条纹不再漫反射回相机,而是被镜面径直反射到别处;激光三角(章节 30)找不到稳定的散射光带;双目立体也无从匹配——镜面上看到的根本不是表面纹理,而是环境的倒影。光不在镜面上漫反射,所有依赖”看见表面被照亮”的方法都没了立足点。

然而镜面恰恰能做一件别的表面做不到的事:当一面镜子(mirror)用。如果让镜面去反射一块显示着正弦条纹的屏幕,相机透过镜面”照镜子”看到的,就是被表面起伏扭曲过的条纹。表面哪里稍微倾斜一点,反射到相机里的条纹就在那里偏移一点——条纹的扭曲量直接编码了表面的斜率(slope)。这就是相位偏折术(phase measuring deflectometry, PMD):不去照亮表面测高度,而是把表面当反射镜,从条纹的相位偏移反推斜率。图 35.1 是被测镜面反射屏幕条纹得到的原始图像,浅浅的隆起与划痕状沟槽已经在规则条纹上留下了可见的局部畸变。

图 35.1: 被测镜面反射屏幕正弦条纹得到的原始相移图。上排为 x 向条纹的 4 步相移、下排为 y 向条纹的 4 步相移(屏幕距离 \(L=200\) mm,条纹周期 \(P=16\) mm,传感器噪声 \(\sigma=2\))。规整的条纹在隆起处(左侧圆斑)和划痕状沟槽处(右侧竖线)被局部拉扯——这些畸变就是表面斜率的指纹。

PMD 与结构光(章节 32)是一对对偶(dual):结构光要求表面漫反射、直接测高度;PMD 要求表面镜面反射、直接测斜率。两者用的是同一台相移与解包裹机器,却服务于几何上相反的两类表面。本章几乎每一个特性,都能在结构光那一章找到镜像。

35.1 镜面反射与斜率编码

PMD 的几何由三个角色构成:发出条纹的屏幕(screen)、把条纹反射进相机的被测镜面(specular surface),以及成像的相机。屏幕在距镜面 \(L\) 处显示一幅空间正弦图样,相机的每条视线打到镜面上某点后,按反射定律折回屏幕,落在某个屏幕坐标上——这个坐标处的屏幕相位,就是该像素观测到的相位。

关键在于表面倾斜如何改变这条光路。设表面在某点的局部斜率为 \(s=\partial h/\partial x\),即表面相对参考平面倾斜了一个小角 \(\alpha\approx s\)反射定律告诉我们:表面法向转动 \(\alpha\),反射光线会转动 \(2\alpha\)——这就是偏折术的2 倍角偏折律(deflection law)。光线在屏幕距离 \(L\) 处的横向落点因此平移了约 \(2L\tan\alpha\approx 2L\,s\)。于是相机在该像素观测到的,不再是正下方屏幕点的相位,而是平移了 \(2L\,s\) 之后那一点的相位:

\[ \varphi_{\text{obs}}(x)\;\approx\;\varphi_{\text{screen}}\!\big(x + 2L\,\tfrac{\partial h}{\partial x}\big). \]

“2 倍”来自反射定律:镜子转 \(\alpha\),光线转 \(2\alpha\)。这也是为什么 PMD 对斜率异常灵敏——表面一个毫弧度的倾斜,在 \(L=200\) mm 外被放大成 \(2L\alpha=0.4\) mm 的条纹位移,相当于条纹周期 \(P=16\) mm 的 2.5%,相位上清晰可辨。几何本身自带一级放大。

把它和均匀屏幕相位 \(\varphi_{\text{screen}}(x)=2\pi x/P\) 相减,观测相位相对平面镜参考的偏移正比于斜率:\(\Delta\varphi = \varphi_{\text{obs}}-\varphi_{\text{ref}} = (2\pi/P)\cdot 2L\,s\)。换言之

\[ s \;=\; \frac{\partial h}{\partial x} \;=\; \frac{P}{2\pi\cdot 2L}\,\Delta\varphi . \]

这条式子是 PMD 一切性质的根源:它测的是斜率 \(\partial h/\partial x\),不是高度 \(h\)。高度只能通过对斜率场作积分间接得到(小节 35.3)。这与结构光形成鲜明对照——结构光的相位直接正比于高度,PMD 的相位正比于高度的导数。导数对高频形貌敏感、对绝对量级迟钝,这一取舍贯穿全章:它让 PMD 在检测微小起伏时灵敏得惊人(小节 35.4),却也让绝对高度依赖易漂的积分。

35.2 相位测量复用

既然观测量是屏幕条纹的相位,求相位的机器就可以原样借用结构光那一套(小节 32.1)。屏幕沿 x 向显示 4 步相移条纹,相机采 4 帧 \(I_0\ldots I_3\),包裹相位由四步相移公式手算:

\[ \varphi_{\text{wrap}} = \operatorname{atan2}\!\big(I_3-I_1,\; I_0-I_2\big), \]

和结构光一章一样,SciVision 的 SciSvPhaseMeasure::DecodePatterns(四步相移解码)在本 SDK 构建中惰性——返回码为 0 却输出空图。PMD 正是它的本职场景,例程仍用真实的 X+Y 双向条纹再探一次、如实记录其失效,随后整条相位链路全部手写(包裹相位 atan2 + 空间解包裹)。

调制度 \(B=\tfrac12\sqrt{(I_3-I_1)^2+(I_0-I_2)^2}\) 顺带量出条纹对比度,留待 小节 35.5 使用。由于偏折相位场光滑(载波约 0.08 rad/px,缺陷引入的偏折也不足 \(\pi\)),平坦镜面上单频空间解包裹(spatial unwrapping)就够了,无需结构光的双频层级法(小节 32.2)。x 向和 y 向各跑一套,得到两个方向的解包裹相位。

测量的最后一步是减去平面镜参考相位:单独渲染一组理想平面镜的相移图,解出其相位 \(\varphi_{\text{ref}}\),与被测相位相减消掉载波与系统几何,剩下的 \(\Delta\varphi\) 直接换算成斜率场 \(s_x,\,s_y\)图 35.2 是两个方向的斜率图。最值得玩味的是 x 向斜率图(图 35.2 (a))上隆起的双极性签名(bipolar signature):一个 50 μm 的高斯隆起在斜率图上不是一个亮斑,而是一正一负两个瓣——因为斜率是高度的导数,隆起的上坡为正斜率、下坡为负斜率,过峰顶时斜率穿零。实测隆起邻域内 x 向斜率在 \(-0.0146\)\(+0.0141\) rad 之间摆动,与高斯隆起的理论峰值斜率 \(\pm 0.0143\) rad 吻合。右侧的划痕状沟槽则因沿 y 向延伸、只在 x 向有斜率,呈现为一条清晰的竖线。

(a) x 向斜率 \(s_x\)
(b) y 向斜率 \(s_y\)
图 35.2: 由偏折相位减参考相位换算的两方向斜率场(显示范围 \(\pm 15\) mrad)。(a) x 向斜率:50 μm 隆起呈一正一负的双极瓣(斜率是高度的导数,上坡正、下坡负、峰顶穿零),划痕沟槽呈竖线;(b) y 向斜率:隆起的双极瓣转到上下方向,沿 y 延伸的沟槽在 y 向几乎无斜率而近乎消失。

35.3 斜率积分与高度

要得到高度,必须把斜率场重新积分回去——这与光度立体(章节 34)从法向场积分出高度是同构的问题:都拿到了表面梯度,都需要还原出标量高度场。最朴素的做法是沿路径累加梯形积分:先沿首列用 \(s_y\) 积分,再逐行用 \(s_x\) 积分得一条路径的高度;换一条路径(先首行 \(s_x\)、再逐列 \(s_y\))再算一次,两条路径取平均以削弱噪声。表面光滑、噪声小,这个简易积分器无需上泊松解的复杂度即可胜任。

积分有个固有软肋:低频漂移。斜率噪声沿积分路径累加,会在高度图上积成缓慢起伏的”地形”,加上积分常数本身不定,PMD 的绝对高度与大尺度形貌并不可靠。这恰是与结构光互补之处——结构光绝对高度准、高频灵敏度差;PMD 反之。

图 35.3 是积分得到的高度图。定量上,例程用中心盘减外环基线测得隆起高 46.83 μm(GT 46.71、名义 50),用槽底减旁侧基线测得沟槽深 10.13 μm(GT 10.16、名义 10)——两者都逼近真值,残余偏差主要来自有限孔径的基线选取而非测量噪声。平坦区高度 RMS 误差仅 0.228 μm:斜率积分对逐像素噪声做了空间平均,把 \(1.6\times10^{-4}\) rad 的斜率噪声压成了亚微米的高度噪声。

图 35.3: 斜率场两路径积分得到的高度图(显示范围 \(-15\)\(+60\) μm)。隆起重建为 46.83 μm(GT 46.71)、沟槽 10.13 μm(GT 10.16),平坦区高度 RMS 误差 0.228 μm。

35.4 灵敏度:为什么测斜率这么准

这是本章的核心。PMD 测斜率,而斜率是角度——角度量极易精测,因为屏幕距离 \(L\) 把微小倾角放大成了可观的条纹位移。把噪声推导一遍就看得很清楚。四步相移的相位噪声为 \(\sigma_\varphi=\sigma_N/(\sqrt2\,B)\),测量与参考相减再放大 \(\sqrt2\),得 \(\sigma_{\Delta\varphi}=\sigma_N/B\),于是斜率噪声

\[ \sigma_{\text{slope}} \;=\; \frac{\sigma_N}{B}\cdot\frac{P}{2\pi\cdot 2L}. \]

代入 \(\sigma_N=2,\,B=80,\,P=16\) mm\(,\,L=200\) mm,理论值 \(\sigma_{\text{slope}}=1.592\times10^{-4}\) rad,与实测 \(1.643\times10^{-4}\) rad 一致。这个角度噪声小到什么程度?对一个底宽 \(w\)、高 \(h\) 的缺陷,其最大斜率约 \(4h/w\);能被检出的条件是该斜率超过噪声,即 \(4h_{\min}/w\approx\sigma_{\text{slope}}\),给出最小可测高度

\[ h_{\min}\;\approx\;\frac{\sigma_{\text{slope}}\,w}{4}. \]

代入实测 \(\sigma_{\text{slope}}\)\(w=1\) mm 的缺陷 \(h_{\min}=0.041\) μm,\(w=5\) mm 时 0.205 μm\(w=20\) mm 时 0.821 μm。窄而浅的微观缺陷能测到几十纳米——这是直接测高度的方法望尘莫及的。

对照就在 图 35.4。同一块表面、同一个 50 μm 隆起,左图是 PMD 斜率图、右图是结构光在其高度噪声底(ch32 实测 33.8 μm)下看到的样子。结构光的高度噪底几乎与 50 μm 隆起同量级,隆起淹没在颗粒噪声里、勉强可辨;PMD 的斜率图上隆起与沟槽却醒目清晰。量化下来:同一隆起,PMD 斜率信噪比 87:1,结构光高度信噪比仅 1.5:1,相差约 59 倍

(a) PMD 斜率图
(b) 结构光高度(噪底 33.8 μm)
图 35.4: 同一表面:PMD 斜率(左)把 50 μm 隆起与划痕清晰呈现(SNR 87:1);结构光直接测高度(右半幅,叠加 33.8 μm 高度噪底)则把隆起淹没在颗粒噪声中(SNR 1.5:1),约 59× 的灵敏度差距。PMD 测斜率,因而放大高频形貌。

天下没有免费的灵敏度。PMD 对斜率(高频形貌)极敏感,代价是绝对高度靠积分、易漂(小节 35.3),对缓慢的大尺度起伏反而迟钝。结构光正相反。工程上常两者互补:结构光定大尺度面形,PMD 补微观高频缺陷。

35.5 镜面性的边界

PMD 的全部前提是镜面反射。表面一旦变粗糙,微面元把入射光散射开,镜面反射的条纹对比度就随之塌缩。例程用漫反射占比 \(\rho\) 扫描粗糙度,散射瓣对屏幕正弦图样做高斯卷积,有效对比度按 \(B_{\text{eff}}=(1-\rho)B\exp[-\tfrac12((2\pi/P)\cdot2L\,\sigma_\theta)^2]\) 衰减,相位噪声 \(\propto 1/B\) 随之爆炸:

\(\rho\) 对比度 \(B\) 相位 RMS (rad) 斜率 RMS (rad) \(h_{\min}\) (w=5mm, μm)
0.0 80.0 0.0255 \(1.626\times10^{-4}\) 0.203
0.3 47.7 0.0364 \(2.314\times10^{-4}\) 0.289
0.7 10.1 0.1449 \(9.222\times10^{-4}\) 1.153

\(\rho=0\)\(0.7\),对比度从 80 塌到 10,相位 RMS 涨了近 6 倍,最小可测高度从 0.20 μm 退化到 1.15 μm。图 35.5 的三幅条纹图把这一塌缩画得很直观:左幅条纹明锐、缺陷清晰,到右幅条纹已灰蒙蒙一片、信号几近埋没。这正是结构光那章调制度故事(小节 32.4)的镜像对偶——结构光要求表面足够漫反射、镜面区会因镜面高光饱和而失效;PMD 要求表面足够镜面、漫反射成分一多就对比塌缩。半镜面(semi-specular)表面对两者都是两难:太亮镜不动,太糙漫不灵,落在中间地带的表面往往两套方法都吃力。

图 35.5: 粗糙度扫描下的条纹对比塌缩(漫反射占比 \(\rho=0\) / 0.3 / 0.7,从左到右)。表面越粗糙,镜面反射的条纹对比度越低、相位噪声越大,缺陷信号逐渐被噪声淹没——结构光调制度故事的对偶。

35.6 SciVision 实现

整条 PMD 流水线复用了 ch32 的相位机器。如约定,SciSvPhaseMeasure::DecodePatterns 在 PMD 这一本职场景里仍惰性(返回 0、输出空图),例程用真实的 X+Y 双向条纹组再探一次、如实记录其失效,随后全部手写。关键的斜率提取与积分片段如下。

// 1. 四步相移包裹相位(x/y 各一套),减去平面镜参考相位 → 斜率场
double s = (double)im[3][i] - im[1][i];   // 2B*sin(phi)
double c = (double)im[0][i] - im[2][i];   // 2B*cos(phi)
phi[i]   = std::atan2(s, c);              // 包裹相位
// 解包裹后:Δφ = φ_obs - φ_ref,按 2 倍偏折律换算斜率(rad)
slope[i] = (uObs[i] - uRef[i]) * P_SCR / (TWO_PI * 2.0 * L_SCR);

// 2. 斜率两路径梯形积分 → 高度(与光度立体法向积分同型)
h1[i] = h1[i-1] + 0.5 * (sx[i] + sx[i-1]) * PX;   // 路径一:逐行积 sx
h2[i] = h2[i-W] + 0.5 * (sy[i] + sy[i-W]) * PX;   // 路径二:逐列积 sy
h[i]  = 0.5 * (h1[i] + h2[i]);                    // 两路径平均削噪

斜率换算的 P_SCR/(TWO_PI*2.0*L_SCR) 一项即 \(P/(2\pi\cdot2L)\),把偏折相位差翻译成斜率;积分步长 PX 是像素物理尺度。一个标定要点:PMD 的几何精度系于屏幕—相机—参考面三者的相对位姿——屏幕到镜面距离 \(L\)、屏幕像素的物理尺度、相机内参都需事先标定(呼应 章节 5),任一项偏差都会按偏折律线性传入斜率。生成本章全部图像的完整工程位于 code/deflectometry/

工业案例:手机盖板玻璃的微缺陷

抛光后的手机盖板玻璃要查的是亚微米级的微观凹凸:橘皮、抛光纹、浅划痕,高度起伏往往只有零点几微米。用结构光直接测高度,33 μm 量级的高度噪底把这些缺陷彻底淹没,根本无从判别;改用 PMD 测斜率,几何上的 2 倍偏折律加屏幕距离的放大,把亚微米的高频起伏放大成清晰可辨的斜率信号,缺陷一目了然。但盖板并非处处镜面:边缘倒角、丝印油墨区是漫反射或半镜面,条纹在那里对比塌缩、相位噪声爆炸,必须用模板单独划出、另作处理,不能与镜面区一锅煮。教训很直接:镜面或类镜面表面的微观形貌检测,PMD 的斜率灵敏度是结构光给不了的;但 PMD 的命门也在镜面性——非镜面区要先识别、再隔离。

35.7 小结

  • PMD 把镜面当镜子:让被测镜面反射屏幕条纹,从条纹相位偏移反推表面斜率——专治结构光、激光、双目都失效的镜面物体,是结构光的几何对偶。
  • 2 倍偏折律是一切的根源:表面倾斜 \(\alpha\) 使反射光偏转 \(2\alpha\)\(\varphi_{\text{obs}}\approx\varphi_{\text{screen}}(x+2L\,\partial h/\partial x)\)。PMD 测的是斜率而非高度,高度需对斜率场积分(与光度立体同构),代价是绝对高度易漂。
  • 测斜率所以极灵敏\(h_{\min}\approx\sigma_{\text{slope}}w/4\)\(w=5\) mm 时仅 0.205 μm。同一 50 μm 隆起,PMD 斜率 SNR 87:1 对结构光高度 SNR 1.5:1,约 59× 增益——PMD 放大高频形貌。
  • 镜面性是硬边界:表面变粗糙则条纹对比塌缩、相位噪声爆炸(\(\rho=0.7\)\(h_{\min}\) 退化 5×),这是结构光调制度故事的镜像;半镜面表面对两套方法都为难。
  • 复用相位机器、注意标定:相移与解包裹沿用 ch32(DecodePatterns 惰性、手写),精度系于屏幕—相机—参考面几何标定。

相位偏折术测量镜面自由曲面的开创性工作见 Knauer、Kaminski 与 Häusler 的论文 (Knauer, Kaminski, 和 Häusler 2004);该领域的原理、标定与应用进展由 Huang 等人做了全面综述 (Huang 等 2018)。偏折术与镜面表面三维测量的工程论述另可参阅 Steger 等人的著作 (Steger, Ulrich, 和 Wiedemann 2018)