3D 结构光编码原理 —— 二进制 / 格雷码 / 相位移 / 相位展开

3D结构光相机深度解析:从格雷码相移到点云重建的工程实践 3D结构光相机基于主动投射与三角测量原理,通过格雷码和相移编码实现高精度深度解算。其技术价值在于近距离毫米级测量,广泛应用于人脸识别、工业检测和三维重建。在自动化分拣、PCB高度检测等场景中,结构光方案能有效解决复杂表面测量难题。然而,材质适应性、环境光干扰和标定稳定性是工程落地的关键挑战。本文结合实战经验,系统梳理从相位解算到点云后处理的完整流程,并分享选型与集成中的避坑指南。 阅读详情

==================================================
3D 结构光编码原理
—— 二进制 / 格雷码 / 相位移 / 相位展开 / 三角测量

【内容结构】
一、结构光编码的本质
二、二进制编码(Binary Coding)— 基础
三、格雷码(Gray Code)— 优化
四、相位移(Phase Shift)— 高精度
五、格雷码 + 相位移的组合
六、2π 相位跳变(Phase Ambiguity)
七、相位展开(Phase Unwrapping)
八、完整系统 + 面试总结
九、三角测量(Triangulation)— 从对应点换算出高度
十、文档导航

==================================================
一、结构光编码的本质

结构光编码的目的是给投影仪的每一列(或每一条条纹)分配一个唯一 ID,
从而回答一个关键问题:

相机看到的这个像素,对应投影仪发出的哪一列光?

根据这个对应关系,再结合三角测量(Triangulation)即可恢复出高度。

主流程:
投影仪 → 投射条纹 → 物体发生高度起伏 → 条纹变形→ 相机拍摄 → 解码 → 三角测量 → 高度图

二、二进制编码(Binary Coding)— 基础

2.1 核心思想

用多张亮/暗二值条纹图,把投影仪的每一列编码成一个唯一的二进制编号。
然后再把读出的二进制转回十进制,得到该列号。

2.2 8 列例子(最简单情况)

投影仪横向 8 列:

    列号:        0  1  2  3  4  5  6  7
    二进制:      000 001 010 011 100 101 110 111

因为 2^3 = 8,所以只需要 3 位二进制编码。

三张投影图案(每一位对应一张):

    Pattern 1 (最高位 MSB):  0 0 0 0 1 1 1 1   → 00001111
    Pattern 2 (中间位)    :  0 0 1 1 0 0 1 1   → 00110011
    Pattern 3 (最低位)    :  0 1 0 1 0 1 0 1   → 01010101

2.3 相机解码过程

假设物体表面某点 A,相机依次拍摄 3 张图:

    第 1 张: 亮 → 1
    第 2 张: 暗 → 0
    第 3 张: 亮 → 1

得到二进制码:        101

转换为十进制:
    1 × 2^2 + 0 × 2^1 + 1 × 2^0
    = 4 + 0 + 1
    = 5

于是知道:
    该像素对应投影仪第 5 列。

2.4 16/32 列的扩展规律

假设投影仪有 2^N 列,则需要 N 张编码图。

+----------+----------+--------------------+--------------------------------+
| 列数      | 编码位数 | 编码图数           | 图案规律                        |
+----------+----------+--------------------+--------------------------------+
| 8 (2^3)  | 3        | 3 张               | 每 4/2/1 列翻转                 |
| 16 (2^4) | 4        | 4 张               | 每 8/4/2/1 列翻转               |
| 32 (2^5) | 5        | 5 张               | 每 16/8/4/2/1 列翻转            |
| 1024     | 10       | 10 张              | 类推                            |
+----------+----------+--------------------+--------------------------------+

规律总结:
    第 k 张图案:每 2^(N-k) 列翻转一次亮/暗

2.5 工业实践:编码多少列?

编码列数由"需要的空间分辨率"决定,与投影仪像素数无必然关系。

假设投影仪 1024 × 768,常见情况:
    - 每列都需唯一识别 → 编码 1024 列 → log₂(1024) = 10 张图
    - 第 537 列 → 二进制 1000011001(10 位)→ 相机拍完后即可恢复 537
    - 投影仪 1920 列但测量精度要求没那么高 → 可只划分 512 列
      → log₂(512) = 9 张图

2.6 为什么不能无限增加列数?

列数越多 → 条纹越细 → 越容易出问题:

    - 镜头模糊
    - 投影散焦
    - 像素串扰
    - 表面反射

导致"黑不够黑,白不够白",边界处容易误判。

结论:编码越细 → 测量越难。

2.7 二进制编码的局限

解码只能得到整数列号:
    0, 1, 2, 3, 4, 5, 6, 7

不能知道:
    5.1, 5.2, 5.3

因此精度受限。需要更高精度时,必须结合相位移。

三、格雷码(Gray Code)— 优化

3.1 普通二进制的边界跳变问题

以 8 列为例子观察相邻两列:

    3 = 011
    4 = 100

从 3 → 4:三位全部变化。

如果条纹边界附近受噪声影响:
    本应读到 011 → 却误读为 100
    直接从 列 3 跳到 列 4,甚至更大的误差。

3.2 格雷码定义

格雷码仍然是二进制编码,但满足:

    相邻位置的编码只有 1 位发生变化。

8 列的二进制 / 格雷码对照:

    列号   普通二进制    格雷码
    ────────────────────────────
    0      000          000
    1      001          001
    2      010          011
    3      011          010
    4      100          110
    5      101          111
    6      110          101
    7      111          100

相邻两列变化情况:
    000 → 001 : 第 3 位
    001 → 011 : 第 2 位
    011 → 010 : 第 3 位
    010 → 110 : 第 1 位
    ... 每次都只变 1 位

3.3 拆成投影图案

把格雷码竖向按位拆分,得到 3 张图:

    Gray Pattern 1:  0 0 0 0 1 1 1 1   → 00001111
    Gray Pattern 2:  0 0 1 1 1 1 0 0   → 00111100
    Gray Pattern 3:  0 1 1 0 0 1 1 0   → 01100110

对比二进制编码的 3 张图:

    二进制: 00001111  /  00110011  /  01010101
    格雷码: 00001111  /  00111100  /  01100110

差异:格雷码的条纹变化更平滑,不会出现大量位同时翻转。

3.4 抗噪声原理

假设真实位置:第 3 列,格雷码 = 010
    邻居:第 2 列,格雷码 = 011 (只差 1 位)

即使边界判断错了:010 ↔ 011,误差也只错 1 个位置。

而普通二进制:3 = 011、4 = 100,边界处可能出现多位同时出错,
误差远大于 1。

3.5 格雷码 → 二进制(解码)

转换规则(逐位异或):

    B1 = G1
    Bk = B(k-1) XOR Gk   (k >= 2)

例:格雷码 111 → 二进制
    B1 = G1 = 1
    B2 = B1 XOR G2 = 1 XOR 1 = 0
    B3 = B2 XOR G3 = 0 XOR 1 = 1
    → Binary = 101 → 即十进制 5

工业软件一般自动完成,无需手算。

3.6 格雷码的生成方法

【方法 1:直接观察法】手工逐个比较,适用于教学/小规模编码。

【方法 2:公式法】(工业实际最常用)

    Gray = Binary XOR (Binary >> 1)

即:格雷码 = 当前二进制 ⊕ 右移一位后的二进制。

例:5 → 101,右移 → 010
    XOR:    101
            010
          -----
            111
    → 5 的格雷码 = 111

例:4 → 100,右移 → 010
    XOR:    100
            010
          -----
            110
    → 4 的格雷码 = 110
    与 5 的格雷码 111 只差 1 位 ✓

3.7 为什么格雷码天然保证只变 1 位?

普通二进制产生多位同时变化的原因是进位。
而 Gray = B XOR (B >> 1) 这一公式巧妙消除了多位同时翻转,
因此天生保证:相邻数字只变 1 位。

3.8 为什么工业结构光喜欢格雷码?

✅ 绝对位置编码,不会出现 2π 歧义
✅ 相邻仅差 1 位,抗噪声
✅ 解码简单(异或)

缺点:依然只能定位到整数列(列 537 而非列 537.234),
因此工业系统通常:
    格雷码 + 相位移

四、相位移(Phase Shift)— 高精度

4.1 二进制 vs 正弦条纹(空间连续 vs 不连续)

【这里"连续变化"指的是空间上的连续,不是时间上的连续】

二进制条纹:
    255  ███████
         ███████
    0             ███████
                  ███████

    沿横向看:白 → 黑 在边界处突变,不连续。

正弦条纹:
    亮度沿横向平滑变化,类似正弦曲线:

        /\      /\
       /  \    /  \
      /    \  /    \
    0 ----/----\----/--→

    从 0 缓慢上升到 255,再缓慢下降到 0,再上升到 255 ……
    中间无数亮度级(0, 30, 80, 128, 180, 220, 255 ……),符合正弦规律。

    重要:相位移计算的并非"黑白变化",
    而是该点在条纹周期内的相位(Phase)位置。

4.2 为什么拍 4 张?— 四步相移

单张图内部亮度变化是空间连续的;
而相位移需要"在时间上依次投影多张发生平移的正弦条纹图"。

四步相移依次投影:

    第 1 张 (0°):   I = cos(x)
    第 2 张 (90°):  I = cos(x + 90°)   → 整体右移 1/4 周期
    第 3 张 (180°): I = cos(x + 180°)  → 再右移 1/4 周期
    第 4 张 (270°): I = cos(x + 270°)  → 再右移 1/4 周期

4.3 实际例子(单点 A 的 4 次亮度)

假设物体表面有固定一点 A:

    第 1 张:A 在亮区,I1 = 220
    第 2 张:A 跑到较暗位置,I2 = 120
    第 3 张:A 在最暗位置,I3 = 20
    第 4 张:A 又开始变亮,I4 = 130

由这 4 个亮度值,通过 atan2 即可求 A 对应的相位 φ:

    φ = atan2(I4 - I2, I1 - I3)

4.4 相位移的作用

求出相位 φ 后,可以得到亚像素位置。例如:

    537.23
    537.54
    537.89

这是条纹周期内的精确位置,而非仅仅"第 537 条"。

五、格雷码 + 相位移的组合

5.1 各自负责什么

+----------+--------------------------------+--------------------------------+
| 编码      | 解决的问题                       | 输出                          |
+----------+--------------------------------+--------------------------------+
| 格雷码   | 你在第几条条纹?绝对定位            | 整数级位置(如第 537 列)        |
| 相位移   | 该条纹周期内的具体位置             | 亚像素位置(如 0.326)          |
+----------+--------------------------------+--------------------------------+

合并后:537 + 0.326 = 537.326

5.2 形象的尺子比喻

格雷码      →  尺子上的厘米刻度(537 cm),只能知道整数
相位移      →  尺子上的游标卡尺(537.32 cm),能看小数部分
两者结合    →  工业级高精度结构光定位

5.3 为什么必须组合?

如果只有相位移:
    求出相位 = 180°
    那么第 5 周期、第 15 周期、第 25 周期 …… 看起来都一样。
    系统无法判断属于哪个周期。

如果只有格雷码:
    能定位到"第 537 条",但不能获得 0.326 的小数精度。

因此工业结构光通常采用 "格雷码 + 相位移" 组合方案。

5.4 面试标准表述

格雷码通过黑白条纹为每个投影位置分配唯一编码,实现绝对定位,
但只能获得整数级位置;相位移通过投影正弦灰度条纹,利用同一点
在多个相移图像中的灰度变化计算相位,从而获得条纹周期内的亚像素位置。
格雷码解决"第几条"的问题,相位移解决"条纹内具体位置"的问题,
因此工业结构光通常采用"格雷码 + 相位移"组合方案。

六、2π 相位跳变(Phase Ambiguity / Phase Jump)

6.1 问题本质

四步相移计算出:

    φ = atan2(I4 - I2, I1 - I3)

atan2 的结果范围只能是一个周期:
    [-π, +π] 或 [0, 2π)

但真实条纹周期可能无限重复:
    0, π, 2π, 3π, 4π, 5π, 6π …

例如真实相位为 0.5π, 2.5π, 4.5π,atan2 结果全部都是 0.5π。

这种"多个真实相位压缩到 [0, 2π) 区间"的现象,叫做:
    Wrapped Phase(包裹相位)

也称为:2π Ambiguity 或 Phase Jump(相位跳变)

6.2 经典例子

假设条纹周期 = 10 像素:

    点 A:第 5 个周期 + 90°,真实相位 = 5 × 2π + π/2
    点 B:第 20 个周期 + 90°,真实相位 = 20 × 2π + π/2

atan2 计算结果:
    A → π/2
    B → π/2

系统根本无法分辨 A 与 B 属于哪个周期。

6.3 为什么会出现?

+----------------------+----------------------------+----------------------------+
| 方法                 | 输出范围                   | 真实物理世界               |
+----------------------+----------------------------+----------------------------+
| atan2                | [0, 2π) 单一周期           | 多个周期无限增长           |
+----------------------+----------------------------+----------------------------+
| 结果差异             | 单一包裹值                 | 需要"周期编号 + 包裹值"   |
+----------------------+----------------------------+----------------------------+

七、相位展开(Phase Unwrapping)— 解决 2π 歧义

7.1 思路本质

需要把"被压缩在 [0, 2π) 的单一周期相位"还原为连续的
真实相位(可跨多个周期)。这个过程就叫相位展开。

业界主要有两条技术路线。

7.2 空间相位展开(Spatial Phase Unwrapping)

【思路】利用邻近像素相位连续性
    相邻点的高度通常是连续的,相位也是连续的。

【做法】
    相邻像素相位本应连续:1.1π, 1.2π, 1.3π, 1.4π ……
    如果突然从 1.4π → 0.1π,说明发生 2π 跳变。
    把 0.1π 补回 +2π,变成 2.1π。

【缺点】
    在台阶、孔洞、断层等突变处容易失败。

7.3 时间相位展开(Temporal Phase Unwrapping)

【思路】低频辅助高频(工业最常用)

【做法】
    先投"宽条纹"(条纹周期大,只有 2 个周期)
        → 容易判断属于第几周期;
    再投"窄条纹"(条纹周期小,有 20 个周期)
        → 提供高精度位置。

    组合后:既知道"第几个周期",又知道"周期内精确位置"。

【本质联系】
    格雷码能告诉你"第几条",解决的正是"周期编号问题";
    多频相位移(低频 + 高频)能在不增加格雷码位数的情况下,
    进一步提供高精度周期编号。

7.4 工业结构光通常的选择

工业结构光最常用 "时间相位展开(多频)" + "单频高精相位移"。

原因:
    - 不依赖相邻像素 → 不受表面突变影响
    - 精度更高、可控性好

八、完整的高精度结构光 3D 测量系统(对应关系部分)

±---------------------±-------------------------±--------------------------±---------------------------+
| 模块 | 解决的问题 | 输出 | 工业做法 |
±---------------------±-------------------------±--------------------------±---------------------------+
| 格雷码 | 第几条条纹(整数) | 537 | Black & White 二值条纹 |
| 相位移 | 条纹周期内亚像素 | 0.326 | 4 张正弦条纹 |
| 相位展开(2π 解决) | 到底是第几个周期 | 周期编号 + 亚像素位置 | Spatial / Temporal |
| 三角测量 | 视差 → 高度 Z | 高度图 Height Map | Z = f × B / d |
±---------------------±-------------------------±--------------------------±---------------------------+

【一句话理解】
格雷码解决"第几条"的问题,
相位移解决"条纹中的哪个位置"的问题,
相位展开解决"到底是第几个周期"的问题,
三角测量解决"对应点 → 高度"的问题。

这四步组合起来,才构成完整的高精度结构光 3D 测量系统。

九、面试总结(分主题速记)

9.1 什么是结构光编码?

结构光编码通过给投影仪的每一列分配唯一 ID,建立相机像素与投影
仪列号的对应关系,再结合三角测量恢复高度。常用组合方案为
"格雷码 + 相位移 + 相位展开"。

9.2 二进制编码的核心思想?

用 N 位二进制表示 2^N 个投影位置。每位对应一张投影图,相机按位
解码后转换为十进制即可恢复列号。需要 log₂(N) 张编码图。

9.3 为什么工业喜欢格雷码?

- 绝对位置编码,不出现 2π 歧义
- 相邻编码只差 1 位,抗噪声
- 编码 / 解码简单(生成:B XOR (B>>1);解码:逐位异或)

9.4 相位移为什么能提高精度?

相位移投影正弦灰度条纹,通过 4 张相移图像中的灰度变化计算出
相位 φ = atan2(...),从而得到条纹周期内的亚像素位置(小数部分)。

9.5 什么是 2π 相位跳变?

由于 atan2 计算得到的相位只有一个周期 [0, 2π),而真实条纹
存在多个重复周期,因此无法判断当前相位属于第几个周期,这种
现象称为 2π Phase Ambiguity(相位歧义)或 Phase Jump(相位跳变)。

9.6 如何解决 2π 歧义?

两种主流方法:

Spatial Phase Unwrapping(空间展开)
    - 利用邻近像素的相位连续性
    - 对边缘和突变表面效果较差

Temporal Phase Unwrapping(时间展开)
    - 利用低频条纹辅助高频条纹
    - 需要拍摄更多图像
    - 工业结构光最常用

十、三角测量(Triangulation)— 从对应点换算出高度

【衔接上一章】
前八章已经解决:格雷码 + 相位移 → 相机像素 ↔ 投影仪像素对应关系。
本章解决:已知对应关系后 → 计算目标点的 3D 坐标(X, Y, Z)。

10.1 结构光 = 把投影仪当作"反向相机"

双目视觉:

    左相机   右相机
        \   /
         \ /
          ●  目标
         / \
        /   \

    → 两个相机视角不同 → 视差 → 深度

结构光完全一样,只是把右相机换成投影仪:

       Camera
         \
          \
           ●  Object Point
          /
         /
    Projector

    → 相机拍摄 + 投影仪投射,等效两支不同视角的光线
    → 三角关系 → 三角测量(Triangulation)

10.2 系统标定后知道什么?

系统已经知道:

[1] 相机位姿    Camera Pose
    包括相机位置和朝向

[2] 投影仪位姿  Projector Pose
    包括投影仪位置和朝向

[3] 相机内参
    fx, fy, cx, cy

[4] 投影仪内参(把投影仪看作反向相机)
    fxp, fyp, cxp, cyp

10.3 测量时得到什么?

通过格雷码 + 相位移 解码后,得到:

    Camera Pixel     (u, v)     例:(800, 400)
    Projector Pixel  (up, vp)   例:(920, 400)

建立对应关系:
    Camera Pixel  <->  Projector Pixel

10.4 单视角为什么算不出 3D?

相机看到的一个像素 (800, 400),实际上只代表:

    Camera
        \
         \
          \          (一条从相机出发的空间光线)
           \
            \

系统只能知道:
    "物点在这条光线上,但不知道在何处。"

单视角无法确定深度,必须再有一条光线与之相交。

10.5 两条光线相交 → 3D 坐标

把相机和投影仪分别反投影为空间中的两条光线:

       Camera
          \
           \
            ●  ← 两条光线的交点
           /
          /
    Projector

交点坐标 = (X, Y, Z)

这就是目标点的 3D 坐标,也是"三角测量"得名的由来。

10.6 高度(Z)与条纹偏移的关系

假设参考平面 Z = 0,非常平坦:

    投影条纹落在 x = 100 位置

如果中间出现一个凸起,条纹会发生偏移:

    原来: x = 100
    现在: x = 110
    位移: Δx = 10

位移越大 → 高度越高
位移越小 → 高度越低

因此:
    条纹偏移量  ⇔  高度

10.7 最常见公式

如果采用简单三角模型:

    Z = B × f / d

其中:
    Z = 深度
    B = Camera 与 Projector 之间的距离(Baseline)
    f = 焦距
    d = 视差(条纹偏移量)

与双目视觉深度公式完全一致:

    Depth  ∝  1 / Disparity

10.8 为什么相位移能提高高度精度?

假设相邻列对应的高度差:

    第 537 列 → 1.000 mm
    第 538 列 → 1.020 mm

仅用格雷码,最小分辨率 = 0.02 mm。

加入相位移后:

    537.50 列 → 1.010 mm
    537.05 列 → 1.001 mm

精度提升链条:
    相位精度 → 投影像素精度 → 三角测量精度 → 高度精度
    (层层传递,这是为什么工业结构光必须配合相位移)

10.9 面试最简单回答

结构光系统首先通过格雷码和相位移建立相机像素与投影仪像素的对应关系,然后将相机和投影仪分别看作双目系统中的两个视角。
根据系统标定得到的内外参数,将对应像素反投影为空间中的两条光线,两条光线的交点即为目标点的三维坐标 (X, Y, Z)。
目标点相对于参考平面的 Z 值就是高度信息,这一过程称为三角测量(Triangulation)。

10.10 一句话本质

格雷码 + 相位移  → 负责"找到对应点"(Camera Pixel ↔ Projector Pixel)
三角测量 Triangulation  → 负责"把对应点转换成高度"(3D 坐标)

两步组合,就是完整的结构光 3D 测量链路。

十一、文档导航

【完整链路速记】

格雷码         →  第几条(绝对位置)
相位移         →  条纹周期内位置(亚像素)
相位展开       →  到底是第几个周期(2π 解歧义)
三角测量       →  对应点 → 3D 坐标(高度)

这四步组合,才构成完整的高精度结构光 3D 测量系统。
3D深度相机选型决策指南:结构光、双目、TOF实战对比 3D深度相机是机器视觉与空间感知的核心传感器,其技术原理直接决定在工业检测、智能仓储、医疗康复等场景中的可用性与鲁棒性。结构光依赖三角测量与主动编码,精度高但怕光怕动;双目视觉基于被动立体匹配,成本低却极度依赖纹理与算法调优;TOF通过飞行时间测距,在动态与弱光下稳定输出,但受多径干扰制约。真实项目中,标称参数常掩盖环境适应性缺陷——如温度漂移、镜面失效、运动模糊等。本文结合7类行业实测数据,揭示三类技术的能力边界与典型失效模式,提供可落地的选型决策树与最小可行性验证(MVP)方法,助力工程师避开‘参数陷阱 阅读详情

相关推荐

DLP670S DMD芯片:高速高精度3D扫描与机器视觉核心器件解析

数字微镜器件(DMD)是一种基于微机电系统(MEMS)技术的空间光调制器,其核心原理是通过控制数百万个微镜的偏转状态来调制光场。这种技术通过二进制或脉宽调制方式,实现了对光的高速、高精度数字控制,其技术价值在于将传统的光学显示扩展为可编程的光学控制引擎。在工业自动化、机器视觉和精密测量领域,这种高速、高分辨率的可控光源是实现动态三维扫描、在线检测和高光谱成像的关键。具体到DLP670S这类高性能DMD芯片,其高达2716×1600的分辨率和近万赫兹的刷新率,结合精密的电源时序、热管理和高速LVDS接口设计,

abc20899的专栏 498

halcon相机标定助手_智能制造逆向工程三维测量标定

点击上方“新机器视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达双目三维光学测量硬件系统结构设计光学三维测量是一项集机械,电气,光学,信息工程技术于一体的前沿技术。该技术应用光学成像原理,对现实世界的物体进行扫描,通过复杂的数据分析、数字图像处理得到目标物体的三维形态数据。该技术几乎不受目标物体的形状限制,经过处理的虚拟数据具有广泛的应用价值。本次设计课题为双目三维光学测量硬件系统...

weixin_39890543的博客 548

树莓派结构光三维扫描仪:格雷码加相移实现与源码解析

结构光三维重建是一种主动视觉测量技术,常与相机标定、三角测量原理结合,通过投影编码图案解算物体表面深度。传统立体视觉依赖环境光,而结构光系统以投影仪替代一只眼睛,主动投射格雷码、相移等编码图案,提升视差匹配鲁棒性。在工程实践中,格雷码提供绝对位置,相移实现亚像素精度,两者结合可在低成本硬件上获得毫米级点云。该技术广泛应用于工业检测、逆向建模、文物数字化等场景。树莓派作为嵌入式平台,配合OpenCV可实现从图案生成、同步采集、相位解包裹到点云导出的完整流程。本文以基于树莓派的结构光三维扫描仪项目为例,介绍硬件

weixin_34195546的博客 372

结构光扫描 基于光学非接触式的三维扫描技术

三维扫描技术概述 三维扫描通过光学传感器(如摄像头、投影仪)捕获物体空间信息,生成三维模型(点云或网格)。

2401_88653082的博客 524

树莓派结构光三维扫描仪:从原理到源码

结构光三维重建技术通过投射编码图案并解析形变,实现高精度物体表面点云采集,广泛应用于工业检测、逆向工程与AR/VR领域。传统方案依赖昂贵工业相机与专用GPU,入门门槛高。基于树莓派与OV5647摄像头模块,结合微型DLP投影仪,可搭建一套低成本、完全离线的结构光扫描系统。系统利用格雷码+相移混合编码实现亚像素级匹配,通过OpenCV完成相机与投影仪标定,最终生成ply/obj点云供3D打印或建模。本文详细解析硬件选型、编码原理、标定流程及完整源码,并分享投影-采集同步、背景分割等工程排坑经验,帮助开发者以千

weixin_33911824的博客 404

Vivado ILA抓不到低频信号?试试Capture Control模式,保姆级配置教程(附PWM调试实例)

本文详细解析了Vivado ILA的Capture Control模式在低频信号捕获中的应用,特别针对PWM调试等场景提供保姆级配置教程。通过条件采样和时间拉伸技术,有效解决传统ILA采样在低频信号调试中的存储深度不足、关键信号丢失等问题,并附赠呼吸灯PWM的完整调试实例,帮助FPGA开发者提升调试效率。

weixin_42549451的博客 350

3D结构光相机原理、选型与实战:从格雷码相移到点云重建

三维重建是通过三角测量原理获取物体表面深度信息的技术,核心在于投影图案的编码与解码。格雷码与相移编码结合,可实现高精度相位展开与点云生成。3D结构光相机将测距从单点扩展至面阵,大幅提升工业检测效率与精度。在PCB翘曲检测、铸件毛刺识别、包裹体积测量等场景中,该技术能快速获取全视野三维形貌。选型时需权衡基线长度、投影器亮度与相机分辨率,标定与精度验证是保障测量可靠性的关键环节。

weixin_34062469的博客 377

如何利用 多 张 GPU 高效运行 Ollama

通过以上步骤,我们可以确保系统尽可能地利用所有 多张GPU 来运行 Ollama。如果在配置过程中遇到问题,建议查阅 Ollama 的官方文档,确认其是否支持多 GPU 并行计算,或者对系统性能进行进一步的优化。充分利用多 GPU 的并行计算能力,可以显著提升 Ollama 的运行效率,加快模型的推理和训练速度。希望本文能帮助你顺利实现 多张 GPU 的高效利用。

weixin_44997264的博客 8032

智能制造-逆向工程-三维测量-标定

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达双目三维光学测量硬件系统结构设计光学三维测量是一项集机械,电气,光学,信息工程技术于一体的前沿技术。该技术应用光学成像原理,对现实世界的物体进行扫描,通过复杂的数据分析、数字图像处理得到目标物体的三维形态数据。该技术几乎不受目标物体的形状限制,经过处理的虚拟数据具有广泛的应用价值。本次设计课题为双目三维...

小白学视觉 1098

ESD放电路径分析

当金属外壳接地情况下,大部分外部干扰信号将会通过外壳,外壳到接地点,再由接地点回到干扰信号的地,实现干扰信号的回流,这点不仅仅适用于​ESD,对于其他的RI类干扰,也同样适合。发现内部金属板跟外壳的搭接处存在较多的缝隙点,该缝隙点对于频率较高的信号能够实现较为理想的回流,但是对于频率没有那么高的信号,则较难以实现回流,我们尝试将这些缝隙用铜箔包裹住,充分降低该金属板跟外壳的接触阻抗​。我们分析,路径3其实是不期望的路径,我们最期望的路径是1,或者2的内部金属部件跟外壳良好接触情况下的路径。

domen_pan的博客 2228

VScode中配置 C/C++ 环境,超级详细,问题分析全面,绝对好用

VScode中配置 C/C++ 环境,超级详细,问题分析全面,绝对好用 VScode中配置 C/C++ 环境 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 1. 下载编辑器VScode 1.官网:https://code.visualstudio.com/ 2. 安装VScode(建议附加任务全部勾选; 2. 下载编译器MinGW并解压 官网页面:https://www.mi

m0_46147064的博客 8万+

7天掌握结构光三维重建:从零基础到实战精通的完整指南

结构光三维重建技术正在快速改变工业检测、文物数字化和AR/VR等领域。本教程将带领你在7天内从理论到实践全面掌握OpenCV_contrib中的结构光模块,无需深厚数学背景,只需跟随步骤即可实现高精度三维建模。 ## 🌟 为什么选择OpenCV_contrib结构光模块? OpenCV_contrib提供了业界领先的开源结构光解决方案,其模块化设计让开发者可以轻松集成灰度编码(GrayCod

gitblog_00064的博客 838

黑猫带你学eMMC协议第29篇:eMMC设备锁详解(CMD42)

通过cmd42命令,可以给emmc设置密码,并且锁定emmc。这时候就不能对emmc的user分区进行读写数据访问了。设备锁在V4.3版本后的emmc里面,就只能保护user area分区,因此,被锁定的emmc,依旧可以正常访问BOOT\RPMB\GPP分区。emmc内部有128 bit PWD寄存器,用来存放密码,以及有8bit PWD_LEN寄存器,用来密码长度。这两个寄存器非易失性,掉电也不会丢失。

黑猫奥利奥的博客 3237

DLP结构光3D扫描系统:从DMD选型到高精度标定的工程实践

结构光三维重建通过投射已知编码图案并分析其形变,利用三角测量原理实现微米级深度测量,其核心优势在于主动投射图案的像素级控制能力。DLP技术依托DMD芯片中数百万个可独立翻转的微镜,实现高速、高重复精度的图案切换,为工业检测、逆向工程和医疗扫描等场景提供了可靠的深度信息获取手段。在系统集成中,相机与投影仪的同步控制、基线距离与工作距离的匹配、以及多频外差和格雷码等解包裹算法的选择,共同决定了最终点云质量。标定环节的精度往往比解码算法更关键,全局优化和温度补偿是保障长期稳定性的工程要点。

weixin_34320724的博客 395

动态SLAM中的YOLO与ORB-SLAM3融合:实时目标检测与动态点云滤除实战

本文介绍了如何结合YOLOv5目标检测与ORB-SLAM3视觉SLAM系统,实现动态环境下的目标检测与视觉SLAM任务。文章详细阐述了从源码下载、依赖安装(包括libtorch配置)、编译运行步骤(包括ROS环境和非ROS环境下的编译方法),到RGBD-TUM数据集准备与关联处理的全流程。同时针对常见错误提供了解决方案,如libtorch路径配置、ROS环境冲突等。最后展示了系统运行方法,并探讨了未来可能的优化方向,包括增强目标检测能力和改进动态环境下的地图构建。该集成系统为机器人智能导航和环境感知提供了有

LXY_LOVE36的博客 237

《YOLOv8-seg改进》专栏指导书册 &手把手创新教程

学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研;1)手把手教你如何训练YOLOv8-seg;2)模型创新,提升分割性能;3)独家自研模块助力分割;

会AI的学姐 3813

高精度3D相机系统全解析:从结构光原理到工业现场落地

2D视觉在低对比度、高度测量和复杂姿态场景中逐渐触及瓶颈,工业检测正加速向三维重建升级。高精度3D相机系统以结构光投影与工业相机为核心,通过格雷码加相移实现亚像素级相位提取,结合相机、投影仪与深度映射标定,生成高密度点云数据。该系统可在微米级公差下完成共面度、翘曲度、高度差等测量,并广泛应用于3C电子、汽车零部件、半导体封装的外观缺陷检测、尺寸测量与机器人引导。本文基于实际项目,完整解析系统选型、精度反推、标定流程、点云预处理及现场部署避坑指南,为工业视觉工程师提供从原理到落地的工程参考。

weixin_33805992的博客 272

【00】虹软2023届校招专场 ,计算机类笔试攻略(笔试考试时间、考察范围、笔试难度 等说明)

虹软科技2023校招笔试攻略:三大岗位类别(算法、算法优化、开发)分别于7月24日进行。题型包括选择题、编程题和问答题,其中算法类题目降低难度,编程题改为LeetCode模式。重点考察数学基础、机器学习、编程能力(C/C++/Python)、数据结构和算法优化等。建议根据投递岗位选择问答题,算法优化类注重系统知识和SIMD优化,开发类侧重多线程等实际应用能力。笔试结果将作为校招offer的重要参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 276

六种3D相机原理深度解析:从光路设计到工业选型决策

3D相机并非简单叠加深度功能的RGB设备,而是以X/Y/Z为空间原生输出的光学传感系统,其本质是光与物质相互作用的物理编码过程。不同技术路径——如双目立体视觉、结构光、飞行时间(ToF)、激光三角测量等——对应截然不同的成像原理、误差模型与工程约束。理解其底层光学机制(如相位解算、视差生成、光程差测量)是规避现场失效(温漂、多路径干扰、纹理缺失、环境光饱和)的前提。在工业检测、机器人导航、精密制造等对鲁棒性与精度要求严苛的场景中,技术选型必须回归光路可行性:光如何出发、如何被物体调制、又如何被传感器稳定捕获

weixin_33951761的博客 478

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

3D ACIS Modeler 在测量软件里怎么用?几何查询、区域判断与测点布点

本文面向测量软件开发团队,梳理 CAD 模型导入三坐标测量软件后的几何判断工作:如何借助 3D ACIS Modeler 完成模型对象访问、测量区域判断与空间关系分析,并结合 LK Metrology CAMIO 官方案例说明内核与应用的分工,最后给出自研与引入内核的评估思路。

HuiduCADTech的博客 327

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

3D CAD参数化建模原理详解:尺寸参数、几何约束与特征关系

3DCAD参数化建模通过尺寸参数、几何约束与特征依赖关系,将设计意图融入模型,实现自动更新。其核心在于明确变量关联、合理设置约束、理顺特征逻辑。修改时,系统依规则重算几何,但需防范约束冲突、依赖失效等问题。提升可维护性需规划关键参数、优化建模结构,并验证多场景适用性。大腾智能ZCAD以自主内核与智能交互支持高效参数化设计,兼顾传统建模与同步修改需求,助力系列化开发与持续迭代。

大腾智能的博客 319

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

虚拟仿真实训基地的技术实现路径:从3D采集、资源库到仿真平台的完整链路

本文提出“五段式”虚拟仿真实训链路——采集、建模、资源、平台、展示,破解职业教育实训资源持续产出难题。通过设备选型、AI建模、统一管理与过程留痕,实现教学资源标准化、可复用、可更新。强调元数据规范、轻量化处理与验收指标,避免“只采不建”“仿真脱节”等五大工程陷阱,确保基地长效运行,支撑岗位技能对接与教学改革。

Jmyd0123的博客 332

船舶安全培训怎么用AI生成3D预演?从甲板通道、设备热点到网页回放

船舶甲板能够漫游,不等于培训内容可信。本文梳理从培训任务、资料台账、空间白模到设备热点、步骤关联和网页交付的制作流程,说明如何用稳定设备 ID 追溯来源,通过三轮审核核对技术、课程与网页表现,并提供弱网图文回退和上线清单。AI 适合辅助场景与交互原型,不能替代专业审核、上船实训或正式安全程序。

Solange__的博客 561

DEM 数据源选型完全指南:SRTM、ASTER GDEM、ALOS AW3D30 与商业高分辨率的工程级对比

本文回答一个工程选型问题:SRTM、ASTER GDEM、ALOS AW3D30 和商业高分辨率 DEM 怎么选。核心结论:先确认数据表达的是裸地还是含地物表面,再确认垂直基准,最后才看分辨率。格网再细,表面层错了或基准没对齐,断面和汇水结果仍然不可用。

TuxinyunGIS的博客 288

百炼 CLI 生成物流主题 3D 视觉概念图教程:一个关键词出主视角/鸟瞰/特写/风格变体一套图,含默认开关与水印坑实测

做物流投标配图、方案配图的人经常遇到同一个需求:手里只有一个关键词,交付物却是一整套 3D 视觉概念图。本文以「无人仓储中心」为例,用百炼命令行的两条命令搭一条两段式生图链路,一个关键词产出主视角、鸟瞰、设备特写与风格变体成套图,并把四条可选路线的等待时间、画面文字注入情况和成套一致性一次测完,给出可直接抄的接法与参数。

weixin_43540568的博客 87

机器视觉 3D 相机与机器人引导全解析:四大成像原理、手眼标定与七步落地流程

3D 视觉的精度上限,80% 取决于。

2501_94699871的博客 198
上一篇: 神经网络中的基础激活函数和损失函数
下一篇: Git的用法
小巫山云子
博客等级 码龄6年 1477粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值