# Tukey mask - fading effect tw_x = tukey(n=n_x, r=0.15) tw_y = tukey(n=n_y, r=0.15) w = np.tile(((np.outer(tw_y,tw_x))), (N_frame,1,1)) tukey_mask = w.T # Get Random Clouds name_ = mc.figpath + name for seed in [123456 + step for step in range(seeds)]: name__ = mc.figpath + name + '-seed-' + str(seed) + '-sf0-' + str(sf_0).replace('.', '_') + '-V_X-' + str(V_X).replace('.', '_') # broadband z = mc.envelope_gabor(fx, fy, ft, name_, B_sf=Bsf, sf_0=sf_0, theta=theta, B_V=B_V, B_theta = B_theta, alpha=alpha) movie = mc.figures(z, name=None, vext=vext, seed=seed, masking=True) for label, mask in zip(['_mask', '_tukey_mask'], [gauss, tukey_mask]): name_ = name__ + '-cloud-' + label if anim_exist(name_): movie = mc.rectif(movie*mask) mc.anim_save(movie, name_, display=False, vext=vext) # narrowband z = mc.envelope(fx, fy, ft, name_, B_sf=B_sf/10., sf_0=sf_0, theta=theta, B_V=B_V, B_theta=B_theta, alpha=alpha) movie = mc.figures(z, name=None, vext=vext, seed=seed, masking=True) for label, mask in zip(['_mask', 'tukey_mask'], [gauss, tukey_mask]): name_ = name__ + '-blob-' + label if anim_exist(name_): movie = mc.rectif(movie*mask) mc.anim_save(movie, name_, display=False, vext=vext)
fx, fy, ft = mc.get_grids(mc.N_X, mc.N_Y, mc.N_frame) #fx, fy, ft = mc.get_grids(256, 256, 256) #fx, fy, ft = mc.get_grids(512, 512, 128) color = mc.envelope_color(fx, fy, ft) name_ = mc.figpath + name # explore parameters for B_sf in [0.025, 0.05, 0.1, 0.2, 0.4, 0.8]: name_ = mc.figpath + name + '-B_sf' + str(B_sf).replace('.', '_') if mc.anim_exist(name_, vext=vext): z = color * mc.envelope_gabor(fx, fy, ft, B_sf=B_sf, B_theta=np.inf) # mc.visualize(z, name=name_ + '_envelope') im = mc.rectif(mc.random_cloud(z)) # mc.cube(im, name=name_ + '_cube') mc.anim_save(im, name_, display=False, vext=vext) # mc.anim_save(im, name_, display=False, vext='.gif') if DEBUG: # control enveloppe's shape z_low = mc.envelope_gabor(fx, fy, ft, B_sf=0.037, loggabor=False) z_high = mc.envelope_gabor(fx, fy, ft, B_sf=0.15, loggabor=False) import pylab, numpy pylab.clf() fig = pylab.figure(figsize=(12, 12)) a1 = fig.add_subplot(111) a1.contour(numpy.fliplr(z_low[:mc.N_X/2, mc.N_Y/2, mc.N_frame/2:].T), [z_low.max()*.5], colors='red') a1.contour(numpy.fliplr(z_high[:mc.N_X/2, mc.N_Y/2, mc.N_frame/2:].T), [z_high.max()*.5], colors='blue') a1.set_xlabel('spatial frequency')
movie = mc.rectif(movie) # Une image instantanée à t = 0 # In[5]: plt.figure(figsize=(8, 6)) plt.imshow(movie[:, :, 0], cmap=plt.cm.gray) # Et on sauvegarde le stimulus au format desiré (paramètre vext) # * Pour faire du .mp4, il faut installer ffmpeg (sudo apt install ffmpeg), c'est la faute a Linux, désolé ! # * Pour faire du .png, le chemin spécifié devient un fichier dans lequel seront organisé les images # In[15]: mc.anim_save(movie, './stimulus', display=False, vext='.mp4', verbose=True) # Pour afficher le code # In[11]: get_ipython().run_line_magic('pinfo2', 'mc.anim_save') # Et en bonus, si jamais ça marche chez vous, vous pouvez montrer le stimulus directement dans le notebook, mais on a quelques soucis de compatibilité avec les lecteurs Flash sur Ubuntu # In[ ]: for sf_0 in [0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6]: name_ = name + '-sf_0-' + str(sf_0).replace('.', '_') # function performing plots for a given set of parameters mc.figures_MC(fx, fy, ft, name_, sf_0=sf_0, **opts)
# explore parameters for alpha in [0.0, 0.5, 1.0, 1.5, 2.0]: # resp. white(0), pink(1), red(2) or brownian noise (see http://en.wikipedia.org/wiki/1/f_noise name_ = name + '-alpha-' + str(alpha).replace('.', '_') z = mc.envelope_color(fx, fy, ft, alpha) mc.figures(z, name_) for ft_0 in [0.125, 0.25, 0.5, 1., 2., 4., np.inf]:# time space scaling name_ = name + '-ft_0-' + str(ft_0).replace('.', '_') z = mc.envelope_color(fx, fy, ft, ft_0=ft_0) mc.figures(z, name_) for contrast in [0.1, 0.25, 0.5, 0.75, 1.0, 2.0]: name_ = name + '-contrast-' + str(contrast).replace('.', '_') im = mc.rectif(mc.random_cloud(mc.envelope_color(fx, fy, ft)), contrast) mc.anim_save(im, os.path.join(mc.figpath, name_), display=False) for contrast in [0.1, 0.25, 0.5, 0.75, 1.0, 2.0]: name_ = name + '-energy_contrast-' + str(contrast).replace('.', '_') im = mc.rectif(mc.random_cloud(mc.envelope_color(fx, fy, ft)), contrast, method='energy') mc.anim_save(im, os.path.join(mc.figpath, name_), display=False) for seed in [123456 + step for step in range(7)]: name_ = name + '-seed-' + str(seed) mc.anim_save(mc.rectif(mc.random_cloud(mc.envelope_color(fx, fy, ft), seed=seed)), os.path.join(mc.figpath, name_), display=False) for size in range(5, 7): N_X, N_Y, N_frame = 2**size, 2**size, 2**size fx, fy, ft = mc.get_grids(N_X, N_Y, N_frame) ft_0 = N_X/float(N_frame) name_ = name + '-size-' + str(size).replace('.', '_')
name = 'concentric' play = False #True play = True #initialize fx, fy, ft = mc.get_grids(mc.N_X, mc.N_Y, mc.N_frame) color = mc.envelope_color(fx, fy, ft) name_ = mc.figpath + name seed = 123456 im = np.zeros((mc.N_X, mc.N_Y, mc.N_frame)) name_ = mc.figpath + name N = 20 if mc.anim_exist(name_): for i_N in xrange(N): im_ = mc.random_cloud(color * mc.envelope_gabor(fx, fy, ft, V_X=0., V_Y=0.), seed=seed+i_N) if i_N == 0: phase = 0.5 + 0. * im_[0, 0, :]#mc.N_X/2, mc.N_Y/2, :] #im += im_ - im_[mc.N_X/2, mc.N_Y/2, :] + phase im += im_ - im_[0, 0, :] + phase if play: mc.play(mc.rectif(im)) else: mc.anim_save(mc.rectif(im), name_) # mplayer figures/concentric.mpg -fs -loop 0
#import psychopy #import vispy #from vispy import scene #print(dir(mc)) #from vispy.visuals.transforms import STTransform,MatrixTransform # params: sf0 = 0.1 bsf = .05 vX = 9.6 vY = 0 bV = .5 theta = 60 bTheta = 1.27 #4/3.14 # define Fourier domain fx, fy, ft = mc.get_grids(mc.N_X, mc.N_Y, 10) #mc.N_frame) # define an envelope envelope = mc.envelope_gabor(fx, fy, ft, V_X=vX, V_Y=vY, B_V=bV, sf_0=sf0, B_sf=bsf, theta=theta, B_theta=bTheta, alpha=1.) # Visualize the Fourier Spectrum #mc.visualize(envelope) #mc.figures(envelope,'test') movie=mc.random_cloud(envelope) movie=mc.rectif(movie) name = 'sf' + str(sf0) + '_bsf' + str(bsf) + '_vX' + str(vX) + '_vY' + str(vY) + '_bV' + str(bV) + '_th' + str(theta) + '_bTh' + str(bTheta) print name mypath = '/c/Users/Egor/Dropbox/Projects/mc/mc/test' #mc.cube(movie, name=name+'_cube') mc.anim_save(movie, name, display=False, vext='.mp4') #prev .mp4