首页 > 其他分享 >Open3D 点云的旋转与平移

Open3D 点云的旋转与平移

时间:2024-07-01 19:58:21浏览次数:3  
标签:平移 矩阵 旋转 Open3D 点云 o3d pcd

目录

一、概述

1.1旋转

1.2平移

二、代码实现

2.1实现旋转

2.2实现平移

2.3组合变换

三、实现效果

3.1原始点云

3.2变换后点云


一、概述

        在Open3D中,点云的旋转和平移是通过几何变换来实现的。几何变换可以应用于点云对象,使其在空间中移动或旋转到新的位置和方向。这些变换在许多计算机视觉和机器人应用中非常重要,比如在点云配准、物体跟踪、姿态估计等任务中。

1.1旋转

        旋转是一种绕某个轴或点进行的变换。旋转可以用旋转矩阵表示,通常由旋转角度(弧度)和旋转轴定义。在Open3D中,使用rotate函数实现旋转对点云进行旋转:

  1. 定义旋转矩阵
  • 使用欧拉角(XYZ顺序)
  • 使用旋转轴和旋转角
  1. 应用旋转矩阵
  • 使用rotate方法

它的第一个参数R  是一个旋转矩阵。由于3D物体的旋转可以通过多个参数形式来表示,Open3d提供了rotate函数,可以方便的将不同的参数变化为旋转矩阵。

  • 使用get_rotation_matrix_from_xyz从欧拉角(Euler angles)转换为矩阵(这里xyz也可以是yzx,zxy,xzy,zyx和yxz)。
  • 使用get_rotation_matrix_from_axis_angle从轴角(Axis-angle representation)转换
  • 使用get_rotation_matrix_from_quaternion从四元数进行转换

1.2平移

平移是一种将每个点移动相同距离和方向的变换。平移可以用一个平移向量表示。在Open3D中,可以通过以下方式对点云进行平移:

  1. 定义平移向量,一个包含 x, y, z 位移的数组
  2. 应用平移向量,使用translate方法

二、代码实现

2.1实现旋转

import open3d as o3d
import numpy as np

# 读取点云文件
pcd = o3d.io.read_point_cloud("path/to/your/pointcloud.pcd")

# 定义旋转角度(弧度)
rx = np.pi / 4  # 45度
ry = np.pi / 4  # 45度
rz = np.pi / 4  # 45度

# 计算旋转矩阵
R = pcd.get_rotation_matrix_from_xyz((rx, ry, rz))

# 应用旋转矩阵到点云
pcd.rotate(R, center=(0, 0, 0))  # 以点云的原点为中心进行旋转

# 可视化旋转后的点云
o3d.visualization.draw_geometries([pcd])

2.2实现平移

import open3d as o3d
import numpy as np

# 读取点云文件
pcd = o3d.io.read_point_cloud("path/to/your/pointcloud.pcd")

# 定义平移向量
translation = [1.0, 0.5, 0.25]

# 应用平移到点云
pcd.translate(translation)

# 可视化平移后的点云
o3d.visualization.draw_geometries([pcd])

2.3组合变换

import open3d as o3d
import numpy as np
import copy

# 读取点云文件
pcd = o3d.io.read_point_cloud("path/to/your/pointcloud.pcd")

# 复制点云用于变换
pcd_transformed = copy.deepcopy(pcd)

# 定义旋转角度(弧度)
rx = np.pi / 4  # 45度
ry = np.pi / 4  # 45度
rz = np.pi / 4  # 45度

# 计算旋转矩阵
R = pcd_transformed.get_rotation_matrix_from_xyz((rx, ry, rz))

# 应用旋转矩阵到点云
pcd_transformed.rotate(R, center=(0, 0, 0))  # 以点云的原点为中心进行旋转

# 定义平移向量
translation = [1.0, 0.5, 0.25]

# 应用平移到点云
pcd_transformed.translate(translation)

# 设置原始点云和变换后点云的颜色
pcd.paint_uniform_color([1, 0, 0])  # 原始点云设置为红色
pcd_transformed.paint_uniform_color([0, 1, 0])  # 变换后点云设置为绿色

# 创建坐标轴
axis = o3d.geometry.TriangleMesh.create_coordinate_frame(size=0.5, origin=[0, 0, 0])

# 可视化原始点云和变换后的点云,同时显示坐标轴
o3d.visualization.draw_geometries([pcd, pcd_transformed, axis])

解释

  1. 读取点云数据:从文件中读取点云数据。
  2. 复制点云:使用 Python 的 copy.deepcopy 方法复制点云,避免对原始点云进行直接操作。
  3. 定义旋转角度和计算旋转矩阵:使用 get_rotation_matrix_from_xyz 计算旋转矩阵。
  4. 应用旋转矩阵:通过 rotate 方法对点云进行旋转。
  5. 定义平移向量和应用平移:通过 translate 方法对点云进行平移。
  6. 设置颜色:为了区分原始点云和变换后的点云,设置不同的颜色。
  7. 创建坐标轴:使用 create_coordinate_frame 方法创建一个坐标轴。
  8. 可视化:同时显示原始点云、变换后的点云和坐标轴。

通过这些步骤,可以在Open3D中实现点云的旋转和平移操作,并直观地观察点云的变换效果。

三、实现效果

3.1原始点云

3.2变换后点云

标签:平移,矩阵,旋转,Open3D,点云,o3d,pcd
From: https://blog.csdn.net/qq_47947920/article/details/140094415

相关文章

  • lidar3607.2 雷达点云数据处理软件功能介绍
    V7.2.220240511获取软件安装包联系邮箱:[email protected],资源源于网络,本介绍用于学习使用,如有侵权请您联系删除!1.平台修复对不包含枝下高特征的单木进行枝下高提取时,生成的treedb枝下高字段产生异常记录,查看属性表时软件崩溃的问题;2.林业修复使用treedb作为种子点进行......
  • 点云处理中阶 RangeImages
    目录一、什么是深度图1、深度图的特点与生成二、深度图的应用1、深度图的应用三、深度图前沿应用四、PCL中定义的RangeImage1、从点云创建深度图从深度图中提取边界四、资料补充1、什么是莫尔条纹法莫尔条纹法的原理莫尔条纹法的应用莫尔条纹法的优势和局限优势......
  • 点云分割网络PointConv
    PDF:《PointConv:DeepConvolutionalNetworkson3DPointClouds》CODE:https://github.com/DylanWusee/pointconv一、大体内容PointConv是一种在非均匀采样下对3D点云进行卷积的运算,可以用来构建深度卷积网络,其将卷积核视为由权重函数和密度函数组成的三维点的局部坐标的非......
  • 六、在Qt下通过PCL在VTK9.3.0下显示自己的pcd点云文件
    前几天刚整理好VTK8.2.0,发现我们的项目使用的PCL自带的VTK是9.3.0的,脸黑了快VTK8.2.0可参考该篇博文:五、在Qt下加载QVTKWidget控件(VTK8.2.0),生成VisualStudio项目,显示点云(C++)没办法,重新搞下VTK9.3.0区别:VTK8.2.0采用的是拖拽QVTKWidget控件进行相应的操作;VTK9.3.0把这个......
  • OpenCV 双目三角法计算点云
    文章目录一、简介二、实现代码三、实现效果参考资料一、简介基于三角法计算点坐标的过程类似于我们人类眼睛观察事物的过程:如上图所示,通过两个相机观察到同一位置,我们可以通过两个相机得到这一位置的投影坐标(ur,vr),(ul,vl)......
  • 基于RandLA-Net深度学习模型的激光点云语义分割
    一、场景要素语义分割部分的文献阅读笔记        RandLA-Net是一种高效、轻量级的神经网络,其可直接逐点推理大规模点云的语义标签。RandLA-Net基于随机点采样获得了显著的计算和内存效率,并采用新的局部特征聚合模块有效地保留了几何细节,弥补了随机采样可能丢失关键特......
  • 点云特征描述子PFH与FPFH,详细推导过程(绝对能看懂!)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言原理示意图1、局部坐标系的建立2、描述子三元素具体求法。推导α......
  • colmap大场景稀疏重建记录:部分照片畸变导致sfm生成的稀疏点云扭曲
    一、问题如题,要进行一个大场景的3DGS重建,数据集来自于某工地现场(大约3000张照片),数据集拍摄于同一个相机,按照国际惯例,3DGS需要输入一个稀疏点云,所以首先利用colmap进行稀疏重建。进行特征提取,特征匹配(colmap官网建议1000-10000张图的特征匹配使用vocabtree),稀疏重建以后,发现场......
  • 基于Open3D的点云处理20- 基于Visualizer类自定义可视化
    1.自定义可视化官网测试用例Open3D/examples/python/visualization/customized_visualization.py自定义可视化工具窗口-Visualizer类Visualizer可视化基础操作defcustom_draw_geometry(pcd):#Thefollowingcodeachievesthesameeffectas:#o3d.v......
  • 普通/下降幂多项式平移
    【普通多项式】已知\(f(x)=\displaystyle\sum_{i=0}^{n}a_ix^i\),求\(f(x+c)\)的系数。\[\begin{aligned}f(x+c)&=\sum_{i=0}^na_i(x+c)^i\\&=\sum_{i=0}^na_i\sum_{j=0}^i{i\choosej}x^jc^{i-j}\\&=\sum_{j=0}^n\dfrac{x^j}{j!}\sum_{i=j}^{n}i!......