annotate transformations/DistorsionGauss.py @ 120:5e00ed18ae32

changed some transformation paramters to better fit with visualization
author Xavier Glorot <glorotxa@iro.umontreal.ca>
date Wed, 17 Feb 2010 17:45:48 -0500
parents c9d680d9a908
children 8008f4d31869
rev   line source
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 '''
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
5 Ajout d'une composante aleatoire dans chaque pixel de l'image.
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
6 C'est une distorsion gaussienne de moyenne 0 et d'écart type complexity/10
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
7
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
8 Il y a 30% d'effectuer le bruitage
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
9
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
11
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
12 '''
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
13
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14 import numpy
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
15 import random
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
16
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17 class DistorsionGauss():
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
19 def __init__(self):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20 self.ecart_type=0.1 #L'ecart type de la gaussienne
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
21 self.effectuer=1 #1=on effectue et 0=rien faire
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
22
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
23 def get_settings_names(self):
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
24 return ['effectuer']
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
25
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
26 def get_settings_names_determined_by_complexity(self,complexity):
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
27 return ['ecart_type']
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
29 def regenerate_parameters(self, complexity):
117
c9d680d9a908 changed again the variance scaling for Distorsion Gauss, come back to the original
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 112
diff changeset
30 self.ecart_type=float(complexity)/10
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
31 self.effectuer =numpy.random.binomial(1,0.3) ##### On a 30% de faire un bruit #####
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
32 return self._get_current_parameters()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
33
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
34 def _get_current_parameters(self):
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
35 return [self.effectuer]
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
36
105
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
37 def get_parameters_determined_by_complexity(self,complexity):
901ab3329064 Parametre deterministe retourne dans les fonctions '_determined_by_complexity' et le parametre stochastique retourne dans les fonctions conventionnelles
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 90
diff changeset
38 return [float(complexity)/10]
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
39
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40 def transform_image(self, image):
90
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
41 if self.effectuer == 0:
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
42 return image
e352a98fcc0a Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 77
diff changeset
43
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
44 image=image.reshape(1024,1)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
45 aleatoire=numpy.zeros((1024,1)).astype('float32')
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
46 for i in xrange(0,1024):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
47 aleatoire[i]=float(random.gauss(0,self.ecart_type))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
48 image=image+aleatoire
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
49
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
50
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
51 #Ramener tout entre 0 et 1. Ancienne facon de normaliser.
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
52 #Resultats moins interessant je trouve.
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
53 ## if numpy.min(image) < 0:
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
54 ## image-=numpy.min(image)
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
55 ## if numpy.max(image) > 1:
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
56 ## image/=numpy.max(image)
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
57
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
58 for i in xrange(0,1024):
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
59 image[i]=min(1,max(0,image[i]))
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
60
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
61 return image.reshape(32,32)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
62
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
63
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
64 #---TESTS---
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
65
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
66 def _load_image():
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
67 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
68 d = ft.read(f)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69 w=numpy.asarray(d[random.randint(0,100)])
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
70 return (w/255.0).astype('float')
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
71
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
72 def _test(complexite):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
73 img=_load_image()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 transfo = DistorsionGauss()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 pylab.imshow(img.reshape((32,32)))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
76 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77 print transfo.get_settings_names()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
78 print transfo.regenerate_parameters(complexite)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
79
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
80 img_trans=transfo.transform_image(img)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
81
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
82 pylab.imshow(img_trans.reshape((32,32)))
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
83 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
84
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
85
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
86 if __name__ == '__main__':
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
87 from pylearn.io import filetensor as ft
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
88 import pylab
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
89 for i in xrange(0,5):
77
aee278ebc827 Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 47
diff changeset
90 _test(0.5)
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
91
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
92