Aplikasi awan titik ada di mana-mana: robot, kereta pandu sendiri, sistem bantuan, penjagaan kesihatan, dsb. Awan titik ialah perwakilan 3D yang sesuai untuk memproses data dunia sebenar, terutamanya apabila geometri pemandangan/objek diperlukan, seperti jarak, bentuk dan saiz objek.
Awan titik ialah set titik yang mewakili pemandangan dunia sebenar atau objek di angkasa. Ia adalah perwakilan diskret objek dan pemandangan geometri. Dalam erti kata lain, PCD awan titik ialah set n titik, di mana setiap titik Pi diwakili oleh koordinat 3Dnya: Tambahkan beberapa ciri lain untuk menerangkan awan titik, seperti warna RGB, normal, dsb. Contohnya, warna RGB boleh ditambah untuk memberikan maklumat warna.
2. Penjanaan awan titik
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()
Penggambaran Awan Titik Rawak
2.2 Awan Titik Persampelan
Diperlukan untuk pemprosesan langsung 3D masa model. Oleh itu, persampelan awan titik dari permukaan tiga dimensi mereka adalah penyelesaian yang berpotensi. Mari kita mulakan dengan mengimport model arnab daripada dataset Open3D:
bunny = o3d.data.BunnyMesh() mesh = o3d.io.read_triangle_mesh(bunny.path)
mesh = o3d.io.read_triangle_mesh("data/bunny.ply")
# Visualize: mesh.compute_vertex_normals() # compute normals for vertices or faces o3d.visualization.draw_geometries([mesh])
Model 3D Arnab
Untuk mencuba awan titik, terdapat beberapa kaedah. Dalam contoh ini, kami mencuba 1000 mata secara seragam daripada mesh yang diimport dan menggambarkannya:
# Sample 1000 points: pcd = mesh.sample_points_uniformly(number_of_points=1000) # visualize: o3d.visualization.draw_geometries([pcd])
Awan Titik Arnab
Kita boleh simpan awan titik yang dicipta dalam format .ply seperti yang ditunjukkan di bawah:
# Save into ply file: o3d.io.write_point_cloud("output/bunny_pcd.ply", pcd)
2.3 Awan titik daripada data RGB-D
# 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])
Awan titik berwarna yang dijana daripada imej RGB-D
3 Open3D dan NumPy
Kadangkala anda perlu bertukar antara Open3D dan NumPy. Sebagai contoh, katakan kita ingin menukar awan titik NumPy kepada objek Open3D.PointCloud untuk visualisasi dan menggunakan Matplotlib untuk menggambarkan model 3D arnab.
# Create numpy pointcloud: number_points = 2000 pcd_np = np.random.rand(number_points, 3) # Convert to Open3D.PointCLoud: pcd_o3d = o3d.geometry.PointCloud()# create point cloud object pcd_o3d.points = o3d.utility.Vector3dVector(pcd_np)# set pcd_np as the point cloud points # Visualize: o3d.visualization.draw_geometries([pcd_o3d])
Penggambaran Open3D Awan Titik Rawak
这里,我们首先使用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 显示的兔子点云
在本教程中,我们学习了如何创建和可视化点云。在接下来的教程中,我们将学习如何处理它们。
Atas ialah kandungan terperinci Python: Cara mencipta dan menggambarkan awan titik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!