结构光格雷码编码解码二值化 相移

本文是结构光三维重建的学习笔记,重点介绍了如何将二进制转换为格雷码编码,并详细阐述了投影图案的生成过程。通过递归的C++代码演示了格雷码的生成,同时提供了使用Python实现的投影图案生成代码,以简化工作流程。
摘要由CSDN通过智能技术生成

结构光三维重建学习笔记

所以,格雷码的生成步骤: 产生0,1两个字符串;0、1 在第一步基础上: 每个字符串前都+0->0+0、0+1 翻转首个元素,其余对称:1+1、1+0 最终:00、01、11、10 在上一步基础上: 每个字符串前都+0->0+00、0+01、0+11、0+10 翻转首字符,其余对称:1+10、1+11、1+01、1+00 最终:000、001、011、010、110、111、101、100 之后递归即可!我们用C++代码来实现一下,采用递归的形式:

#include <iostream>
#include <vector>
#include <cassert>
using namespace std;


vector<string> GrayCode(int n) {
   
    if (n < 1) {
   
        cout << "格雷码数量必须大于0" << endl;
        assert(0);
    } else if (n == 1) {
   
        vector<string> code;
        code.emplace_back("0");
        code.emplace_back("1");
        return code;
    } else {
   
        vector<string> code;
        vector<string> code_pre = GrayCode(n - 1);
        
        for (int idx = 0; idx < code_pre.size(); ++idx) {
   
            code.push_back("0" + code_pre[idx]);
        }
        for (int idx = int(code_pre.size() - 1); idx >= 0; --idx) {
   
            code.push_back("1" + code_pre[idx]);
        }
        return code;
    }
}


int main()
{
   
    int n = 4;
    vector<string> gray_code = GrayCode(n);
    for (auto &g : gray_code){
   
        cout << g << endl;
    }
}

二进制转格雷码编码

<int> GrayCode2(int n){
   
    int count = 1 << n;
    vector<int> res(count,0);
    for(int i = 1 ; i < count; i ++)
    {
   
        int bin = i,cur = bin >> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值