☰
投影仪-相机系统标定:从相位映射到高精度三维重建
2026/9/30 1:27:22 网站建设 项目流程

投影仪-相机系统标定这个话题,我最早接触是在做结构光三维重建的时候。当时搭了一套DLP投影仪加工业相机的实验台,想着投几幅编码图案就能把点云重建出来,结果第一步就卡住了:重建出来的平面变成弧形,接缝处错位严重,误差大到根本没法用。问题就出在投影仪没有精确标定,投影仪和相机之间的位姿关系、投影仪内参全部是拍脑袋估计的。后来我把经典论文过了一遍,老老实实把投影仪-相机系统标定跑完整之后,重建误差才从毫米级降到了亚毫米级。这也是我写这篇笔记的初衷:把方法主线和关键细节记录下来,给同样在搞结构光三维测量、三维扫描仪或者投影增强现实的朋友一条可以照着走的路。

1. 为什么投影仪-相机标定比单纯相机标定更难

1.1 三角测量是结构光三维重建的底层逻辑

一个完整的结构光系统通常由一台投影仪和一台相机构成。投影仪向被测物表面投射编码图案,相机同步拍摄被调制的图案,通过相位解算得到每个相机像素对应的投影仪像素坐标,再依据标定得到的相机-投影仪相对位姿,用三角测量恢复三维坐标。

这个流程听起来简单,但对三维坐标精度影响最大的,是光路几何模型是否精确。三角测量本质上是一个“两个已知位置的光学中心对同一物理点进行空间交会”的过程。如果把相机的内参标定想象成给一只眼睛验光,那么投影仪-相机系统标定就是同时给两只眼睛验光,还要知道两只眼睛相对脑袋的安装位置和朝向。如果投影仪的光心位置、等效焦距、畸变参数都没有精确标定,相当于交会的一条光线位置错了,重建出来的点自然偏移。

很多人做相机标定已经很熟练了,张正友棋盘格法算得上事实标准,OpenCV和MATLAB里都是一行命令的事。投影仪的情况就完全不一样了。它不是接收光的传感器而是一个发射光的设备,没法直接拍摄标定板。这就是整个标定问题的核心难点。

1.2 投影仪作为“逆向相机”的数学模型

先补一点数学模型,这个很重要,后面所有标定流程都建立在这套东西上。

相机针孔模型的投影关系可以写成:

$$ s \begin{bmatrix} u \ v \ 1 \end{bmatrix} = \mathbf{A} \left[ \mathbf{R} ; \mathbf{t} \right] \begin{bmatrix} X \ Y \ Z \ 1 \end{bmatrix} $$

其中 $\mathbf{A}$ 是内参矩阵,包含等效焦距 $f_x, f_y$、主点 $c_x, c_y$,$\mathbf{R}$ 和 $\mathbf{t}$ 是相机相对世界坐标系的旋转和平移。这还没完,实际镜头还有径向畸变和切向畸变,一般用二阶或三阶多项式描述:

$$ x_{dist} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2p_1 xy + p_2(r^2 + 2x^2) $$

那投影仪呢?投影仪和相机在光学上是互逆的:相机把外部场景光线汇聚到传感器,投影仪把内部光源发出的光线经过DMD或LCD调制后投射到外部场景。从几何角度讲,投影仪就是一个“逆向相机”——入射变成出射,图像平面从传感器变成DMD微镜阵列。

这句话是整个标定方法的灵魂。因为既然几何模型互逆,就可以把投影仪DMD的每个像素当作相机传感器的“像素”,用相机标定的全套数学框架来解投影仪的内参、畸变和外参。这也是投影仪-相机系统标定的底层思路:把投影仪“降维”成一台相机,剩下的事就交给成熟的相机标定理论。

1.3 核心矛盾:投影仪没有“感知”能力

不过这个思路有一个绕不过去的矛盾。相机可以拍摄标定板,直接得到“图像坐标”和“世界坐标”的对应关系。投影仪不具备感知能力,它只能往外投射图案,永远不知道光束照到了哪里。

为了建立投影仪像素和外部空间点的对应关系,必须在投影图案中嵌入可解码的空间信息。这就是相位映射方法登场的时刻。核心思想是:投影仪投射一系列特殊设计的光栅条纹,相机拍摄这些条纹,经过相位解算后,每个相机像素都能算出一个对应的投影仪像素坐标。等于给投影仪装上了一双“眼睛”,让它通过相机间接地“看见”外部场景。

这套技术路线最早由张松和黄博文在2006年提出,论文是Zhang S., Huang P.S., Novel method for structured light system calibration, Optical Engineering, 2006。后来Moreno和Taubin在2012年的Simple, accurate, and robust projector-camera calibration中做了更系统的归纳和完善。主流方案基本都沿着这两篇论文的思路走。

2. 相位映射:让投影仪坐标变得可观测

2.1 相移条纹的数学原理

相位映射最常用的载波是正弦条纹。投影仪依次投射多幅相位差恒定的正弦光栅,相机同步拍摄。以经典的四步相移为例,投射的四幅条纹强度可以表示为:

$$ I_1(x, y) = I'(x, y) + I''(x, y)\cos[\phi(x, y)] $$ $$ I_2(x, y) = I'(x, y) + I''(x, y)\cos\left[\phi(x, y) + \frac{\pi}{2}\right] $$ $$ I_3(x, y) = I'(x, y) + I''(x, y)\cos[\phi(x, y) + \pi] $$ $$ I_4(x, y) = I'(x, y) + I''(x, y)\cos\left[\phi(x, y) + \frac{3\pi}{2}\right] $$

其中 $I'(x,y)$ 是背景光强,$I''(x,y)$ 是条纹调制幅度,$\phi(x,y)$ 是待求相位。相机拍摄这四幅图后,用反正切运算恢复相位:

$$ \phi(x, y) = \arctan\left(\frac{I_4 - I_2}{I_1 - I_3}\right) $$

四步相移的好处是能同时消除背景光强和线性响应误差,对静态场景有比较好的鲁棒性。三步相移也可以,只是对噪声更敏感一些。实际标定项目中我常用四步相移,因为多投一幅图的时间成本几乎可以忽略,但相位精度更稳。

2.2 从包裹相位到绝对相位:解包裹

这里有一个关键坑:反正切运算得到的是包裹相位,取值范围被限制在 $(-\pi, \pi]$,看起来像锯齿波,没法直接用来做像素映射。必须做相位解包裹,把锯齿波展开成连续的绝对相位。

相位解包裹分为空间解包裹和时间解包裹两大流派。空间解包裹用相邻像素相位差判断跳变并累加 $2\pi$,速度快但遇到遮挡或噪声容易“拉线”。时间解包裹则是投射多组不同频率的条纹,通过多频外差或格雷码加相移的方式获得每个像素独立的绝对相位值,不依赖邻域,稳健性高得多。

具体有多频外差法、分层相移法、格雷码加相移法等。我用得比较多的是格雷码加相移混合方案:投射一组格雷码做二进制粗定位,再用相移条纹做精细测量。两套信息结合,既有全局唯一性,又有亚像素精度,整套流程跑下来相位质量很稳定。

2.3 如何把相位换算成投影仪像素坐标

解包裹后得到的是绝对相位,接下来把它换算成投影仪像素坐标。这一步原理很直接。

如果投射的是竖直条纹(沿投影仪列方向变化),那么相位 $\phi_v(u_p)$ 与投影仪像素列坐标 $u_p$ 是线性关系:

$$ u_p = \frac{\phi_v - \phi_{v,min}}{\phi_{v,max} - \phi_{v,min}} \times W $$

其中 $W$ 是投影仪分辨率宽度,$\phi_{v,min}$ 和 $\phi_{v,max}$ 分别是最小和最大相位值。同理,投射水平条纹可以得到投影仪像素行坐标 $v_p$。

这样,对相机图像中的任意一个像素 $(u_c, v_c)$,只要它能看到投影条纹,就能通过相位值解算出它对应的投影仪像素坐标 $(u_p, v_p)$。这就是相位映射的完整链路。这里的坐标是连续的浮点数而不是整数像素,精度远高于传统特征点匹配的整数级精度,这也是为什么相位映射方法能做到高精度标定的根本原因。

3. 完整标定流程:把投影仪当作相机来标定

3.1 数据采集顺序与操作细节

整个标定流程的核心思路是:对每个标定板位姿,同时采集相机图像和相位图像,让投影仪通过相位映射“看到”标定板上的特征点,然后套用张正友标定框架。具体采集顺序是这样:

  1. 固定标定板位姿,关闭投影仪或投射纯白图,相机拍摄一张标定板纹理图,用于提取特征点(角点或圆心)。
  2. 投影仪投射竖直方向的多频相移条纹序列,相机同步采集。
  3. 投影仪投射水平方向的多频相移条纹序列,相机同步采集。
  4. 分别处理竖直和水平条纹序列,得到相机每个像素对应的投影仪列坐标 $u_p$ 和行坐标 $v_p$。
  5. 换一个标定板位姿,重复第1到第4步,建议至少采集10到15个位姿。

这里有个重要操作细节:第1步拍摄标定板纹理图时,一定要保证标定板区域曝光正常、特征清晰。因为后续特征点的世界坐标完全依赖这张图。我习惯在采集纹理图时略微降低曝光,避免高光饱和导致特征点提取偏移。

3.2 特征点对应关系的建立

采集完成后,接下来就是把所有数据对齐。在纹理图上检测出标定板特征点的像素坐标 $(u_c, v_c)$,比如棋盘格角点或圆点圆心。然后在这些像素位置读取前面计算的相位图,得到对应的投影仪坐标 $(u_p, v_p)$。

这里不需要额外识别投影仪图像里的特征点,因为相位图已经给出了全像素的映射关系。直接从特征点位置取相位值即可,如果感觉噪声大,可以取特征点周围3x3邻域的相位均值。

与此同时,标定板上每个特征点在标定板坐标系下的世界坐标 $(X, Y, 0)$ 是已知的,由标定板的设计尺寸决定。于是对于投影仪而言,我们就有了一组完整的对应关系:

  • 投影仪像素坐标 $(u_p, v_p)$
  • 该像素对应的世界坐标点 $(X, Y, 0)$

这不正是相机标定所需要的输入数据格式吗?把投影仪当成相机,用这组对应关系代入张正友标定法,就能解出投影仪的内参矩阵和畸变系数。相机外参和投影仪外参也都在这个过程中显式或隐式地求出来了。

3.3 内外参求解与双目标定联合优化

在单目标定阶段,每个位姿下都能解出一组外参(即标定板平面相对于相机或投影仪的位姿)。把所有位姿的外参放到一起,就能构造出相机坐标系和投影仪坐标系之间的转换关系。最常用的做法是:

设第 $i$ 个位姿下,相机相对标定板的外参为 $\mathbf{R}{c,i}, \mathbf{t}{c,i}$,投影仪相对标定板的外参为 $\mathbf{R}{p,i}, \mathbf{t}{p,i}$。由于同一个标定板平面同时被相机和投影仪“观测”,可以通过下式求出两个坐标系间的相对位姿:

$$ \mathbf{R}{cp} = \mathbf{R}{c,i} \mathbf{R}{p,i}^{-1} $$ $$ \mathbf{t}{cp} = \mathbf{t}{c,i} - \mathbf{R}{cp} \mathbf{t}_{p,i} $$

理论上一个位姿就够了,实际工程中会使用所有位姿计算出多组 $\mathbf{R}{cp}, \mathbf{t}{cp}$,再做平均或采用最小二乘优化。更精细的做法是把相机内参、投影仪内参、相对位姿全部放在一个整体成本函数里做全局优化,最小化所有对应点的重投影误差,本质是个sparse bundle adjustment问题。这一步能进一步压掉单目分步标定累积的误差。

4. 标定板选型与采集规范

4.1 棋盘格、圆点板还是编码靶标

标定板的选择直接影响特征点提取精度和鲁棒性,这个问题经常被初学者忽略。

棋盘格最常用,因为角点检测算法成熟,OpenCV里findChessboardCorners一个函数就搞定了,做亚像素细化也很方便。但棋盘格在投影条纹照射下有一个先天劣势:白色和黑色方块反射率差异极大,投射到标定板上的条纹在黑白格交界处会对相机成像产生边缘效应,影响相位精度。而且棋盘格角点在图像模糊或光照不均时容易出现提取偏移。

圆点板或者叫圆阵列板,每个特征点是一个圆斑。圆的亚像素圆心提取稳定性比棋盘格角点好很多,尤其是在图像有一定模糊的情况下。另外圆点板对投影条纹的反射相对均匀,相位映射的精度也更稳。需要注意透视投影下圆的投影并不严格是椭圆中心,会引入微小偏差,但对大多数标定场景误差可忽略。

编码靶标则是给每个特征点附加唯一编码,主要用于解决对称歧义问题。如果标定板可能在相机视场中被部分遮挡,或者需要全自动识别而不想人工指定特征点顺序,编码靶标是更好的选择。缺点是制作成本高,而且编码点图案通常比较大,单块板上的特征点密度不如棋盘格。

我的建议是:投影仪-相机标定首选圆点板,次选棋盘格。如果做高精度标定,可以考虑定制的陶瓷或玻璃基材圆点板。

4.2 尺寸、材质与位姿数量怎么定

标定板的物理尺寸是一个需要权衡的参数。标定板太小,特征点覆盖不到投影仪视场的边缘,畸变估计不准确。标定板太大,一方面价格高,另一方面在近距离投影时可能超出相机视场。经验值是标定板尺寸覆盖相机视场的二分之一到三分之二左右,确保所有位姿下特征点遍布整个投影区域。

材质方面,平整度比材质本身更重要。普通打印纸贴在玻璃板上会起皱,亚克力板受热会变形,最好用碳纤维板、陶瓷板或者经过研磨的金属板。我认识一个做三维扫描仪的朋友,早期用写真板打印标定板,标定结果每次都不一样,换用陶瓷板之后重投影误差立刻降低了一半。标定板的厚度也要关注,最好是平整且背面有支撑结构,避免悬空放置时产生弯曲。

位姿数量方面,建议至少采集10到15个不同位姿。位姿变换不要太单调,包含绕三个轴的旋转,覆盖图像中心和四个角。特别要注意倾斜角度过大时,圆点检测容易失败,倾斜角度控制在60度以内比较稳妥。采集时让标定板在相机和投影仪的共同视场内缓慢移动,每移动一个位置拍一组,整个过程大概二十分钟就能完成。

5. 误差分析与精度验证

5.1 重投影误差计算

标定完成后,第一件事就是算重投影误差。把标定板上的世界坐标点分别用相机模型和投影仪模型重投影回各自的像素坐标系,计算与实际观测坐标的欧氏距离。RMS误差公式如下:

$$ \text{RMS} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} \left[ (u_i - \hat{u}_i)^2 + (v_i - \hat{v}_i)^2 \right]} $$

相机端的重投影误差通常能到0.1像素以内,投影仪端受到相位噪声影响,一般在0.2到0.5像素。如果投影仪端重投影误差超过1个像素,说明某个环节出了问题,需要回头检查相位质量或特征点提取。

5.2 三维重建误差验证

重投影误差只能反映标定数学模型的内部一致性,真正有说服力的是三维重建误差。标定完成后,用系统重建一个已知几何形状的标准件,比如一个标准平面平晶或者量块,分析重建点云的平面度误差或尺寸误差。

平面度验证是最常用的方法:投影并重建一块标准平面,对重建点云拟合平面,计算每个点到拟合平面的距离。RMS值在0.1毫米以内说明系统精度非常好,0.1到0.3毫米属于正常水平,超过0.5毫米就需要回头排查标定问题了。注意这里的误差是绝对尺寸相关的,和系统的工作距离相关,评估时要放在同一个尺度下比较。

5.3 系统误差来源与优先级

根据我的经验,投影仪-相机系统标定中最常见的误差来源按影响力排序大概是这样的:

误差来源典型量级影响范围解决方法
相位误差(Gamma非线性、环境光)0.1-1像素全局Gamma预校正、暗室环境
标定板不平整/特征点打印精度0.02-0.5像素局部换刚性标定板
相机-投影仪同步偏差0.1-2像素动态场景严重硬件触发同步
镜头畸变模型阶数不足0.05-0.3像素视场边缘增大畸变模型阶数
特征点提取误差0.01-0.1像素局部亚像素细化、多帧平均

相位误差排在第一位,这个结论很多人不理解。投影仪的亮度响应通常不是线性的,投射理想正弦条纹经过投影仪输出后变成了畸变的正弦,导致解出的相位出现周期性谐波误差。如果直接拿这种相位做标定,重投影误差会呈现明显的波纹状分布。这一点我会在下一节展开讲。

6. 实测中踩过的三个坑

6.1 曝光与环境光是第一个坑

第一次做标定时,我在普通日光灯实验里直接拍摄投影条纹,结果标定出来的系统重建效果很差。后来发现是环境光干扰太强,相机曝光时间也过长,条纹图案的高光区域严重过曝,相位信息直接丢失。

解决方案分三步:环境光尽量压暗,关闭正对实验台的光源,拉上遮光帘;第二步调整曝光时间,让投影仪投射白色和黑色两帧时相机的灰度响应分别落在传感器动态范围的30%到80%之间;第三步避免标定板表面出现镜面反射,入射光和反射光的角度需要反复调整。

曝光时间和增益需要严格控制,尤其是工业相机,避免自动曝光模式带来的帧间亮度波动,否则会直接污染相位解算。

6.2 投影仪Gamma非线性引入相位波纹

这是标定精度上不去的最常见的隐性原因,也是我当时调了快两周才发现的问题。

投影仪的亮度-灰度响应曲线并非直线,而是带Gamma校正的非线性曲线。投射的理想正弦条纹经过投影仪输出后,变成带有高次谐波的“非正弦”条纹,这会直接导致解包裹后的相位出现周期性误差。误差频率是条纹频率的整数倍,反映在重建点云上就是沿条纹方向的波浪形起伏。

解决办法是投影前做Gamma预校正,或者更严谨地说做辐射标定。具体做法是投射一系列已知灰度的灰度块,用相机拍摄后测量实际光强,拟合灰度到光强的传递函数,然后对要投射的条纹图像做逆变换。这个映射一般用一个指数函数拟合就行,但要做到高精度可以查表处理。做完Gamma校正后,我的重投影误差从0.8像素直接降到了0.25像素,效果立竿见影。

6.3 相机-投影仪不同步导致条纹错位

最后一个坑是关于同步的。投影仪刷新率和相机曝光频率如果不做硬件同步,两个设备各自自由运行,采集到的条纹图案会出现整体错位,特别是使用高速工业相机时,这种异步效应会造成相位跳变。

可靠的解法是硬件触发同步:相机采用外部触发模式,由投影仪的帧同步信号或外部信号发生器驱动曝光。DLP投影仪一般提供帧同步输出接口,可以接到工业相机的触发输入。如果投影仪没有同步输出,也可以反过来:相机输出触发信号控制投影仪切换到下一帧图案,再拍摄下一张。总之,必须让“投射当前帧”和“相机曝光当前帧”严格绑定在同一时间片上。

这里再分享一个细节:最好不要用彩色条纹,DLP投影仪用RGB色轮分色时,不同颜色通道的切换时间会导致严重的颜色串扰。统一用单色条纹、关闭投影仪图像后处理功能,能减少很多不必要的干扰。

最后说点个人体会

投影仪-相机系统标定这件事,搞清楚原理之后执行起来并不复杂,但每一个细节都会实打实地反映在最终精度上。相位映射作为整个标定方法的技术主线,相当于用软件的手段补上了投影仪“看不见”的短板,再套用成熟的相机标定理论完成求解,这是一种非常巧妙的问题转化思路。物理上不可观测的量,借助编码和解码变成了可观测,这个思路本身就是结构光领域里最值得反复体会的部分。

我在做完这套标定流程后的一个习惯是,顺手把投影仪的畸变系数打印出来看一眼。大多数情况下投影仪的径向畸变比相机还明显,这也提醒了所有刚接触这个领域的人:不要贪图省事忽略投影仪内参,也不要以为投影仪和相机参数可以互相借用。把每一步做到位,把每一个误差来源都控制住,最终的三维重建精度自然会给你回报。希望这篇笔记能帮你少走几个我走过的弯路,如果标定过程中碰到什么奇怪的现象,欢迎回来一起讨论。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询