本文主要是介绍代码:利用python+open3D实现FPS(farthest_point_sample)采样并可视化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本代码采用python+open3D实现,注意open3d可能会出现以下问题,建议在python3.6的情况下,则可以解决这个问题。
或者自己找一些其他博客解决。
以下是完整代码,关于FPS采样:
import open3d as o3d
import numpy as np
olderr = np.seterr(all='ignore')
def farthest_point_sample(point, npoint):N, D = point.shapexyz = point[:,:3]centroids = np.zeros((npoint,))distance = np.ones((N,)) * 1e10farthest = np.random.randint(0, N)for i in range(npoint):centroids[i] = farthestcentroid = xyz[farthest, :]dist = np.sum((xyz - centroid) ** 2, -1)mask = dist < distancedistance[mask] = dist[mask]farthest = np.argmax(distance, -1)point = point[centroids.astype(np.int32)]return point
pcd = o3d.io.read_point_cloud("piano_0015 - Cloud.pcd") #更改为你想要读取点云的路径
point = np.asarray(pcd.points)
point_size = point.shape[0]
sample_point = 2048 #输入想要采样的点的个数
pcd_point = farthest_point_sample(point, sample_point) # FPS采样
pcd_finl = o3d.geometry.PointCloud()
pcd_finl.points = o3d.utility.Vector3dVector(np.asarray(pcd_point))
finl_point_size = np.asarray(pcd_finl.points).shape[0]
print("原始点云点的个数为:", point_size)
print("下采样后点的个数为:", finl_point_size)
o3d.visualization.draw_geometries([pcd_finl], window_name="曲率下采样",width=1024, height=768,left=50, top=50,mesh_show_back_face=False)
下面是可视化的效果:
这篇关于代码:利用python+open3D实现FPS(farthest_point_sample)采样并可视化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!