如有错误,恳请指出。


点云是在一个三维空间中由一堆无序的点所组成,那么在三维中理所应该可以在任意的二维平面:Ax + By + Cz + D = 0 中进行投影,获得不同平面中的二维视图。下面讲给出基础知识与手动推导过程,并使用代码进行验证推导结果。

文章目录

  • 1. 基础知识
  • 2. 手动推导
  • 3. 代码验证

1. 基础知识

这里的立体几何基础理论详细见参考资料


2. 手动推导

这个问题其实可以简化为,点P在任意平面上的投影坐标,推导过程如下所示:


总结:根据坐标(x0, y0, z0),即可求出参数t,随后便可求出在新平面上的投影坐标


3. 代码验证

参考代码:

"""
代码功能: 将3d点云投影到xyz等不同平面上
"""import numpy as np
import mayavi.mlab as mlab# 参数说明:
# - points:点云数据
# - flat:3d平面的参数,Ax+By+Cz+D=0,参数即为(A,B,C,D)
#         xy平面:(0 0 1 0) | xz平面:(0 1 0 0) | yz平面:(1 0 0 0)
def project_2d(points, flat):# 点云投影平面A, B, C, D = flatdistance = A**2 + B**2 + C**2t = -(A*points[:, 0] + B*points[:, 1] + C*points[:, 2] + D)/distancex = A*t + points[:, 0]y = B*t + points[:, 1]z = C*t + points[:, 2]project_point = np.array([x, y, z]).Tprint(project_point.shape)# 投影展现mlab.figure(bgcolor=(0, 0, 0), size=(640, 640))mlab.points3d(x, y, z, y, mode='point', colormap='spectral')mlab.show()if __name__ == '__main__':txt_path = r"E:\workspace\PointCloud\Pointnet2\data\modelnet40_normal_resampled\airplane\airplane_0001.txt"points = np.loadtxt(txt_path, delimiter=',')project_2d(points, (0, 0, 1, 0))
  • 1)在xy平面上的投影
project_2d(points, (0, 0, 1, 0))
mlab.points3d(x, y, z, y, mode='point', colormap='spectral')

结果展示:

  • 2)在xz平面上的投影
project_2d(points, (0, 1, 0, 0))
mlab.points3d(x, y, z, x, mode='point', colormap='spectral')

结果展示:

  • 3)在yz平面上投影
project_2d(points, (1, 0, 0, 0))
mlab.points3d(x, y, z, y, mode='point', colormap='spectral')

结果展示:

ps:这里的平面设置可以是任意平面,点云可以在任意平面上投影


参考资料:

1. python三维点云投影(一)

点云在任意平面上获取二维投影相关推荐

  1. 获取任意微信公众号二维码方法

    [获取任意微信公众号二维码方法] 复制下面链接在浏览器里打开,iOS微信打开会报错. https://open.weixin.qq.com/qr/code?username=PlayerYK 将以上链 ...

  2. 用 java 读取获取 二维码上的文字内容

    最近公司做一个物联网的项目,由于设备硬件编码复杂,因此业务人员提出能否使用手机扫一扫识别设备上二维码获取二维码上的编号,进而录入设备信息,在手机app上操作.因此写了如下的程序,希望对大家有帮助. 1 ...

  3. 2D平面上的二连杆机器臂反向运动模拟(matlab代码示例)

    2D平面上的二连杆机器臂反向运动模拟 matlab上先下载 robotics system toolbox工具箱 robot = rigidBodyTree('DataFormat','column' ...

  4. PHP 如何获取二维数组中某个key的集合(高性能查找)

    分享下PHP 获取二维数组中某个key的集合的方法. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码: $user = array( 0 => array( 'id' => 1 ...

  5. PHP获取二维数组中某一列的值集合

    PHP还是比较常用的,于是我研究了一下PHP二维数组,下面通过本文给大家介绍PHP获取二维数组中某一列的值集合,对php数组二维数组的值相关知识感兴趣的朋友一起学习吧 PHP还是比较常用的,于是我研究 ...

  6. 微信小程序获取二维码scene报错40129

    java后端向微信服务端https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN请求获取带参二维码的时候,由于 ...

  7. python读取二维数组的行列数_Python获取二维数组的行列数的2种方法

    Python获取二维数组的行列数的2种方法 这篇文章主要介绍了Python获取二维数组的行列数的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 ...

  8. vue二维码解码器(增加上传二维码之后弹窗预览)

    对之前的二维码解码器做的功能扩展, 增加上传成功时弹框显示二维码图片预览,弹框使用vant ui 实现 vanr ui 文档地址 https://youzan.github.io/vant/#/zh- ...

  9. uniapp之小程序扫码如何获取二维码里的参数

    内容需求: 上一篇文章说道需要动态生成一张海报,海报里带有一张动态参数的二维码,那么你将这张海报分享出去,其他人就会扫描海报中的二维码并跳转到对应的小程序页面获取到对应的参数 开发准备: 在开发过程中 ...

最新文章

  1. 你写的ML代码占多少内存?这件事很重要,但很多人还不懂
  2. 成功解决ValueError: not enough values to unpack (expected 2, got 1)
  3. spark 源码分析之十三 -- SerializerManager剖析
  4. SQL 结合CASE WHEN 实现二维统计
  5. scrollview 中用listview的方法
  6. 13. jQuery - 设置内容和属性
  7. 反射进行.newInstance()方法,报错Caused by: java.lang.NoSuchMethodException:XXXX.<init>()
  8. 眨眼视频制作与生成活体视频生成
  9. Ubuntu17.04系统安装必备软件与存在的问题
  10. 基于历史使用数据的虚拟机动态整合研究( 文献阅读与问题理解)
  11. gcc常用命令与gcc编译器背后的故事
  12. clickhouse 生产集群部署之坑坑洼洼(二)
  13. mysql 客户端SSL错误2026 (HY000)
  14. 中国航天科工发布“天玥”系列移动计算产品
  15. 软件测试教学案例,软件测试案例教程
  16. 网络安全菜鸟学习之漏洞篇——sql(一)
  17. 与好友游湿地记往事二三
  18. 对计算机专业的兴趣写一篇作文,以兴趣爱好为话题的作文五篇
  19. ADSL Modem防火墙完全攻略
  20. fts:路径 XXX 已在工作区 XXX;XXX 中映射

热门文章

  1. MBA面试系列之----MBA中文面试流程
  2. 计算机和机械课程有关联吗,机械工程及自动化有哪些课程
  3. 企服三会 | 企服三会首发,洞见2018中国移动办公发展趋势
  4. 百度贴吧界面html程序代码,python爬虫例题:爬取百度贴吧评论区图片和视频
  5. 【计算机算法】装箱问题
  6. sql连接显示未能连接服务器,SQL Server 2008无法连接到服务器的操作教程
  7. 使用爬虫下载汽车之家高清大图
  8. 数据资产管理体系方案
  9. OA系统品牌普及:OA公司有哪些
  10. hp笔记本的计算机在哪里,惠普电脑型号在哪里看