IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Transformation projective dans une mauvaise direction


Sujet :

OpenCV

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut Transformation projective dans une mauvaise direction
    Bonjour,

    J'essaie de réaliser "une orthorectification" en utilisant les quatres lasers sur l'image. Connaissant la distance de prise de vue je peux avoir les laser de l'image orthorectifées.
    A partir des lasers, j'utilise les fonction GetPerspectiveTransform et WarpPerspective de OpenCV qui sont idéal pour ce problème.
    Néammoins j'ai l'impression que la rectification se fait dans une mauvaise direction (images ci-jointes) la transformation semble être verticale au lieu d'horizontale .

    Voici les partie du code concerné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    def rectif(In, cadreIn, cadreOut):
        Out = cv.CloneImage(In); cv.Zero(Out)
        mmat = cv.CreateMat(3,3, cv.CV_32FC1)
        print ("mmat= %s"%repr(mmat))
        cv.GetPerspectiveTransform(cadreIn , cadreOut, mmat)
        cv.WarpPerspective(In, Out, mmat)#, flags=cv.CV_WARP_INVERSE_MAP )
        return Out
     
    # Classe
    ...
    ##methode de classe concernee
        def launch_rectif(self):
            global current_image
            #Extraction des coordonnees laser array (4,2)
            self.coord_laser = extraction_laser(current_image)    
            #conversion tuple        
            coord_laser = tuple((tuple(self.coord_laser[0]),\
                                tuple(self.coord_laser[1]),\
                                tuple(self.coord_laser[2]),\
                                tuple(self.coord_laser[3])))
            #Calcul des coordonnees laser dans le cas orthogonal
            height_laser_pix = 0.5*74.5/self.taille_pixel[0] 
            width_laser_pix = 0.5*74.5/self.taille_pixel[1]
            image_center = np.array([np.sum(self.coord_laser[:,0])/4.0,np.sum(self.coord_laser[:,1])/4.0])
            self.new_coord_laser = tuple(((image_center[0]-height_laser_pix, image_center[1]-width_laser_pix),\
                                            (image_center[0]-height_laser_pix, image_center[1]+width_laser_pix),\
                                            (image_center[0]+height_laser_pix, image_center[1]+width_laser_pix),\
                                            (image_center[0]+height_laser_pix, image_center[1]-width_laser_pix)))
     
            print(coord_laser)
            print(self.new_coord_laser)
            print(image_center)
            #rectification
            self.current_image = rectif(current_image, coord_laser, self.new_coord_laser)
    la fonction extraction_laser n'apparaît car très longue mais j'ai bien vérifier les valeurs renvoiés qui sont justes.



    Merci d'avance.
    Images attachées Images attachées    

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2012
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 291
    Points : 434
    Points
    434
    Par défaut conversion (i,j)->(-j,i)=(x,y)
    J'ai l'impression d'avoir cerné le problème:
    Le cadre demandé par PerspectiveTransforme doit être dans un système (x,y) correspondant au coordonnées image hors je donnais les ordonnées (i,j) de la matrice de l'image.
    Logiquement il faudrait faire la conversion suivante (x,y)=(j,-i) ou encore pour rester avec des valeurs d'indice positifs (x,y) = (j, height_image-i).

    Pour le moment j'ai effectué la conversion suivante (x,y)=(j,i) (voir conv(j,i)).
    On voit bien maintenant un carré avec les laser mais l'image n'est pas dans bien orientée.

    J'ai aussi effectué par la suite la conversion (x,y) = (j, height_image-i) (voir conv(_j,i)).

    Avez-vous une idée pour avoir la même image mais à l'endroit.
    Images attachées Images attachées   

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Outil: transformation Executor, dans une transformation
    Par blancheln dans le forum kettle/PDI
    Réponses: 1
    Dernier message: 11/04/2014, 11h53
  2. [WD12] centrer texte dans une impression directe
    Par tahraz dans le forum WinDev
    Réponses: 3
    Dernier message: 14/06/2013, 14h30
  3. Réponses: 58
    Dernier message: 29/10/2010, 13h35
  4. Réponses: 7
    Dernier message: 26/01/2007, 22h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo