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
Punktwolken verwenden normalerweise 3D-Scanner (Laserscanner, Flugzeitscanner und strukturierte Lichtscanner) oder computergestütztes Design (CAD) Modellgenerierung. In diesem Tutorial erstellen und visualisieren wir zunächst eine zufällige Punktwolke. Anschließend werden wir mithilfe der Open3D-Bibliothek Punkte von der 3D-Oberfläche abtasten, um sie aus dem 3D-Modell zu generieren. Abschließend sehen wir uns an, wie man sie aus RGB-D-Daten erstellt. Beginnen wir mit dem Importieren der Python-Bibliothek: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
3, Open3D und NumPyManchmal müssen Sie verwenden Open3D und NumPy Wechseln Sie zwischen NumPy. Nehmen wir zum Beispiel an, wir möchten eine NumPy-Punktwolke zur Visualisierung in ein Open3D.PointCloud-Objekt konvertieren und Matplotlib verwenden, um ein 3D-Modell eines Kaninchens zu visualisieren. 3.1 Von NumPy zu Open3DIn diesem Beispiel erstellen wir 2000 zufällige Punkte mit der Funktion NumPy.random.rand(), die bei [0,1] Create beginnt eine Zufallsstichprobe aus einer Gleichverteilung. Anschließend erstellen wir ein Open3D.PointCloud-Objekt und setzen dessen Open3D.PointCloud.points-Funktion mithilfe der Funktion Open3D.utility.Vector3dVector() auf zufällige Punkte.#
# 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!