RGBD图像转3D点云
ztj100 2024-12-12 16:15 15 浏览 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/
- 上一篇:机器学习十大算法案例
- 下一篇:标量、向量、矩阵、张量之间的区别和联系
相关推荐
- 使用Python编写Ping监测程序(python 测验)
-
Ping是一种常用的网络诊断工具,它可以测试两台计算机之间的连通性;如果您需要监测某个IP地址的连通情况,可以使用Python编写一个Ping监测程序;本文将介绍如何使用Python编写Ping监测程...
- 批量ping!有了这个小工具,python再也香不了一点
-
号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友。在咱们网工的日常工作中,经常需要检测多个IP地址的连通性。不知道你是否也有这样的经历:对着电脑屏...
- python之ping主机(python获取ping结果)
-
#coding=utf-8frompythonpingimportpingforiinrange(100,255):ip='192.168.1.'+...
- 网站安全提速秘籍!Nginx配置HTTPS+反向代理实战指南
-
太好了,你直接问到重点场景了:Nginx+HTTPS+反向代理,这个组合是现代Web架构中最常见的一种部署方式。咱们就从理论原理→实操配置→常见问题排查→高级玩法一层层剖开说,...
- Vue开发中使用iframe(vue 使用iframe)
-
内容:iframe全屏显示...
- Vue3项目实践-第五篇(改造登录页-Axios模拟请求数据)
-
本文将介绍以下内容:项目中的public目录和访问静态资源文件的方法使用json文件代替http模拟请求使用Axios直接访问json文件改造登录页,配合Axios进行登录请求,并...
- Vue基础四——Vue-router配置子路由
-
我们上节课初步了解Vue-router的初步知识,也学会了基本的跳转,那我们这节课学习一下子菜单的路由方式,也叫子路由。子路由的情况一般用在一个页面有他的基础模版,然后它下面的页面都隶属于这个模版,只...
- Vue3.0权限管理实现流程【实践】(vue权限管理系统教程)
-
作者:lxcan转发链接:https://segmentfault.com/a/1190000022431839一、整体思路...
- swiper在vue中正确的使用方法(vue中如何使用swiper)
-
swiper是网页中非常强大的一款轮播插件,说是轮播插件都不恰当,因为它能做的事情太多了,swiper在vue下也是能用的,需要依赖专门的vue-swiper插件,因为vue是没有操作dom的逻辑的,...
- Vue怎么实现权限管理?控制到按钮级别的权限怎么做?
-
在Vue项目中实现权限管理,尤其是控制到按钮级别的权限控制,通常包括以下几个方面:一、权限管理的层级划分...
- 【Vue3】保姆级毫无废话的进阶到实战教程 - 01
-
作为一个React、Vue双修选手,在Vue3逐渐稳定下来之后,是时候摸摸Vue3了。Vue3的变化不可谓不大,所以,本系列主要通过对Vue3中的一些BigChanges做...
- Vue3开发极简入门(13):编程式导航路由
-
前面几节文章,写的都是配置路由。但是在实际项目中,下面这种路由导航的写法才是最常用的:比如登录页面,服务端校验成功后,跳转至系统功能页面;通过浏览器输入URL直接进入系统功能页面后,读取本地存储的To...
- vue路由同页面重定向(vue路由重定向到外部url)
-
在Vue中,可以使用路由的重定向功能来实现同页面的重定向。首先,在路由配置文件(通常是`router/index.js`)中,定义一个新的路由,用于重定向到同一个页面。例如,我们可以定义一个名为`Re...
- 那个 Vue 的路由,路由是干什么用的?
-
在Vue里,路由就像“页面导航的指挥官”,专门负责管理页面(组件)的切换和显示逻辑。简单来说,它能让单页应用(SPA)像多页应用一样实现“不同URL对应不同页面”的效果,但整个过程不会刷新网页。一、路...
- Vue3项目投屏功能开发!(vue投票功能)
-
最近接了个大屏项目,产品想在不同的显示器上展示大屏项目不同的页面,做出来的效果图大概长这样...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)