1. 精度之源:结构光测量原理与误差模型
大家好,我是老张。做结构光测量这些年,我最大的感触是——精度不是调出来的,是设计出来的。很多人一上来就调参数、换算法,结果折腾半天,精度还是上不去。为什么?因为没搞懂误差从哪来的。
这一章,我们就从最基础的三角测量法讲起。我会把系统误差、随机误差的根儿给你挖出来,再搭一个完整的误差传递模型。说白了,就是帮你把「精度」这件事的底牌看透。
1.1 三角测量法:结构光的「骨架」
结构光测量,本质上就是个三角形。投影仪、相机、被测物体,三个点构成一个三角形。投影仪打出结构光图案,相机拍下变形后的图案,然后通过三角关系算出深度。
公式很简单:
Z = (B * f) / (d + Δd)
其中:
- Z:被测点的深度值
- B:投影仪与相机的基线距离
- f:相机的焦距
- d:理想情况下的视差
- Δd:实际测量中的视差偏差
嗯,这里要注意——Δd 是万恶之源。我当年做第一个项目时,就是没重视这个 Δd,结果测出来的平面像波浪一样。后来才明白,Δd 里藏着系统误差和随机误差。
1.2 系统误差:那些「稳定」的偏差
系统误差,说白了就是「每次都偏同一个方向」。它不会忽大忽小,但会稳定地让你测不准。
常见的系统误差来源有:
- 标定误差:相机内参、外参标定不准。我遇到过用棋盘格标定,结果棋盘格本身不平整,导致标定结果偏了 0.1 个像素。你想想看,0.1 个像素在远距离测量时,深度误差能放大到毫米级。
- 镜头畸变:尤其是广角镜头,边缘畸变很严重。不校正的话,边缘区域的测量值会系统性偏大或偏小。
- 投影仪非线性:投影仪的亮度响应不是线性的。这会导致结构光条纹的相位计算出现系统性偏移。
- 温度漂移:设备发热后,镜头和结构都会微变形。我有个项目在夏天做,上午标定好的参数,下午就偏了。
核心观点:系统误差可以建模,建模后就能补偿。这是精度提升的第一道门槛。
1.3 随机误差:那些「捉摸不定」的噪声
随机误差就麻烦多了。它没有规律,每次测量都不一样。来源包括:
- 传感器噪声:CMOS 传感器的暗电流、读出噪声。说白了就是电子在乱跑。
- 光照变化:环境光干扰、投影仪闪烁。我做过一个户外项目,阳光一照,结构光图案都快看不清了。
- 物体表面特性:高反光表面会形成镜面反射,低反射表面信号太弱。这两种情况都会让相位计算不稳定。
- 量化误差:相机是 8 位还是 12 位?位数越低,量化步长越大,随机误差也越大。
随机误差没法完全消除,但可以通过多次测量取平均来降低。不过要注意——平均只能降低随机误差,对系统误差没用。
1.4 误差传递模型:把「精度」算清楚
现在我们把系统误差和随机误差放到一起,搭一个完整的误差传递模型。
假设深度 Z 的测量误差为 σZ,它由以下分量组成:
σ_Z² = (∂Z/∂B)² * σ_B² + (∂Z/∂f)² * σ_f² + (∂Z/∂d)² * σ_d²
其中:
- σ_B:基线距离的误差(系统误差为主)
- σ_f:焦距的误差(系统误差为主)
- σ_d:视差测量的误差(随机误差为主)
这个公式告诉我们三件事:
- 基线越长,深度误差越小。但基线太长会导致遮挡问题,这是个 trade-off。
- 焦距越大,深度误差越小。但大焦距意味着视野小,适合测小物体。
- 视差误差是核心。它受标定、噪声、表面特性等多重因素影响,是误差传递模型中的「放大器」。
个人经验:我习惯在做项目前,先用这个模型算一遍理论精度。如果理论精度都不达标,那后面再怎么调也没用。算完之后,再针对最大的误差项去优化。
1.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作后续学习的「地图」。
1.6 避坑指南:我踩过的三个坑
最后,分享几个我亲身踩过的坑。希望能帮你省点时间。
坑一:标定板不平
我曾经用亚克力板打印棋盘格,结果板子本身有 0.2mm 的弯曲。标定出来的内参偏了 0.3 个像素。后来换了陶瓷标定板,问题才解决。
坑二:忽略温度影响
有个项目在车间做,设备开机半小时后,投影仪和相机都发热了。标定参数漂移,测量精度从 0.1mm 掉到 0.3mm。后来我养成了「热机后再标定」的习惯。
坑三:盲目相信理论精度
理论模型算出来精度是 0.05mm,实际做出来只有 0.2mm。为什么?因为模型没考虑物体表面的反射特性。后来我在模型里加了表面反射系数项,才把理论值和实测值对上。
好了,这一章就到这里。精度提升的第一步,是把误差的根儿搞清楚。下一章,我们会聊标定精度的提升方法——那才是真正动手干活的地方。