Maison > Article > Périphériques technologiques > Vision stéréo et perception de la profondeur en vision par ordinateur et exemples
Dans le monde fascinant de l’intelligence artificielle et du traitement d’images, ces concepts jouent un rôle clé en permettant aux machines de percevoir le monde tridimensionnel qui nous entoure de la même manière que nos yeux. Rejoignez-nous pour explorer la technologie derrière la vision stéréo et la perception de la profondeur, révélant les secrets de la façon dont les ordinateurs comprennent la profondeur, la distance et l'espace à partir d'images 2D.
À quoi font exactement référence la vision stéréoscopique et la perception de la profondeur en vision par ordinateur ?
La vision stéréo et la perception de la profondeur sont des concepts importants dans le domaine de la vision par ordinateur, qui visent à imiter la capacité humaine à percevoir la profondeur et la structure tridimensionnelle à partir d'informations visuelles. Ces concepts sont souvent appliqués dans des domaines tels que la robotique, les voitures autonomes et la réalité augmentée.
La vision stéréoscopique, également connue sous le nom de stéréopsie ou vision binoculaire, est une méthode de capture et d'analyse de deux objets légèrement éloignés l'un de l'autre. Technologie qui utilise les images d’une ou plusieurs caméras pour percevoir la profondeur d’une scène, imitant le fonctionnement de l’œil humain.
Le principe de base de la vision stéréoscopique est la triangulation. Lorsque deux caméras (ou « caméras stéréo ») capturent des images de la même scène depuis des points de vue légèrement différents, les paires d'images résultantes, appelées paires stéréo, contiennent la différence, ou la différence, dans les positions des points correspondants dans les deux images.
En analysant ces différences, les systèmes de vision par ordinateur peuvent calculer des informations de profondeur pour les objets de la scène. Les objets plus proches de la caméra auront des différences plus importantes, tandis que les objets plus éloignés de la caméra auront des différences plus petites.
Les algorithmes de vision stéréo incluent généralement des techniques telles que la correspondance de caractéristiques, la cartographie des disparités et la géométrie épipolaire, qui sont utilisées pour calculer une carte de profondeur ou une représentation 3D d'une scène
En vision par ordinateur, la perception de la profondeur fait référence à la capacité d'un système à extraire des informations à partir d'une seule La capacité à comprendre et à estimer la distance des objets dans une scène 3D à partir de plusieurs images ou images vidéo 2D
Les méthodes permettant d'obtenir une perception de la profondeur ne se limitent pas à la vision stéréoscopique, mais peuvent également prendre d'autres voies, notamment :
Dans les applications de vision par ordinateur, la perception de la profondeur est cruciale pour des tâches telles que éviter les obstacles, identifier des objets, effectuer une reconstruction 3D et comprendre des scènes
import cv2import numpy as np# Create two video capture objects for left and right cameras (adjust device IDs as needed)left_camera = cv2.VideoCapture(0)right_camera = cv2.VideoCapture(1)# Set camera resolution (adjust as needed)width = 640height = 480left_camera.set(cv2.CAP_PROP_FRAME_WIDTH, width)left_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, height)right_camera.set(cv2.CAP_PROP_FRAME_WIDTH, width)right_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, height)# Load stereo calibration data (you need to calibrate your stereo camera setup first)stereo_calibration_file = ‘stereo_calibration.yml’calibration_data = cv2.FileStorage(stereo_calibration_file, cv2.FILE_STORAGE_READ)if not calibration_data.isOpened():print(“Calibration file not found.”)exit()camera_matrix_left = calibration_data.getNode(‘cameraMatrixLeft’).mat()camera_matrix_right = calibration_data.getNode(‘cameraMatrixRight’).mat()distortion_coeff_left = calibration_data.getNode(‘distCoeffsLeft’).mat()distortion_coeff_right = calibration_data.getNode(‘distCoeffsRight’).mat()R = calibration_data.getNode(‘R’).mat()T = calibration_data.getNode(‘T’).mat()calibration_data.release()# Create stereo rectification mapsR1, R2, P1, P2, Q, _, _ = cv2.stereoRectify(camera_matrix_left, distortion_coeff_left,camera_matrix_right, distortion_coeff_right,(width, height), R, T)left_map1, left_map2 = cv2.initUndistortRectifyMap(camera_matrix_left, distortion_coeff_left, R1, P1, (width, height), cv2.CV_32FC1)right_map1, right_map2 = cv2.initUndistortRectifyMap(camera_matrix_right, distortion_coeff_right, R2, P2, (width, height), cv2.CV_32FC1)while True:# Capture frames from left and right camerasret1, left_frame = left_camera.read()ret2, right_frame = right_camera.read()if not ret1 or not ret2:print(“Failed to capture frames.”)break# Undistort and rectify framesleft_frame_rectified = cv2.remap(left_frame, left_map1, left_map2, interpolation=cv2.INTER_LINEAR)right_frame_rectified = cv2.remap(right_frame, right_map1, right_map2, interpolation=cv2.INTER_LINEAR)# Convert frames to grayscaleleft_gray = cv2.cvtColor(left_frame_rectified, cv2.COLOR_BGR2GRAY)right_gray = cv2.cvtColor(right_frame_rectified, cv2.COLOR_BGR2GRAY)# Perform stereo matching to calculate depth map (adjust parameters as needed)stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)disparity = stereo.compute(left_gray, right_gray)# Normalize the disparity map for visualizationdisparity_normalized = cv2.normalize(disparity, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)# Display the disparity mapcv2.imshow(‘Disparity Map’, disparity_normalized)if cv2.waitKey(1) & 0xFF == ord(‘q’):break# Release resourcesleft_camera.release()right_camera.release()cv2.destroyAllWindows()
Remarque : Pour la configuration de la caméra stéréo, l'étalonnage de la caméra est requis et les données d'étalonnage sont enregistrées dans un fichier .yml, indiquez le chemin dans l'exemple de code. .
utilise des informations de profondeur pour la détection et le suivi des cibles afin d'obtenir un positionnement et une identification plus précis. L'utilisation d'informations approfondies pour les applications de réalité virtuelle et de réalité augmentée permet aux utilisateurs d'interagir de manière plus réaliste avec les environnements virtuels. Utilisez les informations de profondeur pour la reconnaissance faciale et l’analyse des expressions afin d’améliorer la précision et la robustesse de la reconnaissance faciale. Utilisez les informations de profondeur pour la reconstruction et la modélisation 3D afin de générer des scènes 3D réalistes. Utilisez les informations de profondeur pour l’estimation de la posture et l’analyse du comportement afin d’obtenir une reconnaissance des actions et une compréhension du comportement plus précises. Utiliser des informations approfondies pour la conduite autonome et la navigation des robots afin d'améliorer la sécurité et l'efficacité dans le domaine du transport intelligent et de l'automatisation réalité
Reconnaissance gestuelle
Occlusion : les objets qui s'occultent dans la scène peuvent entraîner des difficultés de vision stéréoscopique. Lorsqu'un objet bloque partiellement un autre objet, déterminer la profondeur de la zone obstruée peut s'avérer problématique.
Portée et résolution limitées : la précision de la perception de la profondeur en utilisant la vision stéréo diminue à mesure que la distance par rapport à la caméra augmente. De plus, la résolution des mesures de profondeur diminue avec la distance, ce qui rend les détails des objets distants difficiles à percevoir.
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!