from numpy.fft import fft2, ifft2, fftshift, ifftshift import convolve import time import numpy import pylab im = pylab.imread("./nao_bw.jpg") masksizes = [5, 11, 21, 31, 41, 51, 61] assert im.shape[0] == im.shape[1] pylab.gray() pylab.subplot(2, 6, 1) pylab.imshow(im) pylab.axis('off') times_convolve = [] times_fft = [] for i, s in enumerate(masksizes): r = numpy.linspace(-5, 5, s) x, y = numpy.meshgrid(r, r) g = numpy.exp(-(x**2+y**2)) #LOWPASS: f = g/g.sum() #HIGHPASS: #d = numpy.zeros(g.shape) #d[d.shape[0]/2,d.shape[1]/2 ] = 1.0 #f = d-g/g.sum() #TIME DOMAIN: t0 = time.time() IM = convolve.convolve(im, f) times_convolve.append(time.time()-t0) pylab.subplot(2, len(masksizes), i+1) pylab.imshow(IM[s/2:-s/2,s/2:-s/2], interpolation='nearest') pylab.axis('off') #FREQUENCY DOMAIN: F = numpy.zeros_like(im, dtype="float") F[(im.shape[0]-s)/2:(im.shape[0]-s)/2+s,(im.shape[1]-s)/2:(im.shape[1]-s)/2+s] = f t0 = time.time() IM = numpy.real( ifft2( fft2(im) * fft2(f, s=im.shape))) #IM = numpy.real( ifft2( fft2(im) * abs(fft2(F)) ) ) times_fft.append(time.time()-t0) pylab.subplot(2, len(masksizes), i+1+len(masksizes)) pylab.imshow(IM[s/2:-s/2,s/2:-s/2], interpolation='nearest') pylab.axis('off') f2 = pylab.figure() pylab.plot(masksizes, times_convolve) pylab.xlabel("masksizes") pylab.ylabel("time") pylab.title("time domain") f3 = pylab.figure() pylab.plot(masksizes, times_fft) pylab.xlabel("masksizes") pylab.ylabel("time") pylab.title("frequency domain") pylab.show()