# Introduction to Image Processing¶

This numerical tour explores some basic image processing tasks.


In [1]:
from nt_toolbox.general import *
from nt_toolbox.signal import *
%pylab inline
%matplotlib inline

Populating the interactive namespace from numpy and matplotlib

WARNING: pylab import has clobbered these variables: ['pylab']
%matplotlib prevents importing * from pylab and numpy


Several functions are implemented to load and display images.

path to the images

In [2]:
name = 'nt_toolbox/data/lena.png'
n = 256


We can display it. It is possible to zoom on it, extract pixels, etc.

In [3]:
imageplot(M[n/2-25:n/2+25,n/2-25:n/2+25], 'Zoom', [1, 2, 2])


## Image Modification¶

An image is a 2D array, that can be modified as a matrix.

In [4]:
imageplot(-M, '-M', [1,2,1])
imageplot(M[::-1,:], 'Flipped', [1,2,2])


Blurring is achieved by computing a convolution with a kernel.

Compute the low pass Gaussian kernel. Warning, the indexes needs to be modulo $n$ in order to use FFTs.

In [5]:
sigma = 5
t = concatenate( (arange(0,n/2+1), arange(-n/2,-1)) )
[Y,X] = np.meshgrid(t,t)
h = exp( -(X**2+Y**2)/(2.0*float(sigma)**2) )
h = h/sum(h)
imageplot(fftshift(h))


Compute the periodic convolution ussing FFTs

In [6]:
Mh = real( ifft2(fft2(M) * fft2(h)) )


Display

In [7]:
imageplot(M, 'Image', [1, 2, 1])
imageplot(Mh, 'Blurred', [1, 2, 2])


Several differential and convolution operators are implemented.

In [8]:
G = grad(M)
imageplot(G[:,:,0], 'd/ dx', [1, 2, 1])
imageplot(G[:,:,1], 'd/ dy', [1, 2, 2])


## Fourier Transform¶

The 2D Fourier transform can be used to perform low pass approximation and interpolation (by zero padding).

Compute and display the Fourier transform (display over a log scale). The function fftshift is useful to put the 0 low frequency in the middle. After fftshift, the zero frequency is located at position $(n/2+1,n/2+1)$.

In [9]:
Mf = fft2(M)
Lf = fftshift(log(abs(Mf) + 1e-1))
imageplot(M, 'Image', [1, 2, 1])
imageplot(Lf, 'Fourier transform', [1, 2, 2])


Exercise 1: To avoid boundary artifacts and estimate really the frequency content of the image (and not of the artifacts!), one needs to multiply M by a smooth windowing function h and compute fft2(M*h). Use a sine windowing function. Can you interpret the resulting filter ?

In [10]:
run -i nt_solutions/introduction_3_image/exo1


Exercise 2: Perform low pass filtering by removing the high frequencies of the spectrum. What do you oberve ?

In [11]:
run -i nt_solutions/introduction_3_image/exo2