1. 从几张条纹图到三维模型:一个生动的开场
想象一下,你面前放着一个精致的陶瓷花瓶,你想在电脑里得到一个和它一模一样的数字模型,该怎么办?用尺子量?用相机拍?这些传统方法要么太慢,要么精度不够。现在,有一种技术,只需要像放电影一样,把几幅黑白相间的条纹图案投影到花瓶上,再用相机拍下来,就能通过计算,精准地还原出花瓶表面每一个点的三维坐标。这就是结构光三维重建的魅力,而今天我们要聊的,就是其中最核心、也最有趣的一步:如何从这些看似简单的条纹图像里,“解算”出物体表面的高度信息。
这个过程,专业上叫做“相位测量轮廓术”。听起来很高深,但其实原理很直观。你可以把投影的条纹想象成一层均匀的“光尺子”,当它照在平整的墙上时,相机看到的条纹是均匀等距的。但当它照在凹凸不平的花瓶上时,花瓶的表面会把条纹“挤”得变形——凸起的地方条纹被压缩,凹陷的地方条纹被拉伸。相机拍下的,就是这组变形的条纹。我们的任务,就是从这组变形条纹的“扭曲”程度,反推出花瓶表面的“凹凸”情况。
这个“扭曲程度”,在数学上用一个叫做“相位”的值来描述。我们的整个旅程,目标就是从光栅图像中计算出每个像素点准确、连续的相位值,最终得到三维点云。我会用MATLAB作为工具,带你走完从读取图片到生成相位图的完整流程。无论你是刚开始接触视觉测量的学生,还是想在实际项目中应用该技术的工程师,跟着这篇手把手的指南,你都能搭建起一个可运行、可修改的实用代码框架。
2. 理解核心:为什么需要“相位展开”?
在进入代码之前,我们必须搞清楚一个关键概念:相位主值和相位展开。这是整个流程的“任督二脉”,通了,后面就一马平川。
2.1 相位主值:被困在0到2π的“囚徒”
当我们用标准的四步相移法计算相位时,得到的并不是一个从图像左到右平滑增长的真实相位,而是一个被“包裹”在0到2π(或-π到π)之间的值,我们称之为相位主值。你可以把它想象成一个量角器,角度从0度增加到359度后,下一秒又跳回0度。在条纹图像中,每一个明暗周期(一个完整条纹)的相位变化,都对应着这样一个0到2π的循环。
我用MATLAB生成了一个模拟的相位主值图,看起来就像层层叠叠的等高线,每一层颜色从黑到白循环一次,代表一个2π的周期。问题来了:在第二个条纹周期里,某个点的相位主值可能是0.5π,在第五个周期里,同样可能有一个点的相位主值也是0.5π。计算机单看这个0.5π,根本无法判断它属于第几个周期,这就导致了严重的周期歧义。如果不解决这个问题,我们计算出的深度信息就会在周期边界处发生跳变,重建出的物体表面会是断裂的、一层一层的,而不是连续光滑的。
2.2 多频外差法:给相位贴上唯一的“身份证”
那么,如何给每个像素点的相位一个全局唯一的、连续递增的编号呢?这就是“相位展开”要干的事。多频外差法是其中非常经典和稳健的一种方法。它的思想很巧妙:用不同精度的“尺子”组合测量,来唯一确定位置。
设想一下,你有一把只有10厘米长的短尺(高频,周期短)和一把1米长的长尺(低频,周期长)。只用短尺量一个超过10厘米的距离,你需要数它量了多少次,容易数错。但如果同时用长尺先量出大概范围(比如在0.5米到0.6米之间),再用短尺去精确测量这个范围内的细节,你就能唯一、精确地确定距离。
在相位解算中:
- 高频尺子:对应高频条纹(比如周期为1/70的图像宽度),它精度高(相位变化敏感),但量程短(一个周期就重复)。
- 低频尺子:对应通过外差合成的低频条纹(比如周期为1的图像宽度),它精度低,但量程覆盖整个图像。
多频外差法通常使用三个频率(例如70,64,59)。先分别计算出它们各自的相位主值(三把不同精度的短尺)。然后通过两两“外差”(相减),合成出两把更“长”的尺子(例如周期为1/6和1/5)。最后,再用这两把长尺合成一把覆盖整个图


259

被折叠的 条评论
为什么被折叠?



