目的:把下图的三维空间的墙壁点云分割开,最后的效果如下图
思路:先把点云转成二维的点云,然后找到四个角的点的位置,然后根据4个点的之间两两连成的线段,来判断每个点和每条线段之间的距离,从而得到每个点处于哪个线段上,这样就最终得到了三个面或四个面的三维点云的分类数据。
import open3d as o3d
import numpy as np
import pyransac3d as pyrscdef line_fit(pcd,classified_points):"""直线拟合"""for i, points in classified_points.items():# 创建点云对象point_cloud = o3d.geometry.PointCloud()# 将numpy点云数据赋值给点云对象point_cloud.points = o3d.utility.Vector3dVector(points)print("->正在直线拟合...")mesh_cylinders = []line = pyrsc.Line()# A:直线的斜率,B:直线的截距,inliers:内点索引,# thresh:内点的距离阈值# maxIteration:RANSAC算法