【Python】可视化KITTI激光雷达点云绘制立体框

news2024/11/14 19:00:09

前言

最近在复现PointRCNN论文过程中发现没有可视化代码,于是查找资料找到了:
pointRCNN 结果可视化——tiatiatiatia

按照参考链接下载代码【轮子库】并可视化成功了
在这里插入图片描述
在这里插入图片描述

mayavi库的学习

主要是利用了mlab模块:

Mayavi2 旨在提供一个简单、可交互的3D数据或3D绘图的可视化。其做法如下:
(可选)一个丰富的用户界面,可以和数据、对象进行交互。简洁清晰的Python接口,以及可以使用类似于matlab和matplotlib的3D可视化函数(参考:ref:mlab ),或者面向对象的交互界面。其底层封装VTK,但是学习它并不是必须的。此外,Mayavi2是一个可复用的工具箱,您可以用不同的方法整合到您的库或者应用中,结合Envisage应用程序框架组装成特定领域的工具。

import os
import numpy as np
import mayavi.mlab as mlab

rootpath = "/home/rock/PointRCNN/kitti_object_vis/"
datapath = os.path.join(rootpath, "data/object/training/velodyne/")
data = np.fromfile(datapath + "000000.bin", dtype=np.float32).reshape(-1, 4)
fig = mlab.figure(figure=None,
                  bgcolor=(0, 0, 0),
                  fgcolor=None,
                  engine=None,
                  size=(1600, 1000))
#mayavi显示data颜色按照高度改变
mlab.points3d(data[:, 0],
              data[:, 1],
              data[:, 2],
              data[:, 2],
              mode="point",
              colormap="gnuplot",
              scale_factor=1,
              figure=fig)
mlab.points3d(0, 0, 0, color=(1, 1, 1), mode="sphere", scale_factor=0.5)
axes = np.array(
    [[2.0, 0.0, 0.0, 0.0], [0.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 0.0]],
    dtype=np.float64,
)
mlab.plot3d(
    [0, axes[0, 0]],
    [0, axes[0, 1]],
    [0, axes[0, 2]],
    color=(1, 0, 0),
    tube_radius=None,
    figure=fig,
)
mlab.plot3d(
    [0, axes[1, 0]],
    [0, axes[1, 1]],
    [0, axes[1, 2]],
    color=(0, 1, 0),
    tube_radius=None,
    figure=fig,
)
mlab.plot3d(
    [0, axes[2, 0]],
    [0, axes[2, 1]],
    [0, axes[2, 2]],
    color=(0, 0, 1),
    tube_radius=None,
    figure=fig,
)
fov = np.array(
    [[20.0, 20.0, 0.0, 0.0], [20.0, -20.0, 0.0, 0.0]],
    dtype=np.float64  # 45 degree
)

mlab.plot3d(
    [0, fov[0, 0]],
    [0, fov[0, 1]],
    [0, fov[0, 2]],
    color=(1, 1, 1),
    tube_radius=None,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [0, fov[1, 0]],
    [0, fov[1, 1]],
    [0, fov[1, 2]],
    color=(1, 1, 1),
    tube_radius=None,
    line_width=1,
    figure=fig,
)

# draw square region
TOP_Y_MIN = -21
TOP_Y_MAX = 21
TOP_X_MIN = 0
TOP_X_MAX = 40


x1 = TOP_X_MIN
x2 = TOP_X_MAX
y1 = TOP_Y_MIN
y2 = TOP_Y_MAX
mlab.plot3d(
    [x1, x1],
    [y1, y2],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [x2, x2],
    [y1, y2],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [x1, x2],
    [y1, y1],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
mlab.plot3d(
    [x1, x2],
    [y2, y2],
    [0, 0],
    color=(0.5, 0.5, 0.5),
    tube_radius=0.1,
    line_width=1,
    figure=fig,
)
# mlab.orientation_axes()

#初始化正方体的8个点
p1 = np.array([2, 4, 2])
p2 = np.array([2, 0, 2])
p3 = np.array([0, 0, 2])
p4 = np.array([0, 4, 2])

p5 = np.array([2, 4, -1])
p6 = np.array([2, 0, -1])
p7 = np.array([0, 0, -1])
p8 = np.array([0, 4, -1])
b = np.array([p1, p2, p3, p4, p5, p6, p7, p8])
#平移正方体
b[:, 0] += 5
b[:, 1] += 1
for k in range(0, 4):
    # http://docs.enthought.com/mayavi/mayavi/auto/mlab_helper_functions.html
    i, j = k, (k + 1) % 4
    mlab.plot3d(
        [b[i, 0], b[j, 0]],
        [b[i, 1], b[j, 1]],
        [b[i, 2], b[j, 2]],
        color=(0, 1, 0),
        tube_radius=None,
        line_width=2,
        figure=fig,
    )

    i, j = k + 4, (k + 1) % 4 + 4
    mlab.plot3d(
        [b[i, 0], b[j, 0]],
        [b[i, 1], b[j, 1]],
        [b[i, 2], b[j, 2]],
        color=(0, 1, 0),
        tube_radius=None,
        line_width=2,
        figure=fig,
    )

    i, j = k, k + 4
    mlab.plot3d(
        [b[i, 0], b[j, 0]],
        [b[i, 1], b[j, 1]],
        [b[i, 2], b[j, 2]],
        color=(0, 1, 0),
        tube_radius=None,
        line_width=2,
        figure=fig,
    )
label = "car"
mlab.text3d(
    b[1, 0],
    b[1, 1],
    b[1, 2],
    label,
    scale=1,
    color=(1, 0, 0),
    figure=fig,
)
mlab.view(
    azimuth=180,
    elevation=50,
    focalpoint=[12.0909996, -1.04700089, -2.03249991],
    distance=62.0,
    figure=fig,
)
mlab.show()

在这里插入图片描述
tip:另外发现了VSCODE中代码缩进的技巧,非常好用,尤其是对于CV大法过来的代码。

pip install yapf

打开setting 搜索 python.formatting.provider

在这里插入图片描述
选中需要自动格式化缩进的代码点击右键 点击Format Selection就好了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隐私计算商业化,原语科技的开源路线是否最优解?

2023年2月,《数字中国建设整体布局规划》出台,首次对我国数字中国建设提出了宏观规划。其中,尤为值得关注的是隐私计算领域。 隐私计算能够实现数据的所有权和使用权分离,可以在保护个人数据隐私安全的基础上,推动数字…

《Linux0.11源码解读》理解(一) 从开机到加载bootsec

计算机启动时, 内存(RAM)没有任何东西, 自然也无法跑操作系统. 但是可以执行固化在ROM里面的BIOS程序. 在按下电源键的一刻. CPU的cs和ip寄存器硬件被设置为0xf000和0xfff0, 于是cs:ip也就指向0xffff0这个地址, 而这个地址正是指向了ROM的BIOS范围(这里是0xfe000~0xfffff, 20根…

Zuul源码解析(二)

Zuul 的自动配置 ZuulProxyAutoConfiguration 如何触发 如上图,在 spring.factory 中配置 ZuulProxyAutoConfiguration 自动配置了,直接点进去 如上图所示,发现这有个条件注解,需要有 org.springframework.cloud.netflix.zuul.Zu…

Kubernetes 核心对象

Kubernetes 中的所有内容都被抽象为“资源”,如 Pod、Service、Node 等都是资源。“对象”就是“资源”的实例,是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。它们主要描述了如下信息: 哪些容器化应用正在运行(…

ObjectARX中的坐标系以及坐标转换

1 AutoCAD中的坐标系种类 WCS World Coordinate System. The “reference” coordinate system. All other coordinate systems are defined relative to the WCS, which never changes. Values measured relative to the WCS are stable across changes to other coordinate s…

Nginx之正则表达式、location匹配简介以及rewrite重写

引言 在Nginx已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会遇到很多跳转(重写URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的Apache服务器&#xff…

力扣---LeetCode203. 移除链表元素

文章目录 前言203. 移除链表元素链接方法一:直接删除1.1 注意:1.2 各种情况的流程图:方法二:遍历将非val的节点尾插2.1 流程图:2.2 注意: 总结 前言 你坚持的东西 总有一天会反过来拥抱你 本章的内容是力扣…

智安网络|数据安全问题频发,首推云墙·网站综合防御系统

近期,企业数据安全问题频发,数据安全依旧是企业目前面临的重大风险之一。作为网络安全公司,智安网络以专业的技术团队和丰富的行业经验,为企业和个人提供安全可靠的数据保护服务 案例一: 大学生学习软件超星学习通(下称…

JUC高级十二-ReentrantLock、ReentrantReadWriteLock、StampedLock

无锁→独占锁→读写锁→邮戳锁 1. 关于锁的大厂面试题 你知道Java里面有哪些锁?你说你用过读写锁,锁饥饿问题是什么?有没有比读写锁更快的锁?StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制策略你知道吗&#xff1…

Spring的创建与Bean对象的存取

文章目录:一.Spring项目的创建1.先创建maven项目 2.添加国内源 3.添加spring依赖 4.创建spring配置文件 5.创建启动类 二.Bean对象的创建和读取1.Bean对象的创建与存储方式(1)类注解 (2)方法注解 (3&#x…

Java中的容器大杂烩-集合

Java中的容器大杂烩-集合 一、 集合引入二、集合框架体系三 、Collection 接口四 、List集合4.1 ArrayList类4.2 LinkedList类4.3 Vector类4.4 ArrayList 、 LinkedList 和 Vector区别 五 、Set集合5.1 HashSet类5.2 TreeSet5.3 LinkedHashSet类 六、List和Set区别七 、Map集合…

制造业巨头遭黑客勒索400万美元,企业如何防范勒索病毒攻击?

4月7日,台湾电脑制造商微星(简称MSI)发布公开声明,证实其部分网络信息系统遭受了勒索病毒攻击。一个名为“Money Message”的新网络黑客团伙称其从微星的网络系统中窃取了1.5TB的数据,其中包括微星数据库的屏幕截图、源…

YAML /Excel /CSV?自动化测试测试数据管理应用,测试老鸟总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试无论是…

webhub123 前端技术社区和技术交流学习网站导航

整理了学习前端技术可以参考学习和技术交流的一些网站集合,全部收录到 webhub123 前端技术社区和技术交流学习网站导航http://​www.webhub123.com/#/home/detail?projectHashid30929575&ownerUserid22053727 整理后的效果如下,我们已经按照不同类…

React Props

state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。 所以,有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。 props 使用 Demo.js : import React from reactfunct…

智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络)

智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络) 目录 智能学习 | MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现ACO-BP多变量时间序列预测(蚁群算法优化BP神经网络…

数据集合注入

集合注入 前面我们已经能完成引入数据类型和简单数据类型的注入,但是还有一种数据类型集合,集合中既可 以装简单数据类型也可以装引用数据类型,对于集合,在Spring中该如何注入呢? 先来回顾下,常见的集合类型有哪些…

Vue电商项目--应用开发详解

vue-cli脚手架初始化项目 首先,页面上新建一个文件夹。然后打开命令端口 vue create app 选择Default ([Vue 2] babel, eslint) 然后把项目拖拽到vscode中。项目目录看一下 脚手架项目的目录 node_modules:放置项目依赖的地方 public:一般放置一些共用的静态资源&a…

数据采集方式有哪些,都有什么特点?

随着中国社会的进一步发展,各行各业都得到了一定程度的进步。进入21世纪以来,大数据、人工智能等行业的飞速发展,极大的带动全社会进步。但是,在一些传统行业内部,还存在这落后的东西,例如数据采集还是沿用…

【机器学习】P24 随机森林算法(1) 实现 “鸢尾花” 预测

随机森林算法 Random Forest Algorithm 随机森林算法随机森林算法实现分类鸢尾花 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble Learning)方法,它由多个决策树组成,是一种分类、回…