import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [16, 8]
def flougaussien(u,sigma):
M, N = u.shape
h = np.zeros((M,N))
# 1. calcul de h filtre gaussien (image de gaussienne)
for m in range(-M//2,M//2):
for n in range(-N//2,N//2):
c = np.exp(-(m**2+n**2)/sigma**2)
h[np.mod(m,M),np.mod(n,N)] = c
plt.subplot(1,2,1)
plt.imshow(h,cmap="gray")
# 2. calcul des TFD de u et de h
fu = np.fft.fft2(u)
fh = np.fft.fft2(h)
# 3. calcul du produit des TFD
fufh = fu*fh
# 4. calcul de la TFD inverse
res = np.fft.ifft2(fufh)
res = np.real(res)
return res
M, N = 512, 512
u = plt.imread('images/Barbara.bmp').astype(float)
res = flougaussien(u,5)
plt.subplot(1,2,2)
plt.imshow(res,cmap='gray')
plt.show()
M, N = 256, 256
u = np.zeros((M,N))
indL = np.arange(0,M)
indC = np.arange(0,N)
X, Y = np.meshgrid(indL,indC)
V = [2.0,1.0]
u[np.mod(X*V[0]+Y*V[1],6)<3]=1
u[(X-M//2)**2 + (Y-N//2)**2 > 100**2] = 0.5
plt.rcParams['figure.figsize'] = [15, 15]
plt.imshow(u,cmap="gray")
plt.show()
fu = np.fft.fft2(u)
plt.rcParams['figure.figsize'] = [5, 5]
plt.imshow(np.log(0.1+np.fft.fftshift(np.abs(fu))),cmap="gray")
plt.show()
v = u[::2,::2]
plt.rcParams['figure.figsize'] = [10, 10]
plt.imshow(v,cmap="gray")
plt.show()
fv = np.fft.fft2(v)
plt.rcParams['figure.figsize'] = [5, 5]
plt.imshow(np.log(.1+np.fft.fftshift(np.abs(fv))),cmap="gray")
plt.show()