Python: RGBD转点云

  • 前言
  • 原理
  • 思路
  • 代码

前言

本篇记录Python将RGBD图像转点云的方法

原理

通过针孔相机投影原理:
p=1ZKPp = \frac{1}{Z}KP \\ \ \\ p=Z1​KP 
逆投影:
P=ZK−1pp:归一化像素坐标P:相机坐标K:相机内参矩阵P = ZK^{-1}p \\ \ \\ p: 归一化像素坐标 \\ P:相机坐标 \\ K:相机内参矩阵 P=ZK−1p p:归一化像素坐标P:相机坐标K:相机内参矩阵

思路

首先建立与RGBD图像同shape的像素坐标矩阵,随后逆投影公式将像素坐标矩阵的每个元素转换为相机坐标。

补充:由于上面的逆投影公式使用了矩阵逆和矩阵乘法,因此运算速度较慢。可以使用下面另一种思路:
u=fxXZ+cxv=fyYZ+cyu=f_x\frac{X}{Z}+cx \\ \ \\ v=f_y\frac{Y}{Z}+cy u=fx​ZX​+cx v=fy​ZY​+cy
可以看出像素横纵坐标u,v分别只与相机x,y坐标(以及Z)相关,因此可以使用下面的公式:
X=u−cxfxZX=\frac{u-cx}{f_x}Z X=fx​u−cx​Z
这样就可以避免矩阵运算

代码

矩阵法:

import cv2
import numpy as np
import open3d
import matplotlib.pyplot as plt
import timedef create_pcd_from_rgbd_using_matrix(rgb_img, depth_img):t1 = time.time()K = np.array([[927.16973877, 0, 651.31506348],[0, 927.36688232, 349.62133789],[0, 0, 1]])xlin = np.arange(rgb_img.shape[1])ylin = np.arange(rgb_img.shape[0])xmap, ymap = np.meshgrid(xlin, ylin)pixel_map = np.stack([xmap, ymap, np.ones_like(xmap)], axis=-1)cam_map = depth_img[:, :, np.newaxis] * (np.linalg.inv(K) @ pixel_map[:, :, :, np.newaxis]).squeeze()pcd_rgb = np.concatenate([cam_map, rgb_img[:, :, ::-1]], axis=-1).reshape([-1, 6])t2 = time.time()print('time: {}'.format(t2 - t1))return pcd_rgb

简化法:

import cv2
import numpy as np
import open3d
import matplotlib.pyplot as plt
import timedef create_pcd_from_rgbd(rgb_img, depth_img):"""*Compute point cloud from depth*"""t1 = time.time()depth = depth_imgrgb = rgb_img[:, :, ::-1]xmap = np.arange(1280)ymap = np.arange(720)xmap, ymap = np.meshgrid(xmap, ymap)points_z = depthpoints_x = (xmap - 651.31506348) * points_z / 927.16973877points_y = (ymap - 349.62133789) * points_z / 927.36688232pcd = np.stack([points_x, points_y, points_z], axis=-1)pcd_rgb = np.concatenate([pcd, rgb], axis=-1).reshape([-1, 6])t2 = time.time()print('time: {}'.format(t2 - t1))return pcd_rgb

Python: RGBD转点云相关推荐

  1. 姿态估计算法汇总|基于RGB、RGB-D以及点云数据

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Tom Hardy@知乎 来源丨https://zhuanlan.zhihu.com/p/305 ...

  2. python代码示例百度云-python利用百度云接口实现车牌识别的示例

    一个小需求---实现车牌识别. 目前有两个想法 1. 调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题) 2. 自己实现车牌识别算法(复杂) 一开 ...

  3. python百度云资源-Python开发视频百度云分享

    原标题:Python开发视频百度云分享 Python有很好的3D渲染库和游戏开发框架,有很多使用Python开发的游戏,如迪斯尼卡通城.黑暗之刃.常用PyGame.Pykyra等和一个PyWeek的比 ...

  4. [CentOS Python系列] 六.阿里云搭建Django网站详解

    本篇文章主要介绍讲述部署阿里云服务器Django网站环境,并通过IP地址访问网页的过程.写代码过程中往往第一步需要解决的就是配置开发环境,对于新手来说,这是非常头疼的事情,而当配置好之后或者对于老手来 ...

  5. [CentOS Python系列] 四.阿里云服务器CentOS连接远程MySQL数据库及pymsql

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  6. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  7. python英文词云代码_使用python实现个性化词云的方法

    先上图片 词云图 需要模板 pip install jieba pip install wordcloud 还需要安装另外两个东西这两个我也不太懂借鉴百度写上去的 pip install scipy ...

  8. python生成的词云没有图案_Python如何生成词云的方法

    这篇文章主要介绍了关于Python如何生成词云的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先 ...

  9. python视频免费百度云-Python开发视频百度云分享

    原标题:Python开发视频百度云分享 Python有很好的3D渲染库和游戏开发框架,有很多使用Python开发的游戏,如迪斯尼卡通城.黑暗之刃.常用PyGame.Pykyra等和一个PyWeek的比 ...

最新文章

  1. 测试篇|如何简便标定信号源电流大小?
  2. 一起感受不一样的项目沙盘
  3. 【设计模式】前端必懂EventEmitter
  4. MySQL 8.0版本安装后,安装目录下找不到my.ini文件
  5. jmeter 生成计数器_使用密码摘要生成器扩展JMeter
  6. 模拟驾驶能力输出,赋能客户提升稳定性信心
  7. 机器学习之Stacking原理与实战
  8. 那些高曝光的Annotation(@ComponentScan、@PropertySource与@PropertySources、@Import与ImportResource)
  9. PHP (20140510)深入浅出 JavaScript 变量、作用域和内存 v 0.5
  10. C#语言和SQL Server数据库技术_前四章错题
  11. c# 导出Excel
  12. cvThreshold() 阈值化
  13. Mirth学习笔记 - 建立Mirth通道
  14. java日历数据_JAVA 常用数据类型 之日历类
  15. ​手把手教你做个AR涂涂乐 ​
  16. 2022-02-15:扫地机器人。 房间(用格栅表示)中有一个扫地机器人。 格栅中的每一个格子有空和障碍物两种可能。 扫地机器人提供4个API,可以向前进,向左转或者向右转。每次转弯90度。 当扫地机
  17. android 键盘 定义,自定义全键盘-[Android_YangKe]
  18. standFord parser 和dependencyparser 使用说明及其符号含义
  19. JSCanvas画板
  20. 选购wordpress主机创建自己的博客

热门文章

  1. 语义分割看这一篇就够了!
  2. 最新USBPD3.1 快充协议
  3. 邦纳QS18VN6LAF光电传感器
  4. 2019年一级建造师考试重点总结之大体积混凝土工程
  5. 2022.11.6 第7次周报
  6. [时间投资法]第一章-为什么高效管理时间这样难
  7. 心电图机原理及电路超详细讲解
  8. 一文解决 Python读取文件的全部知识
  9. CAD填充图案从文件加载图案定义
  10. 电商交易系统核心技术