RGB-D转3D点云原理及实现代码

在图像处理和计算机视觉领域,RGBD 是指结合图像颜色和深度信息的数据格式。文本介绍如何使用Python将RGBD数据转换为3D点云,可以使用 NSDT 3DConvert 在线查看3D点云或者进行格式转换:

1、RGBD = 颜色+深度

缩写 RGB 代表三基色通道,每个通道由 0 到 255 之间的整数值表示。这些值决定相应颜色的强度,0 表示没有颜色,255 表示最大强度。 第一个值代表红色通道,第二个值代表绿色,第三个值代表蓝色。 当任何 RGB 值增加时,颜色特征会向该特定颜色通道收敛。 为了说明这一点,请考虑以下示例。

复制代码
(RGB)           -> color

(0, 0, 0)       -> black
(255, 0, 0)     -> red
(0, 255, 0)     -> green
(0, 0, 255)     -> blue 
(255, 255, 255) -> white

缩写词 RGBD 的最后一个字母代表深度通道。 该值提供图像的距离信息。 深度值可以通过多种技术获得,例如飞行时间 (ToF) 传感器、结构光传感器或立体相机设置。 这些传感器通过测量光或电磁波从传感器传播到物体并返回所需的时间来计算深度值。

2、3D 点云

3D 点云是一种基本数据结构,由三维笛卡尔坐标系中的一组数据点组成,其中云中的每个单独点对应于 3D 空间中的唯一位置,由其 x、y 和 z 精确定义 坐标。 点云是各种软件行业的关键实体,包括计算机视觉、机器人、地理信息系统 (GIS) 和 3D 建模。

3、从 RGBD图像创建 3D 点云

要从 2D 图像创建 3D 点云,焦距和基点的知识至关重要。 为此,给出相机矩阵作为输入。

下面的块显示了标准针孔相机的相机矩阵。

复制代码
                    | fx   0  cx |
 Camera Matrix =    |  0  fy  cy |
                    |  0   0   1 |

其中各参数含义如下:

  • fx:表示沿x轴的焦距。
  • fy:表示沿 y 轴的焦距。
  • cx:表示基点的x坐标,它是图像平面沿 x 轴的中心。
  • cy:表示基点的y坐标,它是图像平面沿 y 轴的中心。

注意:

  • 右下角元素代表比例因子,通常设置为 1。
  • 其他元素表明相机的透视投影,不涉及水平 (x) 和垂直 (y) 轴之间的任何扭曲或倾斜效应。
  • 当提供 RGBD 二维图像和标准针孔相机的相机矩阵时,可以使用基本数学原理来构建三维点云。

根据上图, f(焦距)由相机矩阵给出, y(像素的y坐标)可以通过枚举像素来计算, z(深度)就是深度值。 必须计算 Y才能创建 3D 点云。 通过使用三角形相似性, Y = y * z / f。 此说明仅针对 y坐标, x坐标可以用相同的公式获得。

下面的函数实现了上述步骤。

复制代码
def to_3D(fx, fy, depth, cx, cy, u, v):
    x = (u-cx)*depth/fx
    y = (v-cy)*depth/fy
    z = depth
    x = np.expand_dims(x, axis = -1)
    y = np.expand_dims(y, axis = -1)
    z = np.expand_dims(z, axis = -1)
    return np.concatenate((x,y,z), axis=-1)

在上面的函数中, u和 v参数代表像素的 xy坐标。 为了说明这些参数,请考虑以下的数据,其中的值是使用具有 640 像素列和 480 像素行的图像创建的。

复制代码
the shape of u = (480, 640)

the shape of v = (480, 640)

u = 

[[  0   1   2 ... 637 638 639]
 [  0   1   2 ... 637 638 639]
 [  0   1   2 ... 637 638 639]
 ...
 [  0   1   2 ... 637 638 639]
 [  0   1   2 ... 637 638 639]
 [  0   1   2 ... 637 638 639]]

v = 

[[  0   0   0 ...   0   0   0]
 [  1   1   1 ...   1   1   1]
 [  2   2   2 ...   2   2   2]
 ...
 [477 477 477 ... 477 477 477]
 [478 478 478 ... 478 478 478]
 [479 479 479 ... 479 479 479]]

最后,可以使用以下函数创建 3D 点云。

复制代码
def make_point_cloud(datapath, fx, fy, cx, cy):
    rgbd = .....\load data
    H = len(rgbd)
    W = len(rgbd[0])
    u = np.arange(W)
    v = np.arange(H)
    u, v = np.meshgrid(u, v)
    xyz = to_3D(fx, fy, rgbd[:,:,3], cx, cy, u, v)
    rgb = rgbd[:,:,:-1]
    point_cloud = np.concatenate((xyz, rgb), axis=-1)
    return point_cloud

4、RGBD转3D点云示例

输入RGB图像和深度图像如下:

左:RGB图像 右:深度图像

利用前面的函数,我们得到的3D点云如下所示:


原文链接:RGBD图像转3D点云 --- BimAnt

相关推荐
Struart_R10 小时前
LLaVA-3D,Video-3D LLM,VG-LLM,SPAR论文解读
人工智能·深度学习·计算机视觉·3d·大语言模型·多模态
杀生丸学AI17 小时前
【无标题】GAP: 用文本指导对任何点云进行高斯化
3d·aigc·三维重建·视觉大模型·动态重建
audyxiao0011 天前
为了更强大的空间智能,如何将2D图像转换成完整、具有真实尺度和外观的3D场景?
人工智能·计算机视觉·3d·iccv·空间智能
范男1 天前
基于Pytochvideo训练自己的的视频分类模型
人工智能·pytorch·python·深度学习·计算机视觉·3d·视频
点云SLAM2 天前
SLAM文献之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping
3d·机器人·slam·vgicp算法·gpu 加速·lidar-imu 建图方法·全局匹配代价最小化
LetsonH2 天前
⭐CVPR2025 给3D高斯穿 “UV 衣” 框架[特殊字符]
3d·uv
新启航-光学3D测量2 天前
从 48 小时到 4 小时:三维逆向工程中自动化工具链如何重构扫描建模效率
科技·3d·制造
彩旗工作室2 天前
腾讯混元3D系列开源模型:从工业级到移动端的本地部署
3d·开源·腾讯混元
CG_MAGIC2 天前
主流 3D 模型格式(FBX/OBJ/DAE/GLTF)材质支持与转换操作指南
3d·渲染·动画·材质·贴图·3d 模型格式·材质支持与转换操作指南
计算机科研圈3 天前
ICCV 2025 | 首个3D动作游戏专用VLA模型,打黑神话&只狼超越人类玩家
图像处理·人工智能·3d·黑神话