3D点云数据转为俯瞰图Python实现代码

您所在的位置:网站首页 三维映射摄像机有什么用 3D点云数据转为俯瞰图Python实现代码

3D点云数据转为俯瞰图Python实现代码

2023-06-01 07:59| 来源: 网络整理| 查看: 265

我主要是参考了英文博客来撰写本篇文章,仅作为个人学习笔记参考使用。

文章目录 一、点云数据二、图像与点云坐标三、创建点云数据的鸟瞰视图3.1 鸟瞰图的相关坐标轴3.2 限制点云数据范围3.3 将点位置映射到像素位置3.4 切换到新的零点3.5 像素值3.6 创建图像矩阵3.7 显示

一、点云数据

点云数据应该表示为一个numpy数组,有 N N N 行,至少 3 3 3 列。每一行对应一个点,用至少 3 3 3 个值表示它在空间中的位置 ( x , y , z ) (x,y,z) (x,y,z)。

在这里插入图片描述

如果点云数据来自激光雷达传感器,那么它可能会为每个点提供额外的值,例如“反射率”,这是对该位置障碍物反射回多少激光光束的测度。在这种情况下,点云数据可能是一个 N × 4 N\times 4 N×4 数组。

二、图像与点云坐标

在这里插入图片描述

关于图像需要注意的一些重要事项:

图像中的坐标值总是正的。

原点位于左上角。

坐标是整数值。

关于点云坐标需要注意的事项:

点云中的坐标值可以是正的,也可以是负的。

坐标可以取实数。

正x轴代表向前。

正y轴代表左。

正z轴代表向上。

三、创建点云数据的鸟瞰视图 3.1 鸟瞰图的相关坐标轴

为了创建鸟瞰图像,点云数据的相关轴将是x轴和y轴。

在这里插入图片描述

然而,正如我们从上图中看到的,我们必须小心,并考虑到以下几点:

x轴和y轴的意思正好相反。

x和y轴指向相反的方向。

你必须移动这些值,使 ( 0 , 0 ) (0,0) (0,0) 成为图像中最小的坐标值。

3.2 限制点云数据范围

通常只关注点云的特定区域是有用的。因此,我们想要创建一个过滤器,它只保留我们感兴趣的区域内的点。

因为我们是从顶部看数据,我们目的在于将其转换为图像,我将使用与图像轴更一致的方向。下面,我指定了相对于原点我想要关注的值范围。原点左边的任何东西都被认为是负的,右边的任何东西都被认为是正的。点云的x轴将被解释为向前方向(这将是我们的鸟瞰图像的向上方向)。

下面的代码将感兴趣的矩形设置为在原点两侧的跨度为10m,原点向前面的跨度为20m。

side_range=(-10, 10) # left-most to right-most fwd_range=(0, 20) # back-most to forward-most

接下来,我们创建一个过滤器,只保留实际位于我们指定的矩形内的点。

# EXTRACT THE POINTS FOR EACH AXIS x_points = points[:, 0] y_points = points[:, 1] z_points = points[:, 2] # FILTER - To return only indices of points within desired cube # Three filters for: Front-to-back, side-to-side, and height ranges # Note left side is positive y axis in LIDAR coordinates f_filt = np.logical_and((x_points > fwd_range[0]), (x_points -side_range[1]), (y_points


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3