7
votes

Visualisation de perspective à OpenCV basée sur l'orientation de la caméra connaître

Je travaille sur un projet qui tente de supprimer la distorsion de la perspective d'une image basée sur l'orientation connue de la caméra. Ma pensée est que je peux créer une matrice de rotation basée sur les orientations connues X, Y et Z de la caméra. Je peux ensuite appliquer ces matrices à l'image via la méthode brûlée.

dans mon script (écrit en python) J'ai créé trois matrices de rotation, toutes basées sur un angle d'orientation. Je suis arrivé à un point où je suis coincé sur deux questions. Premièrement, lorsque je charge chaque matrice individuelle dans la méthode de la merpcler, il ne semble pas fonctionner correctement. Chaque fois que je vous évite une image sur un axe, il semble trop surpasser l'image. Le contenu de l'image n'est reconnaissable que si je limite l'angle d'orientation à environ 1 degré ou moins.

Deuxièmement, comment puis-je combiner les trois matrices de rotation en une matrice unique à charger dans la méthode de la merveilleuse. Puis-je importer une matrice de rotation 3x3 dans cette méthode ou dois-je créer une matrice projective 4x4? Vous trouverez ci-dessous le code que je travaille.

Merci pour votre aide.

cr xxx


0 commentaires

3 Réponses :


0
votes

Le page Wikipedia sur les matrices de rotation montre comment il est possible de combiner les trois matrices de rotation de base en un.


0 commentaires

3
votes

Il suffit de savoir que la rotation ne suffit pas à moins que vos images ne soient prises soit à l'aide d'une lentille télécentrique, soit avec une lentille téléobjective avec une focale très longue (dans laquelle les images sont presque orthographiques et qu'il n'y a pas de distorsion de perspective).

En plus, ce n'est pas nécessaire. True, vous pouvez annuler la perspective pour désemporter un avion dans l'image en calibrant la caméra (c'est-à-dire estimer les paramètres intrinsèques et extrinsèques pour former la matrice de projection de la caméra complète).

Mais vous obtenez le même résultat beaucoup plus simplement si vous pouvez identifier à l'image un quadrilatère qui est l'image d'un carré du monde réel (ou d'un rectangle avec un rapport de largeur / hauteur connu). Si vous pouvez le faire, vous pouvez calculer trivialement la matrice d'homographie qui mappe le carré (rectangle) au quadrilatère, puis chaîne en utilisant son inverse.


2 commentaires

Peut-être que je peux clarifier ce que j'essaie de faire plus clairement, car je ne suis toujours pas fixé sur une méthode pour y parvenir encore. Ce que j'essaie de le faire prendre des mesures de divers objets d'une séquence vidéo. Les rubriques véridiques sont modifiées en fonction du point de vue de la caméra. est-ce possible de


Je ne sais pas quelle est une "mesure de la rubrique". Pouvez-vous mettre à jour votre question avec un exemple de vidéo de ce que vous essayez exactement de faire?



4
votes

Vous faites plusieurs choses mal. Tout d'abord, vous ne pouvez pas pivoter sur l'axe X ou Y sans modèle de caméra. Imaginez une caméra avec un champ de vision incroyablement large. Vous pouvez le retenir vraiment près d'un objet et voir tout le cas, mais si cet objet a fait pivoter ses bords semblerait voler vers vous très rapidement avec une forte distorsion de perspective. D'autre part, un petit champ de vision (Think Telescope) a une très petite distorsion de perspective. Un bel endroit pour démarrer est de définir votre avion d'image au moins aussi loin de la caméra car il est large et placer votre objet directement sur le plan d'image. C'est ce que j'ai fait dans cet exemple (C ++ OpenCV)

Les étapes sont

  1. construire une matrice de rotation
  2. Centre l'image à l'origine
  3. Tournez l'image
  4. Déplacez l'image vers le bas de l'axe Z
  5. multiplier par la matrice de caméra
  6. warp the perspective
    xxx

    Ce code m'a donné cette sortie

     Entrez la description de l'image ici

    Je n'ai pas vu la réponse de Franco avant d'avoir posté ceci. Il est tout à fait correct, à l'aide de la restauration vous éviterait toutes ces étapes. J'espère toujours que cela est utile.


0 commentaires