Mercurial > ift6266
annotate transformations/DistorsionGauss.py @ 85:8aadb0f59a64
changed contrast definition for add_background_image
author | Xavier Glorot <glorotxa@iro.umontreal.ca> |
---|---|
date | Wed, 10 Feb 2010 17:47:57 -0500 |
parents | aee278ebc827 |
children | e352a98fcc0a |
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): |
77
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
21 return [] |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
22 |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
23 def get_settings_name_determined_by_complexity(self): |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
24 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
|
25 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
26 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
|
27 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
|
28 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
|
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_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
|
31 return [] |
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 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
|
34 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
|
35 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
36 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
|
37 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
|
38 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
|
39 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
|
40 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
|
41 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
|
42 |
77
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
43 |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
44 #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
|
45 #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
|
46 ## 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
|
47 ## 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
|
48 ## 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
|
49 ## 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
|
50 |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
51 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
|
52 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
|
53 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
54 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
|
55 |
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 #---TESTS--- |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
58 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
59 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
|
60 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
|
61 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
|
62 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
|
63 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
|
64 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
65 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
|
66 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
|
67 transfo = DistorsionGauss() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
68 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
|
69 pylab.show() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
70 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
|
71 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
|
72 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
73 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
|
74 |
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_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
|
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 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
78 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
79 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
|
80 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
|
81 import pylab |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
82 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
|
83 _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
|
84 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
85 |