Mercurial > ift6266
view transformations/BruitGauss.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 | 349d8dc9504c |
children | bab98bb47616 |
line wrap: on
line source
#!/usr/bin/python # coding: utf-8 ''' Ajout de bruit gaussien dans les donnees. Un bruit poivre et sel est ajoute aux donnees, puis un filtre gaussien est applique sur l'image. La proportion de bites aleatoires est definit par complexity. Lorsque cette valeur est a 1 ==> Plus reconnaissable et 0 ==> Rien ne se passe Le niveau de lisssage est definit par complexity Au plus c'est eleve, au plus c'est lisse Ce fichier prend pour acquis que les images sont donnees une a la fois sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1. Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010 ''' import numpy import random import scipy from scipy import ndimage class BruitGauss(): def __init__(self): self.proportion_bruit=0.1 #Le pourcentage des pixels qui seront bruites self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul self.sigma_gauss=0.5 #L'ecart type du noyau gaussien def get_settings_names(self): return ['proportion_bruit','sigma_gauss'] def regenerate_parameters(self, complexity): self.proportion_bruit = complexity #Generation uniforme self.nb_chng=int(1024*self.proportion_bruit) self.sigma_gauss=complexity+0.2 return self._get_current_parameters() def _get_current_parameters(self): return [] def get_parameters_determined_by_complexity(self, complexity): return [self.proportion_bruit,self.sigma_gauss] def transform_image(self, image): image=image.reshape(1024,1) changements=random.sample(xrange(numpy.size(image)),self.nb_chng) #Les pixels qui seront changes for j in xrange(0,self.nb_chng): image[changements[j]]=numpy.random.random() #On determine les nouvelles valeurs des pixels changes image=image.reshape(32,32) image=(scipy.ndimage.filters.gaussian_filter\ (image, self.sigma_gauss, order=0, \ output=None, mode='reflect', cval=0.0)) return image #---TESTS--- def _load_image(): f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local. d = ft.read(f) w=numpy.asarray(d[0]) return (w/255.0).astype('float') def _test(complexite): img=_load_image() transfo = BruitGauss() pylab.imshow(img.reshape((32,32))) pylab.show() print transfo.get_settings_names() print transfo.regenerate_parameters(complexite) img_trans=transfo.transform_image(img) pylab.imshow(img_trans.reshape((32,32))) pylab.show() if __name__ == '__main__': from pylearn.io import filetensor as ft import pylab _test(0.5)