Carrega as bibliotecas necessárias e a imagem da Lena.
%matplotlib inline
from skimage import color
import urllib, cStringIO
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image as ImagePIL
lenaUrl = 'https://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png'
f = cStringIO.StringIO(urllib.urlopen(lenaUrl).read())
img = ImagePIL.open(f)
img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3)
img = color.rgb2gray(img)
plt.imshow(img, cmap=plt.cm.gray)
plt.show()
Transforma a imagem para o domínio da frequência e plota centralizando utilizando fftshift.
img_freq = np.fft.fft2(img)
plt.imshow(100*np.log(1+abs(np.fft.fftshift(img_freq))), cmap='gray')
Cria uma máscara para ser aplicada ao domínio da frequência.
a, b = img.shape[0]/2, img.shape[1]/2 #centro
r = 20 #raio
y,x = np.ogrid[-a:img.shape[0]-a, -b:img.shape[1]-b]
mask = x*x + y*y <= r*r
plt.imshow(mask, cmap='gray')
Aplica a máscara ao domínio da frequência
plt.imshow(100*np.log(1+abs(np.fft.fftshift(img_freq) * mask)) , cmap='gray')
Resultado da máscara aplicada.
plt.imshow(abs(np.fft.ifft2(np.fft.fftshift(img_freq) * mask)), cmap='gray')
Resultada da máscara transformada de volta pro domínio espacial.
plt.imshow(abs(np.fft.ifft2(mask)), cmap='gray')