annotate data_generation/transformations/BruitGauss.py @ 612:21d53fd07f6e

reviews AISTATS
author Yoshua Bengio <bengioy@iro.umontreal.ca>
date Mon, 20 Dec 2010 11:54:35 -0500
parents d5b2b6397a5a
children
rev   line source
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 '''
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
5 Ajout de bruit gaussien dans les donnees. A chaque iteration, un bruit poivre
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
6 et sel est ajoute, puis un lissage gaussien autour de ce point est ajoute.
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
7 On fait un nombre d'iteration = 1024*complexity/25 ce qui equivaud
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
8 a complexity/25 des points qui recoivent le centre du noyau gaussien.
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
9 Il y en a beaucoup moins que le bruit poivre et sel, car la transformation
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
10 est plutôt aggressive et touche beaucoup de pixels autour du centre
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
11
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
12 La grandeur de la gaussienne ainsi que son ecart type sont definit par complexity
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
13 et par une composante aleatoire normale.
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14
89
cc641ee75d3b Il y a maintenant 25% de proba d'effectuer le bruitage
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 62
diff changeset
15 On a 25 % de chances d'effectuer le bruitage
cc641ee75d3b Il y a maintenant 25% de proba d'effectuer le bruitage
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 62
diff changeset
16
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17 Ce fichier prend pour acquis que les images sont donnees une a la fois
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1.
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
19
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
21
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
22 '''
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
23
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
24 import numpy
149
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
25 #import random
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
26 import scipy
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
27 from scipy import ndimage
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
29 class BruitGauss():
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
30
149
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
31 def __init__(self,complexity=1,seed=6378):
96
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
32 self.nb_chngmax =10 #Le nombre de pixels changes. Seulement pour fin de calcul
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
33 self.grandeurmax = 20
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
34 self.sigmamax = 6.0
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
35 self.regenerate_parameters(complexity)
149
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
36 self.seed=seed
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
37
155
7640cb31cf1f Enlevé les re-seed constants, interfère avec les autres modules
boulanni <nicolas_boulanger@hotmail.com>
parents: 149
diff changeset
38 #numpy.random.seed(self.seed)
149
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
39
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
40 def get_seed(self):
fa35d9ecf664 Rajout d'un seed random et d'une fonction get_seed.Aussi, import random enleve car non necessaire
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 111
diff changeset
41 return self.seed
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
42
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
43 def get_settings_names(self):
111
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
44 return ['nb_chng','sigma_gauss','grandeur']
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
45
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
46 def regenerate_parameters(self, complexity):
111
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
47 self.effectuer =numpy.random.binomial(1,0.25) ##### On a 25% de faire un bruit #####
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
48
89
cc641ee75d3b Il y a maintenant 25% de proba d'effectuer le bruitage
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 62
diff changeset
49
111
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
50 if self.effectuer and complexity > 0:
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
51 self.nb_chng=3+int(numpy.random.rand()*self.nb_chngmax*complexity)
96
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
52 self.sigma_gauss=2.0 + numpy.random.rand()*self.sigmamax*complexity
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
53 self.grandeur=12+int(numpy.random.rand()*self.grandeurmax*complexity)
442
d5b2b6397a5a added permut pixel
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 167
diff changeset
54 #creation du noyau gaussien
111
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
55 self.gauss=numpy.zeros((self.grandeur,self.grandeur))
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
56 x0 = y0 = self.grandeur/2.0
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
57 for i in xrange(self.grandeur):
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
58 for j in xrange(self.grandeur):
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
59 self.gauss[i,j]=numpy.exp(-((i-x0)**2 + (j-y0)**2) / self.sigma_gauss**2)
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
60 #creation de la fenetre de moyennage
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
61 self.moy=numpy.zeros((self.grandeur,self.grandeur))
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
62 x0 = y0 = self.grandeur/2
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
63 for i in xrange(0,self.grandeur):
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
64 for j in xrange(0,self.grandeur):
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
65 self.moy[i,j]=((numpy.sqrt(2*(self.grandeur/2.0)**2) -\
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
66 numpy.sqrt(numpy.abs(i-self.grandeur/2.0)**2+numpy.abs(j-self.grandeur/2.0)**2))/numpy.sqrt((self.grandeur/2.0)**2))**5
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
67 else:
106
313c249d638e Correction bug division par zéro dans BruitGauss.py
boulanni <nicolas_boulanger@hotmail.com>
parents: 99
diff changeset
68 self.sigma_gauss = 1 # eviter division par 0
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
69 self.grandeur=1
111
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
70 self.nb_chng = 0
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
71 self.effectuer = 0
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
72
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
73 return self._get_current_parameters()
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 def _get_current_parameters(self):
111
259439a4f9e7 Changed a bit the code for BruitGauss.py for simplicity
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 106
diff changeset
76 return [self.nb_chng,self.sigma_gauss,self.grandeur]
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
78
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
79 def transform_image(self, image):
89
cc641ee75d3b Il y a maintenant 25% de proba d'effectuer le bruitage
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 62
diff changeset
80 if self.effectuer == 0:
cc641ee75d3b Il y a maintenant 25% de proba d'effectuer le bruitage
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 62
diff changeset
81 return image
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
82 image=image.reshape((32,32))
96
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
83 filtered_image = ndimage.convolve(image,self.gauss,mode='constant')
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
84 assert image.shape == filtered_image.shape
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
85 filtered_image = (filtered_image - filtered_image.min() + image.min()) / (filtered_image.max() - filtered_image.min() + image.min()) * image.max()
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
86
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
87 #construction of the moyennage Mask
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
88 Mask = numpy.zeros((32,32))
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
89
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
90 for i in xrange(0,self.nb_chng):
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
91 x_bruit=int(numpy.random.randint(0,32))
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
92 y_bruit=int(numpy.random.randint(0,32))
96
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
93 offsetxmin = 0
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
94 offsetxmax = 0
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
95 offsetymin = 0
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
96 offsetymax = 0
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
97 if x_bruit < self.grandeur / 2:
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
98 offsetxmin = self.grandeur / 2 - x_bruit
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
99 if 32-x_bruit < numpy.ceil(self.grandeur / 2.0):
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
100 offsetxmax = numpy.ceil(self.grandeur / 2.0) - (32-x_bruit)
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
101 if y_bruit < self.grandeur / 2:
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
102 offsetymin = self.grandeur / 2 - y_bruit
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
103 if 32-y_bruit < numpy.ceil(self.grandeur / 2.0):
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
104 offsetymax = numpy.ceil(self.grandeur / 2.0) - (32-y_bruit)
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
105 Mask[x_bruit - self.grandeur/2 + offsetxmin : x_bruit + numpy.ceil(self.grandeur/2.0) - offsetxmax,\
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
106 y_bruit - self.grandeur/2 + offsetymin : y_bruit + numpy.ceil(self.grandeur/2.0)- offsetymax] +=\
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
107 self.moy[offsetxmin:self.grandeur - offsetxmax,offsetymin:self.grandeur - offsetymax]
62
bab98bb47616 Correction majeure. Auparavant, le lissage gaussien etait global avec une seule gaussienne. Maintenant, le lissage gaussien est local. Un bruit correle est rajoute sur l'image
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 38
diff changeset
108
96
17fabd74dd2b Changed behavior of gaussian noise to apply a gauss filter with a random sigma, and then select some point of the image to be averaged with it
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 89
diff changeset
109 return numpy.asarray((image + filtered_image*Mask)/(Mask+1),dtype='float32')
38
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
110
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
111 #---TESTS---
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
112
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
113 def _load_image():
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
114 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
115 d = ft.read(f)
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
116 w=numpy.asarray(d[0])
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
117 return (w/255.0).astype('float')
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
118
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
119 def _test(complexite):
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
120 img=_load_image()
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
121 transfo = BruitGauss()
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
122 pylab.imshow(img.reshape((32,32)))
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
123 pylab.show()
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
124 print transfo.get_settings_names()
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
125 print transfo.regenerate_parameters(complexite)
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
126
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
127 img_trans=transfo.transform_image(img)
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
128
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
129 pylab.imshow(img_trans.reshape((32,32)))
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
130 pylab.show()
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
131
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
132
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
133 if __name__ == '__main__':
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
134 from pylearn.io import filetensor as ft
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
135 import pylab
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
136 _test(0.5)
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
137
349d8dc9504c Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
138