annotate transformations/DistorsionGauss.py @ 47:3bc75139654a

Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
author SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
date Thu, 04 Feb 2010 10:32:07 -0500
parents
children aee278ebc827
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
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
8 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
9
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10 '''
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 import numpy
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
13 import random
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
15 class DistorsionGauss():
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 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
18 self.ecart_type=0.1 #L'ecart type de la gaussienne
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
19
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20 def get_settings_names(self):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
21 return ['ecart_type']
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 regenerate_parameters(self, complexity):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
24 self.ecart_type=float(complexity)/10
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
25 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
26
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
27 def _get_current_parameters(self):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28 return []
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
29
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
30 def get_parameters_determined_by_complexity(self, complexity):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
31 return [float(complexity)/10]
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
32
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
33 def transform_image(self, image):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
34 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
35 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
36 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
37 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
38 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
39
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40 #Ramener tout entre 0 et 1
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
41 if numpy.min(image) < 0:
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
42 image-=numpy.min(image)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
43 if numpy.max(image) > 1:
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
44 image/=numpy.max(image)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
45
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
46 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
47
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
48
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
49 #---TESTS---
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
50
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
51 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
52 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
53 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
54 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
55 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
56
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
57 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
58 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
59 transfo = DistorsionGauss()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
60 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
61 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
62 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
63 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
64
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
65 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
66
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
67 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
68 pylab.show()
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
70
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
71 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
72 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
73 import pylab
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 for i in xrange(0,5):
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 _test(1)
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
76
3bc75139654a Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77