Système de coordonnées de la caméra, système de coordonnées mondial, conversion du système de coordonnées de pixels et conversion Fov de OPENGLDEFocal Length et Opengl

Objectif : Comprendre le fonctionnement de la caméra, le rendu et les cartes de profondeur capturées par la caméra

Récemment, la relation paramétrique entre les paramètres de la caméra et les images rendues en opengl a été étudiée. La matrice du projet sera rencontrée lors du passage du système de coordonnées de la caméra au système de coordonnées des pixels.

Transformation théorique de la caméra

Connaissance de la théorie de l'apprentissage par caméra. Normalement, nous utilisons les paramètres de la caméra pour construire un projet et devons généralement passer par les deux processus suivants :
système de coordonnées de la caméra -> système de coordonnées de l'image -> système de coordonnées des pixels Supposons que nous ayons obtenu un sommet p ( xc , yc , zc ) p( x_c )
dans le système de coordonnées de la camérap ( xc,yc,zc) , transformé en un sommet p sur l'image( xi , yi ) p(x_i,y_i)p ( xje,yje) . Sa matrice de transformation estM proj M_{proj}Mp r o j
Ci-dessous, nous présenterons quelques étapes :

  1. Système de coordonnées de caméra vers système de coordonnées d'image M p 2 c M_{p2c}Mp 2c _
    Au même endroit, différentes caméras obtiendront des images différentes. On peut voir que ce processus est généralement lié aux paramètres de la caméra. Certains paramètres de la caméra se trouvent généralement dans le manuel de la caméra, et vous pouvez également trouver le style de documentation correspondant sur Internet, et certains même dans le fichier de configuration (par exemple, les paramètres de la caméra de la caméra d'image dans le scanner). Afin de comprendre la fonction de ces paramètres, nous devons comprendre le principe de l'imagerie par caméra (imagerie des petits trous).
    insérez la description de l'image ici
    Le système de coordonnées dans l'image est ( O ′ x , O ′ y ) (O'x, O'y)( O x,O y), le système de coordonnées de la caméra est( O cxc , O cyc , O czc ) (O_cx_c, O_cy_c , O_cz_c)( OcXc,Ocyc,Oczc) , pour une meilleure compréhension, convertissez la vue visuelle. Parce que( O ′ x , O ′ y ) (O'x, O'y)( O x,O y)( O cxc , O cyc , O czc ) (O_cx_c, O_cy_c , O_cz_c)( OcXc,Ocyc,Oczc)( O cxc , O cyc ) (O_cx_c, O_cy_c)( OcXc,Ocyc) parallèle. Par conséquent, selon la symétrie géométrique, le système de coordonnées de l'image est déplacé vers la position miroir, comme illustré dans la figure ci-dessous. ∠ O c AB \angle{O_cAB}∠O _cA B est un angle droit. L'image n'est pas très précise.

insérez la description de l'image ici
Car triangles semblables (1) :
△ ABO c ∼ △ o CO c \bigtriangleup ABO_c \sim \bigtriangleup oCO_cA B Oco C Oc
Obtenez la formule suivante :
O co O c Z c = o CAB = O c CO c B ( 1 ) \frac{O_co}{O_cZ_c} = \frac{oC}{AB} = \frac{O_cC}{O_cB} \ espace \espace \espace (1)OcZcOco=Un BoC _=OcBOcC   ( 1 )
Une autre expression (carO c O_cOcest l'origine , a changé le symbole) comme suit :
O co O c Z c = f Z c ( 2 ) \frac{O_co}{O_cZ_c} = \frac{f}{Z_c} \space \space \space (2)OcZcOco=Zcf   ( 2 )
o CAB = x X c ( 3 ) \frac{oC}{AB} = \frac{x}{X_c} \space \space \space (3)Un BoC _=Xcx   ( 3 )

Car triangles semblables (2) :
△ ABO c ∼ △ o CO c \bigtriangleup ABO_c \sim \bigtriangleup oCO_cA B Oco C Oc
On obtient la formule suivante :
O c CO c B = C p BP ( 4 ) \frac{O_cC}{O_cB} = \frac{Cp}{BP} \space \space \space (4)OcBOcC=BP _C p   ( 4 )
Une autre expression (carO c O_cOcest l'origine , a changé le symbole) comme suit :
C p BP = y Y c ( 5 ) \frac{Cp}{BP} = \frac{y}{Y_c} \space \space \space(5)BP _C p=Ouicy   ( 5 )
parce que(1) (2) (3) (4) (5) (1)(2)(3)(4)(5)( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) La formule donne :
f Z c = x X c = y Y c \frac{f}{Z_c} = \frac{x}{X_c} = \frac { y}{Y_c}Zcf=Xcx=Ouicy
Converti ensuite dans la formule suivante :
x = f ∗ X c Z c ( 6 ) x=\frac{f*X_c}{Z_c} \space \space \space(6)X=ZcFXc   ( 6 )
y = F ∗ Y c Z c ( 7 ) y=\frac{f*Y_c}{Z_c} \space \space \space(7)y=ZcFOuic   ( 7 )
parmi eux( 6 ), ( 7 ) (6), (7)( 6 ) ,( 7 ) La formule s'écrit sous forme de matrice comme suit :
[ xyz ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] \begin{bmatrix} x\\ y \\ z \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c\\ Y_c \\ Z_c \\ 1 \end{bmatrice}Xyz=F000F0001000XcOuicZc1
L'équation matricielle finale M p 2 c M_{p2c}Mp 2c _Par défaut :
M p 2 c = [ f 0 0 0 0 f 0 0 0 0 1 0 ] M_{p2c}= \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0&0&1&0 \end{bmatrice}Mp 2c _=F000F0001000
La formule abrégée peut être obtenue :
[ xyz ] = M p 2 c [ X c Y c Z c 1 ] \begin{bmatrix} x\\ y \\ z \end{bmatrix} = M_{p2c}\begin{bmatrix } X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrice}Xyz=Mp 2c _XcOuicZc1
[ xyz ] \begin{bmatrix} x\\ y \\ z \end{bmatrix} obtenu à ce momentXyzest une unité physique. Ce n'est pas en unités de pixels, il doit donc être converti en unités de pixels, il a besoin de la longueur physique spécifique de chaque pixel. Le paramètre du capteur de la caméra est requis. Les coordonnées de la caméra en coordonnées de pixel sont décrites ci-dessous.

  1. Convertir le système de coordonnées de l'image en système de coordonnées de pixels M i 2 p M_{i2p}Mje 2p _
    Il est nécessaire de convertir le système de coordonnées de la caméra en un système de coordonnées de pixels, ce qui implique deux problèmes,
    1) Deux problèmes de système de coordonnées. Dans le système de coordonnées de l'image, l'origine est généralement au centre. Cependant, l'origine de notre système de coordonnées d'affichage de pixels traditionnel est le coin supérieur gauche de l'image, et ce vecteur doit être traduit.
    2) Problème de conversion d'unité : Il est nécessaire de savoir combien d'unités physiques (généralement mm) chaque pixel possède, et l'unité physique est le millimètre. Pour les deux conversions, vous devez connaître dx , dy d_x,d_ydx,dyIndiquez combien de mm représentent chaque colonne et chaque ligne, et représentez la largeur d'une colonne 1 pixel = dx mm 1 \space pixel = d_x \space mm1 pixel _ _ _ _ =dx m m ; la largeur d'une ligne1 pixel = dy mm 1 \space pixel = d_y \space mm1 pixel _ _ _ _ =dy m m , en généraldx = dy d_x=d_ydx=dy. Donc xxLe pixel représenté par la coordonnée x est xdx \frac{x}{dx}réx _x, le yy correspondantLe pixel représenté par la coordonnée y est ydy \frac{y}{dy}d yy
    Les deux systèmes de coordonnées représentés sur la figure sont les suivants :
    insérez la description de l'image ici
    la formule suivante est obtenue en déplaçant le système de coordonnées :
    u = xdx + u 0 ( 8 ) u= \frac{x}{d_x}+u_0 \space \space \space (8)tu=dxx+tu0   ( 8 )
    v = ydy + v 0 ( 9 ) v= \frac{y}{d_y}+v_0 \space \space \space (9)v=dyy+v0   ( 9 )
    parmi eux( 8 ), ( 9 ) (8), (9)( 8 ) ,( 9 ) La formule s'écrit sous forme de matrice comme suit :
    [ uv 1 ] = [ 1 dx 0 u 0 1 dy 0 v 0 0 0 1 ] [ uv 1 ] \begin{bmatrix} u\\ v \ \1 \end{ bmatrix}= \begin{bmatrix} \frac{1}{d_x}&0&u_0 \\ \frac{1}{d_y}&0&v_0 \\0&0&1 \end{bmatrix}\begin{bmatrix} u\\ v \\1 \end {bmatrice}tuv1=dx1dy10000tu0v01tuv1
    La formule matricielle obtenue est :
    M i 2 p = [ 1 dx 0 u 0 1 dy 0 v 0 0 0 1 ] M_{i2p}= \begin{bmatrix} \frac{1}{d_x}&0&u_0 \\ \frac{ 1 }{d_y}&0&v_0 \\0&0&1 \end{bmatrice}Mje 2p _=dx1dy10000tu0v01

Résumez les deux transformations ci-dessus pour obtenir :
M proj = [ 1 dx 0 u 0 1 dy 0 v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] M_{proj}= \begin{bmatrix} \ frac{1}{d_x}&0&u_0 \\ \frac{1}{d_y}&0&v_0 \\0&0&1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \ \ 0 & 0 & 1 & 0 \end{bmatrice}Mp r o j=dx1dy10000tu0v01F000F0001000
Enfin, la formule matrice de projection est obtenue :
M proj = [ fdx 0 u 0 0 0 fdyv 0 0 0 0 1 0 ] = [ fx 0 u 0 0 0 fxv 0 0 0 0 1 0 ] M_{proj}= \begin{bmatrix } \frac{f}{d_x}& 0 & u_0 & 0 \\ 0 & \frac{f}{d_y} & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} = \begin{bmatrice } f_x & 0 & u_0 & 0 \\ 0 & f_x & v_0 & 0 \\ 0 & 0 & 1 & 0 \\end{bmatrice}Mp r o j=dxf000dyf0tu0v01000=Fx000Fx0tu0v01000
Comprendre la relation à travers la formule, obtenir fx = fdx f_x=\frac{f}{d_x}Fx=dxf, il indique le nombre de pixels de la distance focale (il s'agit de l'unité de pixel), de la même manière fy = fdy f_y=\frac{f}{d_y}Fy=dyfIl indique également le nombre de pixels. En général, dx = dy d_x=d_ydx=dy, et la distance focale est un, le ff dans la figure ci-dessusf

Le résumé est le suivant :
M proj = [ fx 0 u 0 0 0 fxv 0 0 0 0 1 0 ] M_{proj}= \begin{bmatrix} f_x & 0 & u_0 & 0 \\ 0 & f_x & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrice}Mp r o j=Fx000Fx0tu0v01000

Théorie du rendu des coordonnées OpenGL

Connaissances théoriques OPENGL basées sur la caméra. Normalement, nous utilisons les paramètres de la caméra pour créer un projet qui nécessite plus de fov, de rapport d'aspect, de proximité et de distance. Parmi eux, nous avons trouvé qu'il y a 4 paramètres dans le rendu spécifique, qui peuvent restituer avec précision les paramètres requis par l'espace, et ils sont faciles à comprendre, et ils coupent un espace pour les opérations de normalisation et les calculs de rendu faciles. Pour plus de détails, veuillez Baidu learnopengl sur les paramètres de l'appareil photo. Il définit les 4 paramètres ci-dessus. Il a deux types de projets, et je présenterai leurs principes ci-dessous :
insérez la description de l'image ici
Si vous ne les convertissez pas en fov, rapport d'aspect, proche, lointain, vous pouvez directement projeter la matrice et la compléter via glFrustum. Mais dans l'apprentissage du rendu opengl, gluPerspective est généralement utilisé, et les paramètres qu'il utilise sont fov, rapport d'aspect, proche, lointain. Nous pouvons directement définir la matrice du projet dans le shader pour obtenir la matrice du projet rendue. Il imite également gluPerspective pour générer la matrice du projet.En même temps, il peut également être converti en les quatre ci-dessus, et gluPerspective d'opengl peut vous aider à générer la matrice du projet. Quoi qu'il en soit fonctionne bien.
1) Les paramètres de la caméra sont convertis en quatre paramètres de fov, rapport d'aspect, proche et lointain.
Comprenez d'abord ces quatre paramètres :
1) Champ de vision (FOV), rapport d'aspect Le rapport d'aspect
est le rapport x/y de l'image finale affichée
FOV : Indique l'angle du champ de vision ouvert, voir la figure ci-dessous.
2) proche et lointain représentent la distance entre les plans tangents éloignés et proches et l'origine, voir les deux plans parallèles sur la figure.
insérez la description de l'image ici
La relation dans l'image ci-dessus peut être vue :
insérez la description de l'image ici
si vous avez besoin de rendre une image cohérente avec l'image, l'image est exprimée en img, et nous définissons le rapport d'aspect et le FOV à travers l'image
Selon la définition, ratio est le rapport x/y de l'image finale affichée, et
la formule calculée est la suivante :
aspect = img . colsimg . rows aspect=\frac{img.cols}{img.rows}un aspect _ _ _ _=je m g . rangées _ _ _je m g . c o l s
Dans la formule ci-dessus, top correspond à la moitié de l'axe y, c'est-à-dire la largeur de pixel dans le système de coordonnées de pixel, qui est
top = pixelwidth 2.0 top = \frac{pixelwidth}{2.0}haut _ _=2 . 0p i x e l w i d t h
Parmi eux, près correspond à la distance focale (système de coordonnées pixel), qui est dans le système de coordonnées pixel. L'unité est unifiée.
Plus tard converti en la formule suivante :
FOV = 2.0 ∗ atanf ( pixelwidth 2.0 ∗ focal L length ) ∗ π 180.0 FOV=2.0*atanf({\frac{pixelwidth}{2.0*focalLength}})*\frac{\pi}{ 180.0 }F OV _=2 . 0a t a n f (2 . 0longueur focale _ _ _ _ _ _ _ _ _p i x e l w i d t h)1 8 0 . 0p
La distance définie pour près et loin peut être aussi proche ou aussi loin que possible.
Sa matrice est la suivante :
insérez la description de l'image ici
Après réglage, l'image rendue est cohérente avec l'image captée par la caméra.

Ensuite pour rejoindre le processus de dérivation.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43851636/article/details/125082129
conseillé
Classement