格雷码 + 相位移(Phase Shift)融合

一、为什么要融合?

先看两个方法的本质:

格雷码(Gray Code)

优点:稳定、不易误码

缺点:只能整数精度(像素级)

输出:

相位移(Phase Shift)

优点:亚像素精度(0.01 pixel)

缺点:周期性 → 会"跳变"

输出:相位不知道属于哪个周期(2π歧义)

二、核心思想(关键)

格雷码 → 确定周期编号

相位 → 确定周期内位置

工业流程

1 投影 Gray Code

2 投影 Phase Shift(3/4/5步相移)

方法 优点
3步
4步 抗噪好
5步 精度更高

3 相机采集

4 Gray 解码 → k

5 Phase 计算 → φ

6 相位展开 → Φ = 2πk + φ

7 三角测量 → 3D

三、相位移数学原理

以 **三步相移(3-step)**为例:

投影:

解相位

这是 包裹相位(wrapped phase)

相位展开

问题:

φ 是周期性的

例如:

真实: 7π

测量: π

用 Gray Code 解:

格雷码得到:

k = 周期编号

最终:

得到:

绝对相位(Absolute Phase)

四、空间坐标恢复

投影仪列坐标:

然后:

相机点 ↔ 投影仪点

做:

三角测量(Triangulation)

得到: XYZ

精度分析

工业优化

多步相移(推荐)

方法 优点
3步
4步 抗噪好
5步 精度更高

正反投影

pattern + inverse 提升鲁棒性

相位滤波

Gaussian / Median

阴影掩码

低亮度区域剔除

五、案例

相机分辨率:1280 × 1024

投影仪分辨率:1024 × 768

测量物体:金属台阶(有高度差)

目标:

恢复每个像素对应的 3D 坐标 (X,Y,Z)

投影阶段

投影 Gray Code

投影 10位格雷码(因为 1024=2¹⁰)

需要 10 张图(正码)

  • 10 张图(反码)

= 20 张

投影相位移(Phase Shift)分析单个点P

1、gray code 解码

假设该像素在 10 张 Gray 图中:

cpp 复制代码
1 1 0 1 0 0 1 0 1 1
2、转换为二进制
cpp 复制代码
Gray:  1 1 0 1 0 0 1 0 1 1
Binary:1 0 0 1 1 1 0 0 1 0
3、转十进制

k = 570 表示:该点属于第 570 条投影列(粗定位)

相位计算

该像素在4张相移图中的灰度:

I1 = 120

I2 = 200

I3 = 130

I4 = 60

计算相位

cpp 复制代码
包裹相位:φ ∈ (-π, π]

相位展开(核心)

格雷码给出:

k = 570


绝对相位

投影仪坐标恢复

投影宽度: W = 1024

投影列坐标

投影列坐标 = 569.74 pixel(亚像素)

计算深度

相机内参

投影仪内参(当成"反向相机")

fx_p = 1000

fy_p = 1000

cx_p = 512

cy_p = 384

外参(投影仪相对于相机)

R = I(简化)

T = 100, 0, 0 mm

表示:

投影仪在相机右边 100 mm

已知观测(来自Gray+Phase)

相机看到:

u = 700

v = 500


投影仪对应:

xp = 569.74(亚像素)

yp = 400

像素 → 归一化坐标

相机光线方向
cpp 复制代码
x_c = (700 - 640)/1200 = 0.05
y_c = (500 - 512)/1200 ≈ -0.01
相机光线:
投影仪光线

投影光线(在投影仪坐标系):

坐标统一到相机坐标系

投影仪位置:

C_p = (100, 0, 0)

求两条线最近点(核心)

理想情况:

两条线相交

实际:

求最小距离点

解方程

cpp 复制代码
从:

-0.01t = 0.016s
→ s = -0.625t

代入 x 方程:

0.05t = 100 + 0.0577(-0.625t)
0.05t = 100 - 0.036t
0.086t = 100
t ≈ 1162.8

求3D坐标

最终结果

(X,Y,Z) ≈ (58.1, -11.6, 1162.8) mm

误差分析

相位误差

Gray错误(最危险)

如果:

k = 570 → 571

误差:

≈ 1 pixel

放大后:

严重误差(跳变)

相关推荐
OPEN-F14 小时前
ROS2系列教程:Gazebo插件(关节控制/IMU/激光雷达)
c++·python·数码相机·算法·机器人
AomanHao1 天前
【ISP】compression artifact压缩失真情况
图像处理·数码相机·isp·sensor·图像压缩·压缩失真
蜡台2 天前
ux-camera 跨平台相机组件
数码相机·vue·uniapp·camera·nvue·取景框
长江后浪博客2 天前
YOLOv26+500万彩色工业相机实现药品铝塑板颗粒完整度检测:缺粒识别、颜色检测与穹顶漫射光机器视觉方案
数码相机·yolo·机器视觉·yolov26·药品包装检测·铝塑板检测·彩色工业相机
老兵发新帖2 天前
机器人本体:FK/IK
人工智能·数码相机·机器人
格林威3 天前
C# 相机图像阴影校正:使用OpenCvSharp实现工业相机阴影平场校正功能
人工智能·数码相机·opencv·计算机视觉·c#·机器视觉·工业相机
qq_526099134 天前
单口图像采集卡:被低估的那块“桥“
数码相机
中科同志科技先进封装4 天前
真空炉温控模块更换深度解读:工艺流程与优化策略
人工智能·数码相机
格林威4 天前
C#图像夜间识别率提升:使用OpenCvSharp和Halcon融合DeepSORT实现复杂场景下准确识别
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
敢敢のwings4 天前
LingBot-Depth:把 RGB-D 相机的“缺测”变成可用的空间先验
数码相机