comparison transformations/BruitGauss.py @ 38:349d8dc9504c

Ajout de bruit poivre et sel, puis filtre gaussien. Parametres deterministes par rapport a complexity. Compatible testmod.py
author SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
date Tue, 02 Feb 2010 10:46:11 -0500
parents
children bab98bb47616
comparison
equal deleted inserted replaced
37:5848e88f7a7a 38:349d8dc9504c
1 #!/usr/bin/python
2 # coding: utf-8
3
4 '''
5 Ajout de bruit gaussien dans les donnees. Un bruit poivre et sel est ajoute
6 aux donnees, puis un filtre gaussien est applique sur l'image.
7
8 La proportion de bites aleatoires est definit par complexity.
9 Lorsque cette valeur est a 1 ==> Plus reconnaissable et 0 ==> Rien ne se passe
10
11 Le niveau de lisssage est definit par complexity
12 Au plus c'est eleve, au plus c'est lisse
13
14 Ce fichier prend pour acquis que les images sont donnees une a la fois
15 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1.
16
17 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
18
19 '''
20
21 import numpy
22 import random
23 import scipy
24 from scipy import ndimage
25
26 class BruitGauss():
27
28 def __init__(self):
29 self.proportion_bruit=0.1 #Le pourcentage des pixels qui seront bruites
30 self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul
31 self.sigma_gauss=0.5 #L'ecart type du noyau gaussien
32
33 def get_settings_names(self):
34 return ['proportion_bruit','sigma_gauss']
35
36 def regenerate_parameters(self, complexity):
37 self.proportion_bruit = complexity #Generation uniforme
38 self.nb_chng=int(1024*self.proportion_bruit)
39 self.sigma_gauss=complexity+0.2
40 return self._get_current_parameters()
41
42 def _get_current_parameters(self):
43 return []
44
45 def get_parameters_determined_by_complexity(self, complexity):
46 return [self.proportion_bruit,self.sigma_gauss]
47
48 def transform_image(self, image):
49 image=image.reshape(1024,1)
50 changements=random.sample(xrange(numpy.size(image)),self.nb_chng) #Les pixels qui seront changes
51 for j in xrange(0,self.nb_chng):
52 image[changements[j]]=numpy.random.random() #On determine les nouvelles valeurs des pixels changes
53 image=image.reshape(32,32)
54 image=(scipy.ndimage.filters.gaussian_filter\
55 (image, self.sigma_gauss, order=0, \
56 output=None, mode='reflect', cval=0.0))
57
58 return image
59
60 #---TESTS---
61
62 def _load_image():
63 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
64 d = ft.read(f)
65 w=numpy.asarray(d[0])
66 return (w/255.0).astype('float')
67
68 def _test(complexite):
69 img=_load_image()
70 transfo = BruitGauss()
71 pylab.imshow(img.reshape((32,32)))
72 pylab.show()
73 print transfo.get_settings_names()
74 print transfo.regenerate_parameters(complexite)
75
76 img_trans=transfo.transform_image(img)
77
78 pylab.imshow(img_trans.reshape((32,32)))
79 pylab.show()
80
81
82 if __name__ == '__main__':
83 from pylearn.io import filetensor as ft
84 import pylab
85 _test(0.5)
86
87