格雷码详解

一、什么是格雷码

**格雷码(Gray Code)**是一种特殊的二进制编码:

相邻两个数只有 1 位不同

十进制 二进制 格雷码
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100

核心特点

相邻值 → 只变1位

二、为什么要用格雷码(工业意义)

普通二进制:

011 → 100(变化3位)

问题:

容易出错(噪声/遮挡)

格雷码:

011 → 010(只变1位)

优势:

抗噪声强

鲁棒性高

三、数学原理

二进制 → 格雷码

公式:

cpp 复制代码
举例

二进制:

B = 1011

右移:

B>>1 = 0101

异或:

1011
⊕0101
-----
1110

格雷码:

1110

格雷码 → 二进制(逆过程)

递推:

四、结构光中的格雷码

在结构光中:

投影仪 → 投影编码条纹

相机 → 拍摄


每一位 = 一张图

例如 8位格雷码:

需要 8 张图

每张图:

黑白条纹


解码过程

对每个像素:

看每一帧是亮还是暗

→ 得到bit序列

→ 转换为整数

得到:

像素对应投影位置

五、MATLAB OpenCV生成格雷码

Matlab

生成格雷码序列

cpp 复制代码
n = 3; % 位数
N = 2^n;

gray = bitxor((0:N-1), floor((0:N-1)/2));
disp(gray)

转成二进制矩阵

cpp 复制代码
bin = de2bi(gray, n, 'left-msb');
disp(bin)

生成条纹图像

cpp 复制代码
width = 256;
height = 200;
n = 8;

for i = 1:n
    pattern = zeros(height, width);
    
    for x = 1:width
        g = bitxor(x-1, floor((x-1)/2));
        bit = bitget(g, n-i+1);
        
        pattern(:, x) = bit;
    end
    
    imshow(pattern, []);
    pause(0.5);
end

OpenCV 生成格雷码(结构光模块)

cpp 复制代码
OpenCV提供:

cv::structured_light::GrayCodePattern
C++ 示例
#include <opencv2/opencv.hpp>
#include <opencv2/structured_light.hpp>

using namespace cv;
using namespace cv::structured_light;

int main()
{
    int width = 1024;
    int height = 768;

    Ptr<GrayCodePattern> graycode =
        GrayCodePattern::create(width, height);

    std::vector<Mat> patterns;
    graycode->generate(patterns);

    for (int i = 0; i < patterns.size(); i++)
    {
        imshow("pattern", patterns[i]);
        waitKey(200);
    }
}

输出内容
patterns:
- 正码
- 反码
- 多bit编码图

六、流程

采集 N 张图

每个像素:

判断亮/暗

得到 Gray Code

转换为 Binary

得到列坐标

优点

  • 抗噪声
  • 不易误码
  • 结构简单

缺点

  • 分辨率有限(整数级)
  • 需要多帧图像

Q1:为什么格雷码抗噪声?

相邻只变1位 → 错误不会级联

Q2:为什么要配合相位法?

格雷码:整数精度

相位法:亚像素精度

Q3:最少需要多少张图?

Q4:作用

格雷码 = 相邻只变1位的编码

→ 用于稳定获取离散位置

→ 结构光中用于"粗定位"

相关推荐
世界很奇妙塔18 分钟前
大模型轻量化技术攻坚:从千亿参数到端侧部署,重构AI落地底层路径
人工智能·重构
z小猫不吃鱼18 分钟前
模型剪枝经典论文精读:Rethinking the Value of Network Pruning
人工智能·深度学习·计算机视觉
阿尔泰科技官方26 分钟前
阿尔泰科技——NVH/振动/声学测试专用解决方案
人工智能·信号采集·仪器仪表·数据采集卡·采样率
147API41 分钟前
Claude global workspace 研究给智能体测试提了一个醒
人工智能·算法·机器学习
闲猫41 分钟前
深入理解 Skills:从 API 调用到智能体行为封装
人工智能·python·langchain
葫三生42 分钟前
《论三生原理》与模糊数学的关联、异同、互补关系?
人工智能·科技·算法·机器学习·开源
刘一说1 小时前
AI科技热点日报 | 2026年7月7日
人工智能·科技
ACP广源盛139246256731 小时前
破局 PCIe 4.0 交换瓶颈@ACP#IX8024 / ASM58024参数及应用对比
大数据·人工智能·分布式·嵌入式硬件
ishangy1 小时前
吊箱号AI识别技术:防爆摄像机实现港口集装箱自动核对
人工智能·边缘计算·智慧港口·ai视觉识别·集装箱箱号识别·港口智能化
xiaoxiaoxiaolll1 小时前
《Light: Sci Appl》封面级亮点:可训练误差卷积核如何让光学神经网络实现“逐层自治”?
人工智能