Mercurial > ift6266
annotate transformations/DistorsionGauss.py @ 57:6846136b2201
Add a simple test script to see transformation step by step
author | Xavier Glorot <glorotxa@iro.umontreal.ca> |
---|---|
date | Sun, 07 Feb 2010 23:29:05 -0500 |
parents | 3bc75139654a |
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 |