Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Comprendre les systèmes de coordonnées et la fusion de capteurs
Les données de nuage de points sont toujours situées dans un système de coordonnées. Ce système de coordonnées peut être local au véhicule ou à l'appareil captant les environs, ou il peut s'agir d'un système de coordonnées mondial. Lorsque vous utilisez des tâches d'étiquetage de nuage de points 3D Ground Truth, toutes les annotations sont générées à l'aide du système de coordonnées de vos données source. Pour certains types de tâches et fonctions d'étiquetage, vous devez fournir les données dans un système de coordonnées mondial.
Dans cette rubrique, vous allez apprendre ce qui suit :
-
Lorsque vous êtes tenus de fournir les données source dans un système de coordonnées mondial ou un système de référence mondial.
-
Ce qu'est une coordonnée mondiale et comment convertir les données de nuage de points en un système de coordonnées mondial.
-
Comment utiliser les matrices extrinsèques de capteur et de caméra pour fournir des données de pose lors de l'utilisation de la fusion des capteurs.
Configuration requise pour le système de coordonnées utilisé pour les tâches d'étiquetage
Si vos données de nuage de points ont été collectées dans un système de coordonnées local, vous pouvez utiliser une matrice extrinsèque du capteur utilisé pour collecter les données pour les convertir en un système de coordonnées mondial ou en un système de référence mondial. Si vous ne pouvez pas obtenir de métriques extrinsèques pour vos données de nuage de points et que, par conséquent, vous ne pouvez pas obtenir de nuages de points dans un système de coordonnées mondial, vous pouvez fournir des données de nuage de points dans un système de coordonnées local pour les types de tâches de détection d'objets de nuage de points 3D et de segmentation sémantique de nuage de points 3D.
Pour le suivi d'objets, vous devez fournir les données de nuage de points dans un système de coordonnées mondial. En effet, lorsque vous suivez des objets à travers plusieurs trames, le véhicule ego lui-même se déplace dans le monde et donc toutes les trames ont besoin d'un point de référence.
Si vous incluez des données de caméra pour la fusion des capteurs, il est recommandé de fournir des poses de caméra dans le même système de coordonnées mondial que le capteur 3D (tel qu'un DAR capteur Li).
Utilisation de données de nuage de points dans un système de coordonnées mondial
Cette section explique ce qu'est un système de coordonnées mondial (WCS), également appelé cadre de référence global, et explique comment vous pouvez fournir des données de nuages de points dans un système de coordonnées mondial.
Qu'est-ce qu'un système de coordonnées mondial (WCS) ?
Un WCS cadre de référence global est un système de coordonnées universel fixe dans lequel sont placés les systèmes de coordonnées des véhicules et des capteurs. Par exemple, si plusieurs cadres de nuages de points sont situés dans des systèmes de coordonnées différents parce qu'ils ont été collectés par deux capteurs, a WCS peut être utilisé pour convertir toutes les coordonnées de ces cadres de nuages de points en un seul système de coordonnées, où tous les cadres ont la même origine (0,0,0). Cette transformation est effectuée en traduisant l'origine de chaque image vers l'origine de l'image à l'WCSaide d'un vecteur de translation et en faisant pivoter les trois axes (généralement x, y et z) dans la bonne orientation à l'aide d'une matrice de rotation. Cette transformation du corps rigide est appelée transformation homogène.
Un système de coordonnées mondiales est important dans la planification globale des chemins, la localisation, le mappage et les simulations de scénarios de conduite. Ground Truth utilise le système de coordonnées cartésien du monde pour droitiers, tel que celui défini dans ISO8855
Le système de référence mondial dépend des données. Certains ensembles de données utilisent la DAR position Li dans la première image comme origine. Dans ce scénario, toutes les trames utilisent la première trame comme référence, et le cap et la position de l'appareil seront proches de l'origine dans la première trame. Par exemple, KITTI les ensembles de données utilisent le premier cadre comme référence pour les coordonnées mondiales. D'autres jeux de données utilisent une position d'appareil différente de celle l'origine.
Notez qu'il ne s'agit pas du système de IMU coordonnéesGPS/, qui pivote généralement de 90 degrés le long de l'axe Z. Si les données de votre nuage de points se trouvent dans un système de IMU coordonnéesGPS/(tel que OxTS dans le jeu de KITTI données AV open source), vous devez transformer l'origine en un système de coordonnées mondial (généralement le système de coordonnées de référence du véhicule). Vous appliquez cette transformation en multipliant vos données par des métriques de transformation (matrice de rotation et vecteur de translation). Cela permet de transformer les données du système de coordonnées d'origine en un système de coordonnées de référence mondial. Pour de plus amples informations sur cette transformation, veuillez consulter la section suivante.
Convertissez les données d'un nuage de points 3D en WCS
Ground Truth suppose que vos données de nuage de points ont déjà été transformées en un système de coordonnées de référence de votre choix. Par exemple, vous pouvez choisir le système de coordonnées de référence du capteur (tel que LiDAR) comme système de coordonnées de référence global. Vous pouvez également prendre des nuages de points provenant de différents capteurs et les transformer d'une vue du capteur en une vue du système de coordonnées de référence du véhicule. Vous utilisez la matrice extrinsèque d'un capteur, composée d'une matrice de rotation et d'un vecteur de translation, pour convertir les données de votre nuage de points en un cadre de référence global WCS ou global.
Collectivement, le vecteur de translation et la matrice de rotation peuvent être utilisés pour constituer une matrice extrinsèque, qui peut être utilisée pour convertir les données d'un système de coordonnées local en unWCS. Par exemple, votre matrice DAR extrinsèque Li peut être composée comme suit, où R
se trouvent la matrice de rotation et T
le vecteur de translation :
LiDAR_extrinsic = [R T;0 0 0 1]
Par exemple, l'ensemble de KITTI données de conduite autonome inclut une matrice de rotation et un vecteur de translation pour la matrice de transformation DAR extrinsèque Li pour chaque image. Le module python pykittidataset.oxts[i].T_w_imu
la transformation DAR extrinsèque Li pour le i
ème cadre peut être multipliée par des points dans ce cadre pour les convertir en un cadre mondial -. np.matmul(lidar_transform_matrix, points)
La multiplication d'un point dans un DAR cadre Li par une matrice DAR extrinsèque Li le transforme en coordonnées mondiales. La multiplication d'un point du système mondial par la matrice extrinsèque de la caméra donne les coordonnées du point dans le système de référence de la caméra.
L'exemple de code suivant montre comment convertir des cadres de nuages de points du KITTI jeu de données en unWCS.
import pykitti import numpy as np basedir = '/Users/nameofuser/kitti-data' date = '2011_09_26' drive = '0079' # The 'frames' argument is optional - default: None, which loads the whole dataset. # Calibration, timestamps, and IMU data are read automatically. # Camera and velodyne data are available via properties that create generators # when accessed, or through getter methods that provide random access. data = pykitti.raw(basedir, date, drive, frames=range(0, 50, 5)) # i is frame number i = 0 # lidar extrinsic for the ith frame lidar_extrinsic_matrix = data.oxts[i].T_w_imu # velodyne raw point cloud in lidar scanners own coordinate system points = data.get_velo(i) # transform points from lidar to global frame using lidar_extrinsic_matrix def generate_transformed_pcd_from_point_cloud(points, lidar_extrinsic_matrix): tps = [] for point in points: transformed_points = np.matmul(lidar_extrinsic_matrix, np.array([point[0], point[1], point[2], 1], dtype=np.float32).reshape(4,1)).tolist() if len(point) > 3 and point[3] is not None: tps.append([transformed_points[0][0], transformed_points[1][0], transformed_points[2][0], point[3]]) return tps # customer transforms points from lidar to global frame using lidar_extrinsic_matrix transformed_pcl = generate_transformed_pcd_from_point_cloud(points, lidar_extrinsic_matrix)
Fusion de capteurs
Ground Truth prend en charge la fusion de capteurs de données de nuage de points avec un maximum de 8 entrées de caméra vidéo. Cette fonctionnalité permet aux étiqueteurs humains de visualiser l'image du nuage de points 3D side-by-side avec l'image vidéo synchronisée. En plus de fournir davantage de contexte visuel pour l'étiquetage, la fusion des capteurs permet aux collaborateurs d'ajuster les annotations dans la scène 3D et dans les images 2D, et le réglage est projeté dans l'autre vue. La vidéo suivante montre un travail d'étiquetage de nuages de points en 3D avec la fusion de Li DAR et de capteurs de caméra.
Pour de meilleurs résultats, lorsque vous utilisez la fusion de capteurs, votre nuage de points doit se trouver dans unWCS. Ground Truth utilise les informations de votre capteur (Li, par exempleDAR), de votre caméra et de la position de votre véhicule égo pour calculer des matrices extrinsèques et intrinsèques en vue de la fusion des capteurs.
Matrice extrinsèque
Ground Truth utilise des matrices extrinsèques de capteurs (tels que LiDAR) et des matrices extrinsèques et intrinsèques de caméra pour projeter des objets entre le cadre de référence des données du nuage de points et le cadre de référence de la caméra.
Par exemple, afin de projeter une étiquette depuis le nuage de points 3D vers le plan d'image de la caméra, Ground Truth transforme les points 3D DAR du système de coordonnées de Li en système de coordonnées de la caméra. Cela se fait généralement en transformant d'abord les points 3D du propre système de coordonnées DAR de Li en un système de coordonnées mondial (ou un cadre de référence global) à l'aide de la matrice DAR extrinsèque de Li. Ground Truth utilise ensuite l'extrinsèque inverse de la caméra (qui convertit les points d'une image de référence globale en la trame de référence de la caméra) pour transformer les points 3D du système de coordonnées mondial obtenu à l'étape précédente dans le plan d'image de la caméra. La matrice DAR extrinsèque Li peut également être utilisée pour transformer des données 3D en un système de coordonnées mondial. Si vos données 3D sont déjà transformées en système de coordonnées mondial, la première transformation n'a aucun impact sur la translation des étiquettes, et la translation des étiquettes dépend uniquement de la matrice extrinsèque inverse de la caméra. Une matrice d'affichage est utilisée pour visualiser les étiquettes projetées. Pour de plus amples informations sur ces transformations et sur la matrice d'affichage, veuillez consulter Transformations de fusion des capteurs de Ground Truth.
Ground Truth calcule ces matrices extrinsèques en utilisant Li DAR et les données de pose de caméra que vous fournissez : heading
(en quaternions :qx
,, etqw
) et position
(qy
qz
,,). x
y
z
Pour le véhicule, le cap et la position sont généralement décrits dans la trame de référence du véhicule dans un système de coordonnées mondial et sont appelés pose du véhicule ego. Pour chaque matrice extrinsèque de la caméra, vous pouvez ajouter des informations de pose associées à cette caméra. Pour de plus amples informations, veuillez consulter Expression.
Matrice intrinsèque
Ground Truth utilise les matrices extrinsèques et intrinsèques de la caméra pour calculer les métriques de vue afin de transformer les étiquettes vers et depuis la scène 3D en images de la caméra. Ground Truth calcule la matrice intrinsèque de la caméra à l'aide de la distance focale de la caméra (fx
, fy
) et les coordonnées du centre optique (cx
, cy
) que vous fournissez. Pour de plus amples informations, veuillez consulter Métriques intrinsèques et distorsion.
Distorsion de l'image
Une distorsion de l'image peut se produire pour diverses raisons. Par exemple, les images peuvent être déformées en raison d'effets de tonneau ou d'oeil de poisson. Ground Truth utilise des paramètres intrinsèques, ainsi que des coefficients de distorsion, pour supprimer la déformation des images que vous fournissez lors de la création de tâches d'étiquetage de nuage de points 3D. Si la déformation d'une image de caméra a déjà été corrigée, tous les coefficients de distorsion doivent être réglés sur 0.
Pour en savoir plus sur les transformations effectuées par Ground Truth pour supprimer les déformations des images, veuillez consulter Calibrations de caméra : extrinsèque, intrinsèque et distorsion.
Véhicule ego
Pour collecter des données pour les applications de conduite autonome, les mesures utilisées pour générer des données de nuage de points sont récupérées à partir de capteurs montés sur un véhicule, le véhicule ego. Pour projeter des ajustements d'étiquette sur et à partir de la scène 3D et des images 2D, Ground Truth a besoin des données de pose de votre véhicule ego dans un système de coordonnées mondial. Les données de pose du véhicule ego sont composées des coordonnées de position et du quaternion d'orientation.
Ground Truth utilise les données de pose de votre véhicule ego pour calculer les matrices de rotation et de transformation. Les rotations en 3 dimensions peuvent être représentées par une séquence de 3 rotations autour d'une séquence d'axes. En théorie, trois axes couvrant l'espace euclidien 3D suffisent. En pratique, les axes de rotation sont choisis comme vecteurs de base. Les trois rotations devraient se situer dans un cadre de référence global (extrinsèque). Ground Truth n'est pas un cadre de référence centré sur le corps de support (intrinsèque) qui est attaché à l'objet en rotation et se déplace avec celui-ci. Pour suivre les objets, Ground Truth doit effectuer les mesures à partir d'un système de référence mondial où tous les véhicules se déplacent. Lorsque vous utilisez des tâches d'étiquetage de nuage de points 3D Ground Truth, z spécifie l'axe de rotation (rotation extrinsèque) et les angles d'Euler en lacet sont exprimés en radians (angle de rotation).
Expression
Ground Truth utilise les informations de pose pour les visualisations 3D et la fusion de capteurs. Les informations de pose que vous saisissez via votre fichier manifeste sont utilisées pour calculer des matrices extrinsèques. Si vous disposez déjà d'une matrice extrinsèque, vous pouvez l'utiliser pour extraire les données de pose du capteur et de la caméra.
Par exemple, dans le jeu de KITTI données sur la conduite autonome, le module pykittidataset.oxts[i].T_w_imu
donne la transformée DAR extrinsèque Li pour le cadre i
th et elle peut être multipliée par les points pour les obtenir dans un cadre mondial -matmul(lidar_transform_matrix,
points)
. Cette transformation peut être convertie en position (vecteur de translation) et en titre (en quaternion) de Li DAR pour le format de fichier JSON manifeste d'entrée. La transformation extrinsèque de la caméra pour cam0
dans la i
ème trame peut être calculée via inv(matmul(dataset.calib.T_cam0_velo,
inv(dataset.oxts[i].T_w_imu)))
et ce résultat peut être converti en données de cap et de position pour cam0
.
import numpy rotation = [[ 9.96714314e-01, -8.09890350e-02, 1.16333982e-03], [ 8.09967396e-02, 9.96661051e-01, -1.03090934e-02], [-3.24531964e-04, 1.03694477e-02, 9.99946183e-01]] origin= [1.71104606e+00, 5.80000039e-01, 9.43144935e-01] from scipy.spatial.transform import Rotation as R # position is the origin position = origin r = R.from_matrix(np.asarray(rotation)) # heading in WCS using scipy heading = r.as_quat() print(f"pose:{position}\nheading: {heading}")
Position
Dans le fichier manifeste d'entrée, position
fait référence à la position du capteur par rapport à un système mondial. Si vous ne parvenez pas à placer la position de l'appareil dans un système de coordonnées mondial, vous pouvez utiliser les DAR données Li avec les coordonnées locales. De même, pour les caméras vidéo montées, vous pouvez spécifier la position et le cap dans un système de coordonnées mondial. Pour la caméra, si vous n'avez pas d'informations de position, veuillez utiliser (0, 0, 0).
Voici les champs de l'objet de position :
-
x
(flottant) – coordonnée x de la position du véhicule ego, du capteur ou de la caméra en mètres. -
y
(flottant) – coordonnée y de la position du véhicule ego, du capteur ou de la caméra en mètres. -
z
(flottant) – coordonnée z de la position du véhicule ego, du capteur ou de la caméra en mètres.
Voici un exemple d'position
JSONobjet :
{ "position": { "y": -152.77584902657554, "x": 311.21505956090624, "z": -10.854137529636024 } }
Titre
Dans le fichier manifeste d'entrée, heading
est un objet qui représente l'orientation d'un appareil par rapport au système mondial. Les valeurs de cap doivent être en quaternion. Un quaternion(qx = 0, qy = 0, qz
= 0, qw = 1)
. De même, pour les caméras, spécifiez le cap en quaternions. Si vous ne parvenez pas à obtenir les paramètres de calibration extrinsèques de la caméra, veuillez également utiliser le quaternion d'identité.
Les champs présents dans l'objet heading
sont les suivants :
-
qx
(flottant) - composant x de l'orientation du véhicule ego, du capteur ou de la caméra. -
qy
(flottant) - composant y de l'orientation du véhicule ego, du capteur ou de la caméra. -
qz
(flottant) - composant z de l'orientation du véhicule ego, du capteur ou de la caméra. -
qw
(flottant) - composant w de l'orientation du véhicule ego, du capteur ou de la caméra.
Voici un exemple d'heading
JSONobjet :
{ "heading": { "qy": -0.7046155108831117, "qx": 0.034278837280808494, "qz": 0.7070617895701465, "qw": -0.04904659893885366 } }
Pour en savoir plus, consultez Calcul des quaternions d'orientation et de la position.
Calcul des quaternions d'orientation et de la position
Ground Truth exige que toutes les données d'orientation, ou de cap, soient données en quaternions. Un quaternion
Vous pouvez calculer des quaternions à partir d'une matrice de rotation ou d'une matrice de transformation.
Si vous avez une matrice de rotation (composée des rotations d'axes) et un vecteur de translation (ou origine) dans le système de coordonnées mondial au lieu d'une seule matrice de transformation rigide 4x4, vous pouvez utiliser directement la matrice de rotation et le vecteur de translation pour calculer les quaternions. Des bibliothèques telles que scipy
import numpy rotation = [[ 9.96714314e-01, -8.09890350e-02, 1.16333982e-03], [ 8.09967396e-02, 9.96661051e-01, -1.03090934e-02], [-3.24531964e-04, 1.03694477e-02, 9.99946183e-01]] origin = [1.71104606e+00, 5.80000039e-01, 9.43144935e-01] from scipy.spatial.transform import Rotation as R # position is the origin position = origin r = R.from_matrix(np.asarray(rotation)) # heading in WCS using scipy heading = r.as_quat() print(f"position:{position}\nheading: {heading}")
Un outil d'interface utilisateur tel que 3D Rotation Converter
Si vous avez une matrice de transformation extrinsèque 4x4, notez que la matrice de transformation se présente sous la forme [R T; 0 0 0 1]
, où R
est la matrice de rotation et T
, le vecteur de translation d'origine. Cela signifie que vous pouvez extraire la matrice de rotation et le vecteur de translation de la matrice de transformation comme suit.
import numpy as np transformation = [[ 9.96714314e-01, -8.09890350e-02, 1.16333982e-03, 1.71104606e+00], [ 8.09967396e-02, 9.96661051e-01, -1.03090934e-02, 5.80000039e-01], [-3.24531964e-04, 1.03694477e-02, 9.99946183e-01, 9.43144935e-01], [ 0, 0, 0, 1]] transformation = np.array(transformation ) rotation = transformation[0:3][0:3] translation= transformation[0:3][3] from scipy.spatial.transform import Rotation as R # position is the origin translation position = translation r = R.from_matrix(np.asarray(rotation)) # heading in WCS using scipy heading = r.as_quat() print(f"position:{position}\nheading: {heading}")
Avec votre propre configuration, vous pouvez calculer une matrice de transformation extrinsèque en utilisant GPS la IMU position et l'orientation (latitude, longitude, altitude et roulis, tangage, lacet) par rapport au DAR capteur Li du véhicule ego. Par exemple, vous pouvez calculer la pose à partir de données KITTI brutes en pose = convertOxtsToPose(oxts)
transformant les données oxts en poses euclidiennes locales, spécifiées par des matrices de transformation rigides 4x4. Vous pouvez ensuite transformer cette matrice de transformation de données de pose en système de référence mondial à l'aide de la matrice de transformation des trames de référence dans le système de coordonnées mondial.
struct Quaternion { double w, x, y, z; }; Quaternion ToQuaternion(double yaw, double pitch, double roll) // yaw (Z), pitch (Y), roll (X) { // Abbreviations for the various angular functions double cy = cos(yaw * 0.5); double sy = sin(yaw * 0.5); double cp = cos(pitch * 0.5); double sp = sin(pitch * 0.5); double cr = cos(roll * 0.5); double sr = sin(roll * 0.5); Quaternion q; q.w = cr * cp * cy + sr * sp * sy; q.x = sr * cp * cy - cr * sp * sy; q.y = cr * sp * cy + sr * cp * sy; q.z = cr * cp * sy - sr * sp * cy; return q; }
Transformations de fusion des capteurs de Ground Truth
Les sections suivantes expliquent plus en détail les transformations de fusion des capteurs Ground Truth effectuées à l'aide des données de pose que vous fournissez.
Li DAR Extrinsèque
Afin de projeter vers et depuis une DAR scène Li 3D vers une image de caméra 2D, Ground Truth calcule les métriques de projection de transformation rigide en utilisant la pose et le cap du véhicule égo. Ground Truth calcule la rotation et la translation des coordonnées mondiales dans le plan 3D en effectuant une simple séquence de rotations et de translation.
Ground Truth calcule les métriques de rotation à l'aide des quaternions de cap comme suit :
Ici, [x, y, z, w]
correspond aux paramètres de l'heading
JSONobjet,[qx, qy, qz, qw]
. Ground Truth calcule le vecteur de colonne de traduction en tant que T = [poseX, poseY, poseZ]
. Ensuite, les métriques extrinsèques sont simplement les suivantes :
LiDAR_extrinsic = [R T;0 0 0 1]
Calibrations de caméra : extrinsèque, intrinsèque et distorsion
La calibration géométrique de la caméra, également appelée camera resectioning, évalue les paramètres d'un objectif et d'un capteur d'image ou d'une image ou une vidéo prise par la caméra. Vous pouvez utiliser ces paramètres pour corriger la distorsion de l'objectif, mesurer la taille d'un objet en unités mondiales ou déterminer l'emplacement de la caméra dans la scène. Les paramètres de caméra incluent les coefficients intrinsèques et de distorsion.
Métriques extrinsèques de la caméra
Si les données de pose de la caméra sont fournies, Ground Truth calcule les métriques extrinsèques de la caméra en fonction d'une transformation rigide du plan 3D en plan de la caméra. Le calcul est le même que celui utilisé pour les Li DAR Extrinsèque, sauf que Ground Truth utilise les données de pose de la caméra (position
et heading
) et calcule les métriques extrinsèques inverses.
camera_inverse_extrinsic = inv([Rc Tc;0 0 0 1]) #where Rc and Tc are camera pose components
Métriques intrinsèques et distorsion
Certains appareils photo, tels que les appareils photo sténopé ou fisheye, peuvent introduire une distorsion importante dans les photos. Cette distorsion peut être corrigée à l'aide de coefficients de distorsion et de la distance focale de la caméra. Pour en savoir plus, veuillez consulter Étalonnage de la caméra avec OpenCV
Il existe deux types de distorsion que Ground Truth peut corriger : la distorsion radiale et la distorsion tangentielle.
La distorsion radiale se produit lorsque les rayons lumineux se courbent plus près des bords d'un objectif qu'ils ne le font à son centre optique. Plus l'objectif est petit, plus la distorsion est grande. La présence de la distorsion radiale se manifeste sous la forme de l'effet de tonneau ou fish-eye et Ground Truth utilise Formula 1 pour la supprimer.
Formule 1 :
La distorsion tangentielle se produit parce que les objectifs utilisés pour prendre les images ne sont pas parfaitement parallèles au plan des images. Cela peut être corrigé avec la Formule 2.
Formule 2 :
Dans le fichier manifeste source, vous pouvez fournir des coefficients de distorsion et Ground Truth supprimera la distorsion de vos images. Tous les coefficients de distorsion sont des valeurs flottantes.
-
k1
,k2
,k3
,k4
– Coefficients de distorsion radiale. Pris en charge pour les modèles de caméras fisheye et à sténopé. -
p1
,p2
– Coefficients de distorsion tangentielle. Pris en charge pour les modèles de caméras à sténopé.
Si la déformation des images a déjà été supprimée, tous les coefficients de distorsion doivent être 0 dans votre manifeste d'entrée.
Afin de reconstruire correctement l'image corrigée, Ground Truth effectue une conversion d'unité des images basée sur les distances focales. Si une distance focale courante est utilisée avec un rapport de forme donné pour les deux axes, tel que 1, dans la formule supérieure, nous aurons une distance focale unique. La matrice contenant ces quatre paramètres est appelée matrice de calibration intrinsèque en caméra.
Bien que les coefficients de distorsion soient les mêmes quelles que soient les résolutions utilisées pour la caméra, ceux-ci doivent être mis à l'échelle avec la résolution actuelle provenant de la résolution calibrée.
Les valeurs suivantes sont des valeurs flottantes.
-
fx
- longueur focale dans la direction x. -
fy
- longueur focale dans la direction y. -
cx
- coordonnée x du point principal. -
cy
- coordonnées y du point principal.
Ground Truth utilise les métriques extrinsèques et les métriques intrinsèques de la caméra pour calculer les mesures d'affichage, comme indiqué dans le bloc de code suivant pour transformer les étiquettes entre la scène 3D et les images 2D.
def generate_view_matrix(intrinsic_matrix, extrinsic_matrix): intrinsic_matrix = np.c_[intrinsic_matrix, np.zeros(3)] view_matrix = np.matmul(intrinsic_matrix, extrinsic_matrix) view_matrix = np.insert(view_matrix, 2, np.array((0, 0, 0, 1)), 0) return view_matrix