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. js学习(4) 函数
  3. DevOps笔记-04:DevOps工具和文化缺一不可
  4. FAT AP和FIT AP 区别 (无线篇)
  5. F#学习之路(3) 如何组织程序(下)
  6. css3加载ing动画
  7. 计算机快捷键知识点,电脑常用快捷键基础的知识点(12页)-原创力文档
  8. opencv机器学习线性回归_Python机器学习之?线性回归入门(二)
  9. 转 13种最为荒谬的编程语言(Bugku 加密)
  10. Java Web 开发详解
  11. LeetCode-179:数组自动排序工具Arrays.sort(),比较器Comparator的正确打开方式
  12. Qt - QVariant
  13. 小生我怕怕私房版OllyDBG全自动下断版
  14. 微软服务器工程师认证,微软认证的系统工程师(MCSE)
  15. Office2007注册码
  16. 白城师范学院计算机系鲍金玲,企业绩效考核方法的比较与借鉴
  17. 青年大学习里的粉色玩偶介绍
  18. 思维导图告诉你怎样正确的做笔记?
  19. 数字联盟可信ID 3.0 正式上线升级 用真实数据助力企业增长
  20. Nacos本地进行了远程配置而远程未配置相关信息而导致应用报内存泄漏问题的异常

热门文章

  1. ModStart-UEditor 开源,让 UEditor 重新焕发活力
  2. 关于全球央行数字货币实验的若干认识与思考
  3. Android 7.0 分屏原理分析
  4. 详解JavaScript三元运算符的使用方法
  5. 树莓派连接电视显示器或电脑显示器,显示无信号
  6. 如何使用微服务+vue项目进行模块化开发
  7. 能完全通过声音控制的,除了你家楼道里的灯泡,原来还有这么多产品
  8. EMV/PBOC 解析(二) 卡片数据读取
  9. python3.7 buildroot numpy错误_遇到python3.7版本下pyinstaller打包无限出错,求大神指导...
  10. 就算有“中台”模式,企业也应该重视“大部头”架构设计