Jadual Kandungan
1. Pengenalan
3.2 从 Open3D到NumPy
4、最后
Rumah pembangunan bahagian belakang Tutorial Python Python: Cara mencipta dan menggambarkan awan titik

Python: Cara mencipta dan menggambarkan awan titik

May 02, 2023 pm 01:49 PM
python data awan titik


1. Pengenalan

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 Python: Cara mencipta dan menggambarkan awan titik

Awan titik biasanya dijana menggunakan pengimbas 3D (pengimbas laser, pengimbas masa penerbangan dan pengimbas cahaya berstruktur) atau model reka bentuk bantuan komputer (CAD). Dalam tutorial ini, kita akan mula-mula mencipta dan menggambarkan awan titik rawak. Kami kemudiannya akan menggunakan pustaka Open3D untuk sampel titik dari permukaan 3D untuk menjananya daripada model 3D. Akhir sekali, kita akan melihat cara menciptanya daripada data RGB-D.

Mari kita mulakan dengan mengimport pustaka Python:

import numpy as np
import matplotlib.pyplot as plt
import open3d as o3d
Salin selepas log masuk

2.1 Random Point Cloud

Cara paling mudah ialah mencipta awan titik rawak. Ambil perhatian bahawa kami biasanya tidak membuat titik rawak untuk diproses kecuali apabila mencipta hingar untuk GAN (Rangkaian Adversarial Generatif).

Biasanya, awan titik diwakili oleh tatasusunan (n×3), dengan n ialah bilangan titik. Mari cipta awan titik dengan 5 titik rawak:

number_points = 5
pcd = np.random.rand(number_points, 3)# uniform distribution over [0, 1)
print(pcd)
Salin selepas log masuk

Kita boleh mencetak mata secara langsung, tetapi ia tidak begitu cekap, terutamanya dalam kebanyakan aplikasi jika bilangan mata adalah besar. Pendekatan yang lebih baik ialah memaparkannya dalam ruang 3D. Mari kita bayangkan menggunakan perpustakaan Matplotlib:

# 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()
Salin selepas log masuk

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: Python: Cara mencipta dan menggambarkan awan titik

bunny = o3d.data.BunnyMesh()
mesh = o3d.io.read_triangle_mesh(bunny.path)
Salin selepas log masuk

Atau importnya seperti ini:

mesh = o3d.io.read_triangle_mesh("data/bunny.ply")
Salin selepas log masuk

Seterusnya, paparkan model 3D untuk melihat rupanya. Anda boleh menggerakkan tetikus anda untuk melihat dari sudut pandangan yang berbeza.

# Visualize:
mesh.compute_vertex_normals() # compute normals for vertices or faces
o3d.visualization.draw_geometries([mesh])
Salin selepas log masuk

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])
Salin selepas log masuk

Python: Cara mencipta dan menggambarkan awan titik

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)
Salin selepas log masuk

2.3 Awan titik daripada data RGB-DPython: Cara mencipta dan menggambarkan awan titik

Data RGB-D dijana menggunakan sensor RGB -D (seperti Microsoft Kinect ) dikumpul, yang menyediakan kedua-dua imej RGB dan imej kedalaman. Penderia RGB-D digunakan secara meluas dalam navigasi dalaman, pengelakan halangan dan medan lain. Memandangkan imej RGB menyediakan warna piksel, setiap piksel imej kedalaman mewakili jaraknya dari kamera.

Open3D menyediakan satu set fungsi untuk pemprosesan imej RGB-D. Untuk mencipta awan titik daripada data RGB-D menggunakan fungsi Open3D, hanya import dua imej, cipta objek imej RGB-D, dan akhirnya mengira awan titik seperti berikut:

# 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])
Salin selepas log masuk

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. Python: Cara mencipta dan menggambarkan awan titik

3.1 Daripada NumPy kepada Open3D

Dalam contoh ini, kami mencipta 2000 titik rawak menggunakan fungsi NumPy.random.rand(), yang bermula daripada pengedaran seragam [0,1] Create sampel rawak. Kami kemudian mencipta objek Open3D.PointCloud dan menetapkan ciri Open3D.PointCloud.points kepada titik rawak menggunakan fungsi Open3D.utility.Vector3dVector().

# 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])
Salin selepas log masuk

Penggambaran Open3D Awan Titik Rawak

3.2 从 Open3D到NumPy

这里,我们首先使用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()
Salin selepas log masuk

Python: Cara mencipta dan menggambarkan awan titik

使用 Matplotlib 显示的兔子点云

4、最后

在本教程中,我们学习了如何创建和可视化点云。在接下来的教程中,我们将学习如何处理它们。


Atas ialah kandungan terperinci Python: Cara mencipta dan menggambarkan awan titik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah Mysql perlu membayar Adakah Mysql perlu membayar Apr 08, 2025 pm 05:36 PM

MySQL mempunyai versi komuniti percuma dan versi perusahaan berbayar. Versi komuniti boleh digunakan dan diubahsuai secara percuma, tetapi sokongannya terhad dan sesuai untuk aplikasi dengan keperluan kestabilan yang rendah dan keupayaan teknikal yang kuat. Edisi Enterprise menyediakan sokongan komersil yang komprehensif untuk aplikasi yang memerlukan pangkalan data yang stabil, boleh dipercayai, berprestasi tinggi dan bersedia membayar sokongan. Faktor yang dipertimbangkan apabila memilih versi termasuk kritikal aplikasi, belanjawan, dan kemahiran teknikal. Tidak ada pilihan yang sempurna, hanya pilihan yang paling sesuai, dan anda perlu memilih dengan teliti mengikut keadaan tertentu.

Hadidb: Pangkalan data yang ringan dan berskala mendatar di Python Hadidb: Pangkalan data yang ringan dan berskala mendatar di Python Apr 08, 2025 pm 06:12 PM

Hadidb: Pangkalan data Python yang ringan, tinggi, Hadidb (Hadidb) adalah pangkalan data ringan yang ditulis dalam Python, dengan tahap skalabilitas yang tinggi. Pasang HadIdb menggunakan pemasangan PIP: Pengurusan Pengguna PipInstallHadidB Buat Pengguna: CreateUser () Kaedah untuk membuat pengguna baru. Kaedah pengesahan () mengesahkan identiti pengguna. dariHadidb.OperationImportuserer_Obj = user ("admin", "admin") user_obj.

Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Apr 08, 2025 pm 09:39 PM

Tidak mustahil untuk melihat kata laluan MongoDB secara langsung melalui Navicat kerana ia disimpan sebagai nilai hash. Cara mendapatkan kata laluan yang hilang: 1. Tetapkan semula kata laluan; 2. Periksa fail konfigurasi (mungkin mengandungi nilai hash); 3. Semak Kod (boleh kata laluan Hardcode).

Bagaimana untuk mengoptimumkan prestasi MySQL untuk aplikasi beban tinggi? Bagaimana untuk mengoptimumkan prestasi MySQL untuk aplikasi beban tinggi? Apr 08, 2025 pm 06:03 PM

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Python: meneroka aplikasi utamanya Python: meneroka aplikasi utamanya Apr 10, 2025 am 09:41 AM

Python digunakan secara meluas dalam bidang pembangunan web, sains data, pembelajaran mesin, automasi dan skrip. 1) Dalam pembangunan web, kerangka Django dan Flask memudahkan proses pembangunan. 2) Dalam bidang sains data dan pembelajaran mesin, numpy, panda, scikit-learn dan perpustakaan tensorflow memberikan sokongan yang kuat. 3) Dari segi automasi dan skrip, Python sesuai untuk tugas -tugas seperti ujian automatik dan pengurusan sistem.

Cara Menggunakan AWS Glue Crawler dengan Amazon Athena Cara Menggunakan AWS Glue Crawler dengan Amazon Athena Apr 09, 2025 pm 03:09 PM

Sebagai profesional data, anda perlu memproses sejumlah besar data dari pelbagai sumber. Ini boleh menimbulkan cabaran kepada pengurusan data dan analisis. Nasib baik, dua perkhidmatan AWS dapat membantu: AWS Glue dan Amazon Athena.

Rancangan Python 2 jam: Pendekatan yang realistik Rancangan Python 2 jam: Pendekatan yang realistik Apr 11, 2025 am 12:04 AM

Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Bolehkah mysql menyambung ke pelayan SQL Bolehkah mysql menyambung ke pelayan SQL Apr 08, 2025 pm 05:54 PM

Tidak, MySQL tidak dapat menyambung terus ke SQL Server. Tetapi anda boleh menggunakan kaedah berikut untuk melaksanakan interaksi data: Gunakan middleware: data eksport dari MySQL ke format pertengahan, dan kemudian mengimportnya ke SQL Server melalui middleware. Menggunakan Pangkalan Data Pangkalan Data: Alat perniagaan menyediakan antara muka yang lebih mesra dan ciri -ciri canggih, pada dasarnya masih dilaksanakan melalui middleware.

See all articles