百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

RGBD图像转3D点云

ztj100 2024-12-12 16:15 20 浏览 0 评论

推荐:用 NSDT编辑器 快速搭建可编程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点云如下所示:


原文链接:http://www.bimant.com/blog/rgbd-to-point-cloud/

相关推荐

sharding-jdbc实现`分库分表`与`读写分离`

一、前言本文将基于以下环境整合...

三分钟了解mysql中主键、外键、非空、唯一、默认约束是什么

在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。...

MySQL8行级锁_mysql如何加行级锁

MySQL8行级锁版本:8.0.34基本概念...

mysql使用小技巧_mysql使用入门

1、MySQL中有许多很实用的函数,好好利用它们可以省去很多时间:group_concat()将取到的值用逗号连接,可以这么用:selectgroup_concat(distinctid)fr...

MySQL/MariaDB中如何支持全部的Unicode?

永远不要在MySQL中使用utf8,并且始终使用utf8mb4。utf8mb4介绍MySQL/MariaDB中,utf8字符集并不是对Unicode的真正实现,即不是真正的UTF-8编码,因...

聊聊 MySQL Server 可执行注释,你懂了吗?

前言MySQLServer当前支持如下3种注释风格:...

MySQL系列-源码编译安装(v5.7.34)

一、系统环境要求...

MySQL的锁就锁住我啦!与腾讯大佬的技术交谈,是我小看它了

对酒当歌,人生几何!朝朝暮暮,唯有己脱。苦苦寻觅找工作之间,殊不知今日之事乃我心之痛,难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日,可惜在下京东上的小金库都要见低啦。每每想到不由心中一...

MySQL字符问题_mysql中字符串的位置

中文写入乱码问题:我输入的中文编码是urf8的,建的库是urf8的,但是插入mysql总是乱码,一堆"???????????????????????"我用的是ibatis,终于找到原因了,我是这么解决...

深圳尚学堂:mysql基本sql语句大全(三)

数据开发-经典1.按姓氏笔画排序:Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as//从少...

MySQL进行行级锁的?一会next-key锁,一会间隙锁,一会记录锁?

大家好,是不是很多人都对MySQL加行级锁的规则搞的迷迷糊糊,一会是next-key锁,一会是间隙锁,一会又是记录锁。坦白说,确实还挺复杂的,但是好在我找点了点规律,也知道如何如何用命令分析加...

一文讲清怎么利用Python Django实现Excel数据表的导入导出功能

摘要:Python作为一门简单易学且功能强大的编程语言,广受程序员、数据分析师和AI工程师的青睐。本文系统讲解了如何使用Python的Django框架结合openpyxl库实现Excel...

用DataX实现两个MySQL实例间的数据同步

DataXDataX使用Java实现。如果可以实现数据库实例之间准实时的...

MySQL数据库知识_mysql数据库基础知识

MySQL是一种关系型数据库管理系统;那废话不多说,直接上自己以前学习整理文档:查看数据库命令:(1).查看存储过程状态:showprocedurestatus;(2).显示系统变量:show...

如何为MySQL中的JSON字段设置索引

背景MySQL在2015年中发布的5.7.8版本中首次引入了JSON数据类型。自此,它成了一种逃离严格列定义的方式,可以存储各种形状和大小的JSON文档,例如审计日志、配置信息、第三方数据包、用户自定...

取消回复欢迎 发表评论: