Partage
  • Partager sur Facebook
  • Partager sur Twitter

Matrice - transformation affine

2 décembre 2011 à 18:32:15

Bon donc voilà le problème. J,essaie de faire une transformation affine. Je veux envoyer dans ma matrice zero les valeurs qui se trouvent dans ma matrice initiale (self.a) mais à des coordonnées différents et ensuite la renvoyer comme étant self.a pour pouvoir utiliser la fonction afficher() .Cependant, ma matrice zero garde toujours ses valeurs à 0 et ca me renvoie une image de la bonne dimension mais toute blanche.... Pourquoi? Au secours :)

import matplotlib.pyplot as plt
import numpy

class Image():
    def lire(self,image):
        """Pour lire une image a partir du disque"""
        if image[-4:] == '.png':
            self.a = plt.imread(image)
        else:
            raise ValueError("Ce n'est pas un format .png")
        
    def afficher(self):
        """affiche l'image dans une fenetre graphique"""
        plt.figure()
        plt.imshow(self.a)

    def canal(self,types='rgb'):
        """Retourne un ou plusieurs canaux de l'image"""
        if types == 'rgb':
            return self.a
        elif types == 'bleu':
            self.bleu=self.a[:,:,2]
            return self.bleu
        elif types == 'rouge':
            self.rouge=self.a[:,:,0]
            return self.rouge
        elif types == 'vert':
            self.vert=self.a[:,:,1]
            return self.vert

    def transformer(self):
        """Transforme le point de vue de l'image"""
        zero = numpy.zeros((numpy.size(self.a,0),
                           numpy.size(self.a,1),
                           numpy.size(self.a,2)))
        M = numpy.array( [[0.002205, 0.000934, -0.392481],
                          [0.000164, 0.004777,-0.919744],
                          [8.6659e-98, 3.0170e-06, 0.000891]] )
        
        for x in range((numpy.size(self.a,0))):
            for y in range((numpy.size(self.a,1))):
                vecteur1 = numpy.array([[x],[y],[1]])
                affine1 = numpy.dot(M,vecteur1)
                u=affine1[0,0]
                v=affine1[1,0]
                w=affine1[2,0]
                zero[x,y,:]=self.a[round(u/w),round(v/w),:]
                self.a=zero
                return self.a

h=Image()
h.lire('C:\Users\Philippe\Desktop\Phil\hibou.png')
h.transformer()
h.afficher()
plt.show()
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2011 à 0:52:54

Le message qui suit est une réponse automatique.
Les réponses automatiques nous permettent d'éviter de répéter de nombreuses fois la même chose, et donc de gagner beaucoup de temps.
Nous sommes néanmoins ouverts à toute question ou remarque, n'hésite pas à me contacter par messagerie privée à ce sujet.



Manque de politesse


Bonjour,

Ton message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir » etc.).
Les règles du site exigent que chaque nouveau message comporte un minimum de politesse.
Après tout, les gens qui te répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ? :)

Je ferme donc ce sujet et t'invite à en poster un nouveau en prenant cette règle en compte.

Merci de ta compréhension. :)
Les modérateurs.
  • Partager sur Facebook
  • Partager sur Twitter
Zeste de Savoir, le site qui en a dans le citron !