Spojitá fourierova tranformace
$$ F(u,v)=\int \int_{-\infty}^{\infty} f(x,y) e^{-j2\pi(ux+vy)} dx dy $$Kde $u$ a $v$ jsou souřadnice ve frekvenčním prostoru a $x$ a $y$ jsou souřadnice v obrazovém prostoru. $F(u,v)$ je 2D spektrum obrazové funkce $F(x,y)$
Diskrétní fourierova transformace
$$ F(u,v)=\sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} f[m,n]e^{-j2\pi(umx_o+vny_o)} $$%pylab inline
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
import skimage.io
Populating the interactive namespace from numpy and matplotlib
Výstup fourierovy transformace je (relativně) souměrný podle středu a má běžně nízké frekvence na okrajích. Pro vizualizaci a lepší představu se kvadranty obrazu přehazují pomocí funkce fftshift()
im = data.camera()
ft = np.fft.fft2(im)
ftshift = np.fft.fftshift(ft)
spek = 20*np.log(np.abs(ftshift))
# vizualizace
plt.subplot(121)
plt.imshow(im, cmap='gray')
plt.subplot(122)
plt.imshow(spek, cmap = 'gray')
plt.title('Spektrum')
Text(0.5, 1.0, 'Spektrum')
Example: Show fourier transform of the camera image.
x, y = np.indices(im.shape)
center1 = (256, 256)
radius1 = 20
mask = (x - center1[0])**2 + (y - center1[1])**2 < radius1**2
plt.imshow(mask)
<matplotlib.image.AxesImage at 0x7871b50>
#ftshift * mask
ftshift_mask = ftshift*(mask)
ftishift_back = np.fft.ifftshift(ftshift_mask)
im_back = np.fft.ifft2(ftishift_back)
im_back = np.abs(im_back)
# Visualization
plt.figure(figsize=(9, 4))
plt.subplot(121)
plt.imshow(im_back, cmap='gray')
plt.subplot(122)
plt.imshow(np.log(np.abs(ftshift_mask)), cmap='gray')
<matplotlib.image.AxesImage at 0x59e4310>
# Vytvoření filtru
x, y = np.indices(im.shape)
center2 = (256, 256)
radius2 = 80
mask2 = (x - center1[0])**2 + (y - center1[1])**2 < radius1**2
# Filtrace a zpětná FT
ftshift_mask = ftshift*(1-mask2)
ftishift_back = np.fft.ifftshift(ftshift_mask)
im_back2 = np.fft.ifft2(ftishift_back)
im_back2 = np.abs(im_back2)
# Visualization
plt.figure(figsize=(9, 4))
plt.subplot(121)
plt.imshow(im_back2, cmap='gray')
plt.subplot(122)
plt.imshow(np.log(np.abs(ftshift_mask)), cmap='gray')
<matplotlib.image.AxesImage at 0x5d4eb10>
Make restauration of the image http://www.imagemagick.org/Usage/fourier/twigs.jpg
clown = skimage.io.imread('http://www.imagemagick.org/Usage/fourier/clown.jpg')
twigs = skimage.io.imread('http://www.imagemagick.org/Usage/fourier/twigs.jpg')