点云处理技术之open3d第二篇:点云的基本操作篇——可视化降采样法向量裁剪和绘制点云
Posted 非晚非晚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点云处理技术之open3d第二篇:点云的基本操作篇——可视化降采样法向量裁剪和绘制点云相关的知识,希望对你有一定的参考价值。
下面分别介绍open3d的点云基本操作:
可视化、降采样、法向量、裁剪和绘制点云
。首先会统一给出代码和注释,然后分别对这些基本操作进行一一解释。
0. 代码解释
import open3d as o3d
import numpy as np
#*******************************点云的可视化***********************************
pcd = o3d.io.read_point_cloud("../test_data/fragment.ply") # 读取ply或者pcd文件
print(pcd) # 点云简单信息 》》PointCloud with 113662 points.
# print(np.asarray(pcd.points)) #打印点云
# 可视化点云
o3d.visualization.draw_geometries([pcd])
#*******************************点云降采样***********************************
print("Downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw_geometries([downpcd],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024])
#*******************************顶点法线估计***********************************
#重新计算,一般可视化操作都带有法线估计(可以不用重新计算)
print("Recompute the normal of the downsampled point cloud")
downpcd.estimate_normals(
search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
o3d.visualization.draw_geometries([downpcd],
zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024],
point_show_normal=True)
#*******************************访问顶点的法线***********************************
print("Print a normal vector of the 0th point")
print(downpcd.normals[0]) #打印第0个顶点的法线
# 打印10个点的法线估计
print("Print the normal vectors of the first 10 points")
print(np.asarray(downpcd.normals)[:10, :])
#*******************************点云的裁剪***********************************
print("Load a polygon volume and use it to crop the original point cloud")
vol = o3d.visualization.read_selection_polygon_volume(
"../test_data/Crop/cropped.json")
chair = vol.crop_point_cloud(pcd)
o3d.visualization.draw_geometries([chair],
zoom=0.7,
front=[0.5439, -0.2333, -0.8060],
lookat=[2.4615, 2.1331, 1.338],
up=[-0.1781, -0.9708, 0.1608])
#*******************************画点云***********************************
print("Paint chair")
chair.paint_uniform_color([1, 0.706, 0]) #给点云统一绘制颜色,RGB范围[0,1]
o3d.visualization.draw_geometries([chair],
zoom=0.7,
front=[0.5439, -0.2333, -0.8060],
lookat=[2.4615, 2.1331, 1.338],
up=[-0.1781, -0.9708, 0.1608])
1. 可视化点云
可视化点云如下:
按H键盘,可以输出一些常用的操作,如下所示。
[Open3D INFO] -- Mouse view control --
[Open3D INFO] Left button + drag : Rotate.
[Open3D INFO] Ctrl + left button + drag : Translate.
[Open3D INFO] Wheel button + drag : Translate.
[Open3D INFO] Shift + left button + drag : Roll.
[Open3D INFO] Wheel : Zoom in/out.
[Open3D INFO]
[Open3D INFO] -- Keyboard view control --
[Open3D INFO] [/] : Increase/decrease field of view.
[Open3D INFO] R : Reset view point.
[Open3D INFO] Ctrl/Cmd + C : Copy current view status into the clipboard.
[Open3D INFO] Ctrl/Cmd + V : Paste view status from clipboard.
...
2. 点云的降采样
open3d的降采样方法步骤为:
- 首先将点云体素化
- 用体素中所有点的
平均值替代体素中的值
。
降采样效果如下:
3. 顶点的法线估计
求顶点的法线估计是点云的基础操作。按N可以关闭或可视化法线。-和+分别缩短和延长法线长度。
一般可视化操作都带有法线估计(可以不用重新计算)。
法线估计的可视化效果如下:
radius = 0.1 和 max_nn = 30分别表示搜索半径和最大最近邻。所以它表示搜索半径为10cm,最多只考虑30个近领域点进行估计。
4. 访问顶点的法线
代码中第0个点的法线为:
Print a normal vector of the 0th point
[-0.21838377 -0.94240442 -0.25334252]
Print the normal vectors of the first 10 points
[[-0.21838377 -0.94240442 -0.25334252]
[-0.39147152 -0.43746664 -0.8095511 ]
[-0.00694405 -0.99478075 -0.10179902]
[-0.00399871 -0.99965423 -0.02598917]
[-0.93768261 -0.07378998 0.3395679 ]
[-0.43476205 -0.62438493 -0.64894177]
[-0.09739809 -0.9928602 -0.06886388]
[-0.11728718 -0.95516445 -0.27185399]
[-0.01038945 -0.99968858 -0.02268921]
[-0.00816546 -0.99965616 -0.02491762]]
5. 点云的裁剪
先读取json文件,通过json文件的polygon裁剪点云。
6. 绘制点云
paint_uniform_color表示给点云统一绘制颜色,RGB颜色范围为[0,1]。
以上是关于点云处理技术之open3d第二篇:点云的基本操作篇——可视化降采样法向量裁剪和绘制点云的主要内容,如果未能解决你的问题,请参考以下文章
点云处理技术之open3d第一篇:open3d的快速安装简介文件的读写和可视化操作