潍坊学校网站建设,2024年新闻摘抄,搜索引擎论文3000字,自己设计t恤的平台1.点云读入
读入文件#xff08;配套点云下载链接#xff09;
# 读取点云
pcd o3d.io.read_point_cloud(point_cloud_00000.ply)配套点云颜色为白色#xff0c;open3d的点云显示默认背景为白色#xff0c;所以将点云颜色更改为黑色
pcd.colors o3d.utilit…1.点云读入
读入文件配套点云下载链接
# 读取点云
pcd o3d.io.read_point_cloud(point_cloud_00000.ply)配套点云颜色为白色open3d的点云显示默认背景为白色所以将点云颜色更改为黑色
pcd.colors o3d.utility.Vector3dVector(np.zeros(np.array(pcd.colors).shape))显示点云
o3d.visualization.draw_geometries([pcd])2.平面分割
RANSAC方法寻找最大平面RANSAC方法可以在干扰点存在的情况下拟合数据需要给定拟合方程通过在数据中随机选取指定个数的点来求解方程参数然后看所有数据中有多少数据满足所求解得到的方程如果数量超过设定阈值就完成拟合注意RANSAC方法随机选点所以结果会具有一定的随机性特别是干扰点较多的时候两次运行可能会得到不一样的结果
plane_model, inliers pcd.segment_plane(distance_threshold1 * 1e-3,ransac_n3,num_iterations1000)关键参数 distance_threshold点到平面的最小距离越小结果越精准ransac_n求解平面方程所需的随机点个数num_iterations随机平面被采样和验证的次数随机选取点的次数越大越可能得到正确结果但会越慢 返回参数 plane_model平面标准方程参数将平面返回为abcd使得对于平面上的每个点xyzinliers内点满足平面方程的点的索引列表
[a, b, c, d] plane_model
print(fPlane equation: {a:.2f}x {b:.2f}y {c:.2f}z {d:.2f} 0)Plane equation: 0.00x -0.01y 1.00z -0.44 03.内点提取与可视化显示
提取内点并涂色
inlier_cloud pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([1.0, 0, 0])保留外点通过内点索引取反
outlier_cloud pcd.select_by_index(inliers, invertTrue)内点外点同时可视化
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud])4.整体代码
import open3d as o3d
import numpy as nppcd o3d.io.read_point_cloud(duanmian/1/point_cloud_00000.ply)
points np.array(pcd.points)
colors np.zeros(np.array(pcd.points).shape[0])
pcd.colors o3d.utility.Vector3dVector(np.zeros(np.array(pcd.colors).shape))
#o3d.visualization.draw_geometries([pcd])plane_model, inliers pcd.segment_plane(distance_threshold1 * 1e-3,ransac_n3,num_iterations1000)
[a, b, c, d] plane_model
print(fPlane equation: {a:.2f}x {b:.2f}y {c:.2f}z {d:.2f} 0)inlier_cloud pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([1.0, 0, 0])
outlier_cloud pcd.select_by_index(inliers, invertTrue)
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud])