


Python : Comment créer et visualiser des nuages de points
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 :
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
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)
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()
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)
Ou importez-le comme ceci :
mesh = o3d.io.read_triangle_mesh("data/bunny.ply")
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])
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])
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)
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])
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])
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()
使用 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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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 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.

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 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.

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 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

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.

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.
