Punktwolkenanwendungen gibt es überall: Roboter, autonome Fahrzeuge, Assistenzsysteme, Gesundheitswesen usw. Eine Punktwolke ist eine 3D-Darstellung, die sich für die Verarbeitung realer Daten eignet, insbesondere wenn die Geometrie der Szene/des Objekts erforderlich ist, wie z. B. die Entfernung, Form und Größe des Objekts.
Eine Punktwolke ist eine Menge von Punkten, die eine Szene in der realen Welt oder ein Objekt im Raum darstellen. Es handelt sich um eine diskrete Darstellung geometrischer Objekte und Szenen. Mit anderen Worten ist die Punktwolke PCD eine Menge von n Punkten, wobei jeder Punkt Pi durch seine 3D-Koordinaten dargestellt wird: 🎜🎜#Beachten Sie, dass Sie auch einige andere Funktionen hinzufügen können, um die Punktwolke zu beschreiben, wie z. B. RGB-Farbe, Normalen, usw. Beispielsweise können RGB-Farben hinzugefügt werden, um Farbinformationen bereitzustellen.
2. Punktwolkengenerierung
import numpy as np import matplotlib.pyplot as plt import open3d as o3d
number_points = 5 pcd = np.random.rand(number_points, 3)# uniform distribution over [0, 1) print(pcd)
# Create Figure: fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.scatter3D(pcd[:, 0], pcd[:, 1], pcd[:, 2]) # label the axes ax.set_xlabel("X") ax.set_ylabel("Y") ax.set_zlabel("Z") ax.set_title("Random Point Cloud") # display: plt.show()
Random Point Cloud Visualization
2.2 Sample Point Cloud
# 🎜🎜# Die direkte Verarbeitung von 3D-Modellen braucht Zeit. Daher ist die Abtastung von Punktwolken aus ihren dreidimensionalen Oberflächen eine mögliche Lösung. Beginnen wir mit dem Importieren des Hasenmodells aus dem Open3D-Datensatz:bunny = o3d.data.BunnyMesh() mesh = o3d.io.read_triangle_mesh(bunny.path)
mesh = o3d.io.read_triangle_mesh("data/bunny.ply")
Zeigen Sie als Nächstes das 3D-Modell an, um zu sehen, wie es aussieht. Sie können Ihre Maus bewegen, um die Ansicht aus verschiedenen Blickwinkeln zu betrachten.
# Visualize: mesh.compute_vertex_normals() # compute normals for vertices or faces o3d.visualization.draw_geometries([mesh])
# Sample 1000 points: pcd = mesh.sample_points_uniformly(number_of_points=1000) # visualize: o3d.visualization.draw_geometries([pcd])
Open3D bietet eine Reihe von Funktionen für die RGB-D-Bildverarbeitung. Um mithilfe von Open3D-Funktionen eine Punktwolke aus RGB-D-Daten zu erstellen, importieren Sie einfach zwei Bilder, erstellen ein RGB-D-Bildobjekt und berechnen schließlich die Punktwolke wie folgt:
# Save into ply file: o3d.io.write_point_cloud("output/bunny_pcd.ply", pcd)
Farbige Punktwolke generiert aus RGB-D-Bild
#
# read the color and the depth image: color_raw = o3d.io.read_image("../data/rgb.jpg") depth_raw = o3d.io.read_image("../data/depth.png") # create an rgbd image object: rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth( color_raw, depth_raw, convert_rgb_to_intensity=False) # use the rgbd image to create point cloud: pcd = o3d.geometry.PointCloud.create_from_rgbd_image( rgbd_image, o3d.camera.PinholeCameraIntrinsic( o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)) # visualize: o3d.visualization.draw_geometries([pcd])
这里,我们首先使用Open3D.io.read_point_cloud()函数从.ply文件中读取点云,该函数返回一个Open3D.PointCloud对象。现在我们只需要使用NumPy.asarray()函数将表示点的Open3D.PointCloud.points特征转换为NumPy数组。最后,我们像上面那样显示获得的数组。
# Read the bunny point cloud file: pcd_o3d = o3d.io.read_point_cloud("../data/bunny_pcd.ply") # Convert the open3d object to numpy: pcd_np = np.asarray(pcd_o3d.points) # Display using matplotlib: fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.scatter3D(pcd_np[:, 0], pcd_np[:, 2], pcd_np[:, 1]) # label the axes ax.set_xlabel("X") ax.set_ylabel("Y") ax.set_zlabel("Z") ax.set_title("Bunny Point Cloud") # display: plt.show()
使用 Matplotlib 显示的兔子点云
在本教程中,我们学习了如何创建和可视化点云。在接下来的教程中,我们将学习如何处理它们。
Das obige ist der detaillierte Inhalt vonPython: So erstellen und visualisieren Sie Punktwolken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!