第1章:编码策略分类——空间编码、时间编码、直接编码的优缺点对比

做结构光这么多年,我经常被问到同一个问题:「到底该选哪种编码策略?」

说实话,没有标准答案。每种策略都有自己的脾气。你想想看,就像选工具一样——锤子不能当螺丝刀用,对吧?

今天我就把三种主流编码策略掰开揉碎了讲清楚。空间编码、时间编码、直接编码,它们各自擅长什么,又有什么坑。这些都是我踩过的坑,希望能帮你少走弯路。

1.1 三种编码策略的核心思想

先看一张图,帮你快速建立整体认知:

结构光编码策略分类 空间编码 时间编码 直接编码 单帧图案 邻域信息解码 适合动态场景 精度一般 鲁棒性中等 多帧时序图案 时间轴解码 适合静态场景 精度高 鲁棒性好 灰度/颜色直接映射 像素级解码 适合静态场景 精度极高 鲁棒性差 从左到右:精度递增,鲁棒性递减,速度递减

这张图是我自己画的,把三种策略的核心特征都标出来了。你看,空间编码在左边,时间编码在中间,直接编码在右边。它们就像三个性格迥异的兄弟——各有各的脾气。

1.2 空间编码——单帧搞定,但精度有限

空间编码,说白了就是只投一帧图案,然后根据每个像素周围邻居的信息来解码。

我最早接触结构光时,用的就是空间编码。当时项目要求测一个快速运动的机械臂,时间编码根本来不及。空间编码就成了唯一选择。

优点

  • 速度快:单帧搞定,适合动态场景。我做过一个抓取项目,物体在传送带上跑,空间编码是唯一能用的方案。
  • 硬件要求低:普通相机+投影仪就能跑,不需要高速同步。
  • 实现简单:De Bruijn序列、M阵列,这些经典方法代码量不大。

缺点

  • 精度一般:受限于邻域信息,解码误差通常在几个像素级别。
  • 鲁棒性差:物体边缘、遮挡区域容易解码失败。我踩过这个坑——有一次测一个带孔的零件,孔边缘全乱了。
  • 分辨率受限:图案本身占用了部分分辨率,实际有效分辨率会打折扣。
我的经验:空间编码适合做粗定位。比如先快速找到物体的大致位置,再用其他方法精测。别指望它一次搞定高精度。

1.3 时间编码——精度高,但慢

时间编码,就是投多帧图案,每帧编码不同的信息,最后组合起来解码。

格雷码、相移法、二进制编码,这些都是时间编码的经典代表。我个人最喜欢相移法,精度高,鲁棒性好。

优点

  • 精度高:多帧信息叠加,解码误差可以做到亚像素级别。我做过一个精密测量项目,用四步相移法,精度达到了0.01mm。
  • 鲁棒性好:每帧独立编码,抗干扰能力强。环境光变化、表面反射不均匀,影响都不大。
  • 解码简单:每帧的编码是独立的,解码逻辑清晰,不容易出错。

缺点

  • 速度慢:需要多帧,不适合动态场景。你想想看,投10帧图案,物体早就动到别处去了。
  • 硬件要求高:需要高速投影仪和相机同步。我见过有人用普通投影仪做时间编码,结果帧率跟不上,数据全废了。
  • 对运动敏感:物体一动,前后帧对不上,解码就乱了。这是时间编码最大的痛点。
注意:时间编码不适合测量快速运动的物体。我曾经试过用格雷码测一个旋转的齿轮,结果解码出来的点云全是扭曲的。后来改用空间编码才搞定。

1.4 直接编码——精度天花板,但娇气

直接编码,就是用灰度值或颜色值直接表示深度信息。每个像素的灰度值直接对应一个深度值。

这种方法精度理论上可以做到最高,但实际用起来问题不少。我做过一次尝试,用256级灰度直接编码深度,结果被表面反射率坑惨了。

优点

  • 精度极高:理论上可以达到像素级甚至更高。如果环境理想,直接编码是精度之王。
  • 单帧即可:一帧图案就能解码,速度上比时间编码快。
  • 实现简单:映射关系清晰,解码逻辑简单。

缺点

  • 鲁棒性极差:对表面反射率、环境光、相机噪声都极其敏感。我做过一个实验,同样的图案,换个颜色的物体,解码结果就完全不一样了。
  • 动态范围有限:灰度级有限,深度范围受限。256级灰度,能表示的深度范围很有限。
  • 校准复杂:需要精确的灰度-深度映射关系,校准过程很麻烦。
一句话总结:直接编码是「实验室里的王者,工业现场的青铜」。如果你在受控环境下做高精度测量,可以试试。但别指望它在复杂场景下表现好。

1.5 三种策略的对比表格

对比维度 空间编码 时间编码 直接编码
帧数需求 1帧 多帧(3~20帧) 1帧
精度 中等(像素级) 高(亚像素级) 极高(像素级)
鲁棒性 中等
动态场景 适合 不适合 勉强适合
硬件要求 中等
实现难度 中等 中等
典型应用 动态抓取、在线检测 精密测量、逆向工程 实验室研究、特殊场景

1.6 我的选择建议

说了这么多,到底怎么选?我个人的经验是:

  • 测动态物体:选空间编码。别犹豫,时间编码和直接编码都搞不定。
  • 测静态物体,要求高精度:选时间编码。相移法+格雷码组合,效果最好。
  • 实验室环境,极致精度:可以试试直接编码。但要做好心理准备,调试过程会很痛苦。
一个小技巧:实际项目中,我经常把空间编码和时间编码结合起来用。先用空间编码快速定位,再用时间编码精测。这样既保证了速度,又保证了精度。

好了,三种编码策略的对比就讲到这里。每种策略都有自己的适用场景,没有绝对的好坏。关键是你得清楚自己的需求是什么。


专注资料整理