Table des matières
1. Introduction
2. Génération de nuages ​​de points
2.1 Nuage de points aléatoires
2.2 Échantillonnage de nuages ​​de points
2.3 Point cloud à partir de données RVB-D
3, Open3D et NumPy
3.1 De NumPy à Open3D
3.2 从 Open3D到NumPy
4、最后
Maison développement back-end Tutoriel Python Python : Comment créer et visualiser des nuages ​​de points

Python : Comment créer et visualiser des nuages ​​de points

May 02, 2023 pm 01:49 PM
python 数据 点云


1. Introduction

Les applications de nuages ​​de points sont partout : robots, voitures autonomes, systèmes d'assistance, soins de santé, etc. Le nuage de points est une représentation 3D adaptée au traitement de données du monde réel, en particulier lorsque la géométrie de la scène/de l'objet est requise, comme la distance, la forme et la taille de l'objet.

Un nuage de points est un ensemble de points qui représentent une scène dans le monde réel ou un objet dans l'espace. C'est une représentation discrète d'objets et de scènes géométriques. En d'autres termes, le nuage de points PCD est un ensemble de n points, où chaque point Pi est représenté par ses coordonnées 3D :

Python : Comment créer et visualiser des nuages ​​de points

Notez que d'autres fonctionnalités peuvent également être ajoutées pour décrire le nuage de points, comme RVB. couleur, méthode Ligne, etc. Par exemple, des couleurs RVB peuvent être ajoutées pour fournir des informations sur les couleurs.

2. Génération de nuages ​​de points

Les nuages ​​de points sont généralement générés à l'aide de scanners 3D (scanners laser, scanners à temps de vol et scanners à lumière structurée) ou de modèles de conception assistée par ordinateur (CAO). Dans ce tutoriel, nous allons d'abord créer et visualiser un nuage de points aléatoire. Nous utiliserons ensuite la bibliothèque Open3D pour échantillonner des points de la surface 3D afin de la générer à partir du modèle 3D. Enfin, nous verrons comment les créer à partir de données RGB-D.

Commençons par importer la bibliothèque Python :

import numpy as np
import matplotlib.pyplot as plt
import open3d as o3d
Copier après la connexion

2.1 Nuage de points aléatoires

Le moyen le plus simple est de créer un nuage de points aléatoire. Notez que nous ne créons généralement pas de points aléatoires à traiter, sauf lors de la création de bruit pour les GAN (Generative Adversarial Networks).

Habituellement, les nuages ​​de points sont représentés par des tableaux (n×3), où n est le nombre de points. Créons un nuage de points avec 5 points aléatoires :

number_points = 5
pcd = np.random.rand(number_points, 3)# uniform distribution over [0, 1)
print(pcd)
Copier après la connexion

On pourrait imprimer les points directement, mais ce n'est pas très efficace, surtout dans la plupart des applications si le nombre de points est important. Une meilleure approche consiste à les afficher dans un espace 3D. Visualisons-le à l'aide de la bibliothèque 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()
Copier après la connexion

Python : Comment créer et visualiser des nuages ​​de points

Visualisation de nuages ​​de points aléatoires

2.2 Échantillonnage de nuages ​​de points

Le traitement direct de modèles 3D prend du temps. Par conséquent, l’échantillonnage de nuages ​​de points à partir de leurs surfaces tridimensionnelles constitue une solution potentielle. Commençons par importer le modèle de lapin depuis l'ensemble de données Open3D :

bunny = o3d.data.BunnyMesh()
mesh = o3d.io.read_triangle_mesh(bunny.path)
Copier après la connexion

Ou importez-le comme ceci :

mesh = o3d.io.read_triangle_mesh("data/bunny.ply")
Copier après la connexion

Ensuite, affichez le modèle 3D pour voir à quoi il ressemble. Vous pouvez déplacer votre souris pour voir sous différents points de vue.

# Visualize:
mesh.compute_vertex_normals() # compute normals for vertices or faces
o3d.visualization.draw_geometries([mesh])
Copier après la connexion

Python : Comment créer et visualiser des nuages ​​de points

Rabbit 3D Model

Pour échantillonner un nuage de points, il existe plusieurs méthodes. Dans cet exemple, nous échantillonnons uniformément 1 000 points du maillage importé et les visualisons :

# Sample 1000 points:
pcd = mesh.sample_points_uniformly(number_of_points=1000)


# visualize:
o3d.visualization.draw_geometries([pcd])
Copier après la connexion

Python : Comment créer et visualiser des nuages ​​de points

Rabbit Point Cloud

Nous pouvons enregistrer le nuage de points créé au format .ply comme suit. Montré :

# Save into ply file:
o3d.io.write_point_cloud("output/bunny_pcd.ply", pcd)
Copier après la connexion

2.3 Point cloud à partir de données RVB-D

Les données RVB-D sont collectées à l'aide d'un capteur RVB-D (tel que Microsoft Kinect), qui fournit à la fois des images RVB et des images de profondeur. Les capteurs RVB-D sont largement utilisés dans la navigation intérieure, l'évitement d'obstacles et d'autres domaines. Étant donné que les images RVB fournissent des couleurs de pixels, chaque pixel de l'image de profondeur représente sa distance par rapport à la caméra.

Open3D fournit un ensemble de fonctions pour le traitement des images RVB-D. Pour créer un nuage de points à partir de données RVB-D à l'aide des fonctions Open3D, importez simplement deux images, créez un objet image RVB-D et calculez enfin le nuage de points comme suit :

# 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])
Copier après la connexion

Python : Comment créer et visualiser des nuages ​​de points

Couleur générée à partir de RVB-D image Nuages ​​de points

3, Open3D et NumPy

Parfois, vous devez basculer entre Open3D et NumPy. Par exemple, disons que nous voulons convertir un nuage de points NumPy en un objet Open3D.PointCloud pour la visualisation et utiliser Matplotlib pour visualiser un modèle 3D d'un lapin.

3.1 De NumPy à Open3D

Dans cet exemple, nous créons 2000 points aléatoires à l'aide de la fonction NumPy.random.rand(), qui crée des échantillons aléatoires à partir d'une distribution uniforme de [0,1]. Nous créons ensuite un objet Open3D.PointCloud et définissons sa fonctionnalité Open3D.PointCloud.points sur des points aléatoires à l'aide de la fonction 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])
Copier après la connexion

Python : Comment créer et visualiser des nuages ​​de points

Visualisation Open3D d'un nuage de points aléatoires

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()
Copier après la connexion

Python : Comment créer et visualiser des nuages ​​de points

使用 Matplotlib 显示的兔子点云

4、最后

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


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL doit-il payer MySQL doit-il payer Apr 08, 2025 pm 05:36 PM

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

HaDIDB: une base de données légère et évolutive horizontalement dans Python HaDIDB: une base de données légère et évolutive horizontalement dans Python Apr 08, 2025 pm 06:12 PM

HaDIDB: Une base de données Python évolutive de haut niveau légère HaDIDB (HaDIDB) est une base de données légère écrite en Python, avec un niveau élevé d'évolutivité. Installez HaDIDB à l'aide de l'installation PIP: PiPinStallHaDIDB User Management Créer un utilisateur: CreateUser () pour créer un nouvel utilisateur. La méthode Authentication () authentifie l'identité de l'utilisateur. FromHadidb.OperationMportUserUser_OBJ = User ("Admin", "Admin") User_OBJ.

Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Apr 08, 2025 pm 09:39 PM

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

MySQL a-t-il besoin d'Internet MySQL a-t-il besoin d'Internet Apr 08, 2025 pm 02:18 PM

MySQL peut s'exécuter sans connexions réseau pour le stockage et la gestion des données de base. Cependant, la connexion réseau est requise pour l'interaction avec d'autres systèmes, l'accès à distance ou l'utilisation de fonctionnalités avancées telles que la réplication et le clustering. De plus, les mesures de sécurité (telles que les pare-feu), l'optimisation des performances (choisissez la bonne connexion réseau) et la sauvegarde des données sont essentielles pour se connecter à Internet.

Comment résoudre MySQL ne peut pas se connecter à l'hôte local Comment résoudre MySQL ne peut pas se connecter à l'hôte local Apr 08, 2025 pm 02:24 PM

La connexion MySQL peut être due aux raisons suivantes: le service MySQL n'est pas démarré, le pare-feu intercepte la connexion, le numéro de port est incorrect, le nom d'utilisateur ou le mot de passe est incorrect, l'adresse d'écoute dans my.cnf est mal configurée, etc. 2. Ajustez les paramètres du pare-feu pour permettre à MySQL d'écouter le port 3306; 3. Confirmez que le numéro de port est cohérent avec le numéro de port réel; 4. Vérifiez si le nom d'utilisateur et le mot de passe sont corrects; 5. Assurez-vous que les paramètres d'adresse de liaison dans My.cnf sont corrects.

MySQL Workbench peut-il se connecter à MariaDB MySQL Workbench peut-il se connecter à MariaDB Apr 08, 2025 pm 02:33 PM

MySQL Workbench peut se connecter à MARIADB, à condition que la configuration soit correcte. Sélectionnez d'abord "MariADB" comme type de connecteur. Dans la configuration de la connexion, définissez correctement l'hôte, le port, l'utilisateur, le mot de passe et la base de données. Lorsque vous testez la connexion, vérifiez que le service MARIADB est démarré, si le nom d'utilisateur et le mot de passe sont corrects, si le numéro de port est correct, si le pare-feu autorise les connexions et si la base de données existe. Dans une utilisation avancée, utilisez la technologie de mise en commun des connexions pour optimiser les performances. Les erreurs courantes incluent des autorisations insuffisantes, des problèmes de connexion réseau, etc. Lors des erreurs de débogage, analysez soigneusement les informations d'erreur et utilisez des outils de débogage. L'optimisation de la configuration du réseau peut améliorer les performances

Comment optimiser les performances MySQL pour les applications de haute charge? Comment optimiser les performances MySQL pour les applications de haute charge? Apr 08, 2025 pm 06:03 PM

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

Comment utiliser Aws Glue Crawler avec Amazon Athena Comment utiliser Aws Glue Crawler avec Amazon Athena Apr 09, 2025 pm 03:09 PM

En tant que professionnel des données, vous devez traiter de grandes quantités de données provenant de diverses sources. Cela peut poser des défis à la gestion et à l'analyse des données. Heureusement, deux services AWS peuvent aider: AWS Glue et Amazon Athena.

See all articles