diff transformations/BruitGauss.py @ 89:cc641ee75d3b

Il y a maintenant 25% de proba d'effectuer le bruitage
author SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
date Thu, 11 Feb 2010 09:01:03 -0500
parents bab98bb47616
children 17fabd74dd2b
line wrap: on
line diff
--- a/transformations/BruitGauss.py	Thu Feb 11 08:55:41 2010 -0500
+++ b/transformations/BruitGauss.py	Thu Feb 11 09:01:03 2010 -0500
@@ -12,6 +12,8 @@
 La grandeur de la gaussienne ainsi que son ecart type sont definit par complexity 
 et par une composante aleatoire normale.
 
+On a 25 % de chances d'effectuer le bruitage
+
 Ce fichier prend pour acquis que les images sont donnees une a la fois
 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1.
 
@@ -31,17 +33,21 @@
         self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul
         self.sigma_gauss=3.0  #L'ecart type du noyau gaussien
         self.grandeur=7 #Largeur de la fenetre gaussienne
+        self.effectuer=1   #1=effectuer et 0=rien faire
         
     def get_settings_names(self):
-        return ['proportion_bruit','sigma_gauss','grandeur']
+        return ['proportion_bruit','sigma_gauss','grandeur','effectuer']
 
     def regenerate_parameters(self, complexity):
         self.proportion_bruit = float(complexity)/25 
         self.nb_chng=int(1024*self.proportion_bruit)
+        
         if float(complexity) > 0:
             self.sigma_gauss=max(0,numpy.random.normal(complexity*5,complexity))
             self.grandeur=int(min(31,max(1,8*complexity*numpy.random.normal(1,float(complexity)/2))))
+            self.effectuer =numpy.random.binomial(1,0.25)    ##### On a 25% de faire un bruit #####
         else:
+            self.effectuer = 0
             self.sigma_gauss = 0
             self.grandeur=1
         #Un peu de paranoia ici, mais on ne sait jamais
@@ -51,10 +57,12 @@
         return self._get_current_parameters()
 
     def _get_current_parameters(self):
-        return [self.proportion_bruit,self.sigma_gauss,self.grandeur]
+        return [self.proportion_bruit,self.sigma_gauss,self.grandeur,self.effectuer]
 
     
     def transform_image(self, image):
+        if self.effectuer == 0:
+            return image
         image=image.reshape((32,32))
 
         #creation du noyau gaussien
@@ -73,7 +81,7 @@
         for i in xrange(0,self.nb_chng):
             x_bruit=int(numpy.random.randint(0,32))
             y_bruit=int(numpy.random.randint(0,32))
-            
+            #l'overlap n'est pas dramatique. Pas besoin de mecanisme pour s'en proteger
             image[x_bruit,y_bruit]=max(0,min(1,numpy.random.normal(0.4,self.proportion_bruit*20)))
             
             bord = int((self.grandeur-1)/2)