35 相位偏折术
把抛光的手机盖板玻璃、镜面不锈钢面板或者一块平面镜放到产线上,前几章建立的三维成像手段会集体失灵:结构光(章节 32)投出的条纹不再漫反射回相机,而是被镜面径直反射到别处;激光三角(章节 30)找不到稳定的散射光带;双目立体也无从匹配——镜面上看到的根本不是表面纹理,而是环境的倒影。光不在镜面上漫反射,所有依赖”看见表面被照亮”的方法都没了立足点。
然而镜面恰恰能做一件别的表面做不到的事:当一面镜子(mirror)用。如果让镜面去反射一块显示着正弦条纹的屏幕,相机透过镜面”照镜子”看到的,就是被表面起伏扭曲过的条纹。表面哪里稍微倾斜一点,反射到相机里的条纹就在那里偏移一点——条纹的扭曲量直接编码了表面的斜率(slope)。这就是相位偏折术(phase measuring deflectometry, PMD):不去照亮表面测高度,而是把表面当反射镜,从条纹的相位偏移反推斜率。图 35.1 是被测镜面反射屏幕条纹得到的原始图像,浅浅的隆起与划痕状沟槽已经在规则条纹上留下了可见的局部畸变。
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 向有斜率,呈现为一条清晰的竖线。
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.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 倍。
天下没有免费的灵敏度。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.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)。





